| | |
| | | |
| | | public class GameNetSystem : Singleton<GameNetSystem> |
| | | { |
| | | // NetUpdateBehaviour m_NetUpdateBehaviour; |
| | | NetUpdateBehaviour m_NetUpdateBehaviour; |
| | | NeverConnectState neverConnectState; |
| | | AccountLoginState accountLoginState; |
| | | // CreateOrSelectRoleState createOrSelectRoleState; |
| | |
| | | get { return mainSocket == null ? Time.time : (float)(DateTime.Now - mainSocket.lastPackageTime).TotalSeconds; } |
| | | } |
| | | |
| | | public bool crossServerConnected_Loigc { get; set; } |
| | | private ClientSocket crossServerSocket; |
| | | public bool crossServerSocketConnected { get { return crossServerConnected_Loigc && (crossServerSocket == null ? false : crossServerSocket.connected); } } |
| | | |
| | | public float timeSinceCrossServerSocketLastProtocol |
| | | { |
| | | get { return crossServerSocket == null ? Time.time : (float)(DateTime.Now - crossServerSocket.lastPackageTime).TotalSeconds; } |
| | | } |
| | | |
| | | Queue<GameNetPackBasic> mainProtocolQueue = new Queue<GameNetPackBasic>(); |
| | | Queue<GameNetPackBasic> crossSeverProtocolQueue = new Queue<GameNetPackBasic>(); |
| | | |
| | | public CrossServerData crossServerData { get; private set; } |
| | | |
| | | public GameNetSystem() |
| | | { |
| | | var gameObject = new GameObject("NetUpdateBehaviour"); |
| | | GameObject.DontDestroyOnLoad(gameObject); |
| | | // m_NetUpdateBehaviour = gameObject.AddComponent<NetUpdateBehaviour>(); |
| | | // m_NetUpdateBehaviour.RegisterUpdateCallBack(OnUpdate); |
| | | GameObject.DontDestroyOnLoad(gameObject);
|
| | | m_NetUpdateBehaviour = gameObject.AddComponent<NetUpdateBehaviour>();
|
| | | m_NetUpdateBehaviour.RegisterUpdateCallBack(OnUpdate); |
| | | |
| | | neverConnectState = gameObject.AddComponent<NeverConnectState>(); |
| | | accountLoginState = gameObject.AddComponent<AccountLoginState>(); |
| | |
| | | }); |
| | | } |
| | | |
| | | public void BeginConnectCrossServer(string ip, int port, Action<bool> onConnected) |
| | | { |
| | | try |
| | | { |
| | | crossServerConnected_Loigc = false; |
| | | if (crossServerSocketConnected) |
| | | { |
| | | crossServerSocket.CloseConnect(); |
| | | } |
| | | } |
| | | catch (System.Exception ex) |
| | | { |
| | | Debug.Log(ex); |
| | | } |
| | | |
| | | crossServerSocket = new ClientSocket(ServerType.CrossSever); |
| | | crossSeverProtocolQueue.Clear(); |
| | | this.crossServerSocket.Connect(ip, port, (bool ok) => |
| | | { |
| | | if (onConnected != null) |
| | | { |
| | | onConnected(ok); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | public void UpdateCrossServerData(string ip, int port, byte state) |
| | | { |
| | | this.crossServerData = new CrossServerData(ip, port, state); |
| | | if (this.crossServerData.crossState == 0) |
| | | { |
| | | crossServerConnected_Loigc = false; |
| | | } |
| | | } |
| | | |
| | | public void SendInfo(GameNetPackBasic protocol) |
| | | { |
| | | if (mainSocket != null) |
| | |
| | | } |
| | | } |
| | | |
| | | public void SendToCrossServer(GameNetPackBasic protocol) |
| | | { |
| | | if (crossServerSocket != null) |
| | | { |
| | | protocol.socketType = ServerType.CrossSever; |
| | | crossServerSocket.SendInfo(protocol); |
| | | DebugPkgCache.Push(protocol); |
| | | } |
| | | } |
| | | |
| | | public void PushPackage(GameNetPackBasic protocol, ServerType type) |
| | | { |
| | |
| | | |
| | | if (PackageRegedit.Contain(protocol.cmd)) |
| | | { |
| | | switch (type) |
| | | { |
| | | case ServerType.Main: |
| | | mainProtocolQueue.Enqueue(protocol); |
| | | break; |
| | | case ServerType.CrossSever: |
| | | crossSeverProtocolQueue.Enqueue(protocol); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | mainProtocolQueue.Enqueue(protocol); |
| | | |
| | | DebugPkgCache.Push(protocol); |
| | | } |
| | |
| | | mainSocket.CloseConnect(); |
| | | } |
| | | |
| | | if (crossServerSocket != null) |
| | | { |
| | | crossServerSocket.CloseConnect(); |
| | | } |
| | | |
| | | mainProtocolQueue.Clear(); |
| | | crossSeverProtocolQueue.Clear(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | netState = NetState.DisConnected; |
| | | // var loginModel = ModelCenter.Instance.GetModel<LoginModel>(); |
| | | // loginModel.busy = false; |
| | | // CrossServerLogin.Instance.busy = false; |
| | | } |
| | | } |
| | | |
| | | public void DisconnectCrossServer() |
| | | { |
| | | try |
| | | { |
| | | if (crossServerSocket != null) |
| | | { |
| | | crossServerSocket.CloseConnect(); |
| | | } |
| | | |
| | | crossSeverProtocolQueue.Clear(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Debug.Log(ex); |
| | | } |
| | | finally |
| | | { |
| | | // CrossServerLogin.Instance.busy = false; |
| | | } |
| | | } |
| | | |
| | | public void Reconnect() |
| | | { |
| | |
| | | mainSocket.CloseConnect(); |
| | | } |
| | | |
| | | if (crossServerSocket != null) |
| | | { |
| | | crossServerSocket.CloseConnect(); |
| | | } |
| | | |
| | | mainProtocolQueue.Clear(); |
| | | crossSeverProtocolQueue.Clear(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | finally |
| | | { |
| | | netState = NetState.AccountLogin; |
| | | // CrossServerLogin.Instance.busy = false; |
| | | // var loginModel = ModelCenter.Instance.GetModel<LoginModel>(); |
| | | // loginModel.busy = false; |
| | | // loginModel.ReAccountLogin(); |
| | |
| | | try |
| | | { |
| | | // ynmbxxjUtil.Instance.RoleLoginOut(); |
| | | crossServerConnected_Loigc = false; |
| | | |
| | | if (mainSocket != null) |
| | | { |
| | | mainSocket.CloseConnect(); |
| | | } |
| | | |
| | | if (crossServerSocket != null) |
| | | { |
| | | crossServerSocket.CloseConnect(); |
| | | } |
| | | |
| | | mainProtocolQueue.Clear(); |
| | | crossSeverProtocolQueue.Clear(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | netState = NetState.NerverConnect; |
| | | // TODO YYL |
| | | |
| | | // CrossServerLogin.Instance.busy = false; |
| | | // //ArenaManager.isArenaClient = false; |
| | | // var loginModel = ModelCenter.Instance.GetModel<LoginModel>(); |
| | | // loginModel.busy = false; |
| | | // WindowJumpMgr.Instance.ClearJumpData(); |
| | | |
| | | // StageLoad.Instance.PushSceneLoadCommand(new StageLoad.StageLoadCommand() |
| | | // { |
| | |
| | | PackageRegedit.Distribute(package); |
| | | } |
| | | } |
| | | while (crossSeverProtocolQueue.Count > 0) |
| | | { |
| | | var package = crossSeverProtocolQueue.Dequeue(); |
| | | if (package != null) |
| | | { |
| | | PackageRegedit.Distribute(package); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | |
| | | DisConnected = 6, |
| | | } |
| | | |
| | | public struct CrossServerData |
| | | { |
| | | public string ip; |
| | | public int port; |
| | | public CrossServerState crossState; |
| | | |
| | | public CrossServerData(string ip, int port, byte state) |
| | | { |
| | | this.ip = ip; |
| | | this.port = port; |
| | | this.crossState = (CrossServerState)state; |
| | | } |
| | | } |
| | | |
| | | public enum CrossServerState |
| | | { |
| | | No = 0, |
| | | Yes = 1, |
| | | Error = 2, |
| | | } |
| | | |
| | | } |
| | | |
| | | public enum ServerType |
| | | { |
| | | Main = 1, |
| | | CrossSever = 2, |
| | | } |