| | |
| | | using UnityEngine; |
| | | using System; |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using Snxxz.UI; |
| | | |
| | | public class GameNetSystem : Singleton<GameNetSystem> |
| | | { |
| | | NetUpdateBehaviour m_NetUpdateBehaviour; |
| | | NeverConnectState neverConnectState; |
| | | AccountLoginState accountLoginState; |
| | | CreateOrSelectRoleState createOrSelectRoleState; |
| | | RoleLoginState roleLoginState; |
| | | ConnectedState connectedState; |
| | | DisconnectState disconnectState; |
| | | |
| | | NetState m_NetState; |
| | | public NetState netState { |
| | | get { return this.m_NetState; } |
| | | set { |
| | | if (this.m_NetState != value) |
| | | { |
| | | switch (m_NetState) |
| | | { |
| | | case NetState.NerverConnect: |
| | | neverConnectState.OnExit(); |
| | | break; |
| | | case NetState.AccountLogin: |
| | | accountLoginState.OnExit(); |
| | | break; |
| | | case NetState.CreateOrSelectRole: |
| | | createOrSelectRoleState.OnExit(); |
| | | break; |
| | | case NetState.RoleLogin: |
| | | roleLoginState.OnExit(); |
| | | break; |
| | | case NetState.Connected: |
| | | connectedState.OnExit(); |
| | | break; |
| | | case NetState.DisConnected: |
| | | disconnectState.OnExit(); |
| | | break; |
| | | } |
| | | |
| | | this.m_NetState = value; |
| | | switch (m_NetState) |
| | | { |
| | | case NetState.NerverConnect: |
| | | neverConnectState.OnEnter(); |
| | | break; |
| | | case NetState.AccountLogin: |
| | | accountLoginState.OnEnter(); |
| | | break; |
| | | case NetState.CreateOrSelectRole: |
| | | createOrSelectRoleState.OnEnter(); |
| | | break; |
| | | case NetState.RoleLogin: |
| | | roleLoginState.OnEnter(); |
| | | break; |
| | | case NetState.Connected: |
| | | connectedState.OnEnter(); |
| | | break; |
| | | case NetState.DisConnected: |
| | | disconnectState.OnEnter(); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | private ClientSocketController socketController; |
| | | public bool socketConnected { get { return socketController == null ? false : socketController.Connected; } } |
| | | |
| | | Queue<GameNetPackBasic> packQueue = new Queue<GameNetPackBasic>(); |
| | | |
| | | DateTime m_LastPackageTime; |
| | | public DateTime lastPackageTime { get { return m_LastPackageTime; } } |
| | | |
| | | Action onConnected; |
| | | public event Action disconnectEvent; |
| | | public event Action connectedEvent; |
| | | |
| | | public GameNetSystem() |
| | | { |
| | | var gameObject = new GameObject("NetUpdateBehaviour"); |
| | | GameObject.DontDestroyOnLoad(gameObject); |
| | | m_NetUpdateBehaviour = gameObject.AddComponent<NetUpdateBehaviour>(); |
| | | m_NetUpdateBehaviour.RegisterUpdateCallBack(OnUpdate); |
| | | |
| | | neverConnectState = gameObject.AddComponent<NeverConnectState>(); |
| | | accountLoginState = gameObject.AddComponent<AccountLoginState>(); |
| | | createOrSelectRoleState = gameObject.AddComponent<CreateOrSelectRoleState>(); |
| | | roleLoginState = gameObject.AddComponent<RoleLoginState>(); |
| | | connectedState = gameObject.AddComponent<ConnectedState>(); |
| | | disconnectState = gameObject.AddComponent<DisconnectState>(); |
| | | |
| | | netState = NetState.NerverConnect; |
| | | } |
| | | |
| | | public void BeginConnectGameServer(string _ip, int _port, Action _onConnected) |
| | | { |
| | | if (socketController != null && socketController.Connected) |
| | | { |
| | | socketController.CloseConnect(); |
| | | } |
| | | |
| | | socketController = new ClientSocketController(); |
| | | |
| | | GameNetEncode.ResetEncodeIndex(); |
| | | lock (packQueue) |
| | | { |
| | | packQueue.Clear(); |
| | | } |
| | | |
| | | onConnected = _onConnected; |
| | | socketController.Connect(_ip, _port, OnSocketConnected); |
| | | } |
| | | |
| | | public void SendInfo(GameNetPackBasic vNetPack) |
| | | { |
| | | if (socketController != null) |
| | | { |
| | | socketController.SendInfo(vNetPack); |
| | | } |
| | | } |
| | | |
| | | public void SendInfo(byte[] vBytes) |
| | | { |
| | | if (socketController != null) |
| | | { |
| | | socketController.SendInfo(vBytes); |
| | | } |
| | | } |
| | | |
| | | public void PushPackage(GameNetPackBasic _package) |
| | | { |
| | | if (_package == null) |
| | | { |
| | | return; |
| | | } |
| | | |
| | | m_LastPackageTime = DateTime.Now; |
| | | |
| | | lock (packQueue) |
| | | { |
| | | lock (_package) |
| | | { |
| | | if (PackageRegedit.Contain(_package.cmd)) |
| | | { |
| | | packQueue.Enqueue(_package); |
| | | } |
| | | else |
| | | { |
| | | DesignDebug.LogWarningFormat("数据包(cmd:{0})未登记!", _package.cmd); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | public void Disconnect() |
| | | { |
| | | try |
| | | { |
| | | if (socketController != null) |
| | | { |
| | | socketController.CloseConnect(); |
| | | } |
| | | GameNetEncode.ResetEncodeIndex(); |
| | | |
| | | lock (packQueue) |
| | | { |
| | | packQueue.Clear(); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Debug.Log(ex); |
| | | } |
| | | finally |
| | | { |
| | | netState = NetState.DisConnected; |
| | | } |
| | | |
| | | } |
| | | |
| | | public void Reconnect() |
| | | { |
| | | try |
| | | { |
| | | if (socketController != null) |
| | | { |
| | | socketController.CloseConnect(); |
| | | } |
| | | GameNetEncode.ResetEncodeIndex(); |
| | | lock (packQueue) |
| | | { |
| | | packQueue.Clear(); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Debug.Log(ex); |
| | | } |
| | | finally |
| | | { |
| | | netState = NetState.AccountLogin; |
| | | |
| | | var loginModel = ModelCenter.Instance.GetModel<LoginModel>(); |
| | | loginModel.busy = false; |
| | | loginModel.ReAccountLogin(); |
| | | } |
| | | } |
| | | |
| | | public void LoginOut() |
| | | { |
| | | try |
| | | { |
| | | if (socketController != null) |
| | | { |
| | | socketController.CloseConnect(); |
| | | } |
| | | GameNetEncode.ResetEncodeIndex(); |
| | | lock (packQueue) |
| | | { |
| | | packQueue.Clear(); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Debug.Log(ex); |
| | | } |
| | | finally |
| | | { |
| | | netState = NetState.NerverConnect; |
| | | var loginModel = ModelCenter.Instance.GetModel<LoginModel>(); |
| | | loginModel.busy = false; |
| | | WindowJumpMgr.Instance.ClearJumpData(); |
| | | StageManager.Instance.LoadLoginStage(); |
| | | NetLinkWin.Hide(); |
| | | } |
| | | |
| | | } |
| | | |
| | | public void OnAccountLogin() |
| | | { |
| | | netState = NetState.AccountLogin; |
| | | } |
| | | |
| | | public void OnEnterWorld() |
| | | { |
| | | netState = NetState.RoleLogin; |
| | | } |
| | | |
| | | void OnUpdate() |
| | | { |
| | | lock (packQueue) |
| | | { |
| | | if (packQueue != null) |
| | | { |
| | | while (packQueue.Count > 0) |
| | | { |
| | | PackageRegedit.Distribute(packQueue.Dequeue()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | private void OnSocketConnected() |
| | | { |
| | | m_LastPackageTime = DateTime.Now; |
| | | if (onConnected != null) |
| | | { |
| | | onConnected(); |
| | | onConnected = null; |
| | | } |
| | | } |
| | | |
| | | public enum NetState |
| | | { |
| | | NerverConnect = 1, |
| | | AccountLogin = 2, |
| | | CreateOrSelectRole = 3, |
| | | RoleLogin = 4, |
| | | Connected = 5, |
| | | DisConnected = 6, |
| | | } |
| | | |
| | | } |
| | | using UnityEngine;
|
| | | using System;
|
| | | using System.Collections;
|
| | | using System.Collections.Generic;
|
| | | using Snxxz.UI;
|
| | |
|
| | | public class GameNetSystem : Singleton<GameNetSystem>
|
| | | {
|
| | | NetUpdateBehaviour m_NetUpdateBehaviour;
|
| | | NeverConnectState neverConnectState;
|
| | | AccountLoginState accountLoginState;
|
| | | CreateOrSelectRoleState createOrSelectRoleState;
|
| | | RoleLoginState roleLoginState;
|
| | | ConnectedState connectedState;
|
| | | DisconnectState disconnectState;
|
| | |
|
| | | NetState m_NetState;
|
| | | public NetState netState {
|
| | | get { return this.m_NetState; }
|
| | | set {
|
| | | if (this.m_NetState != value)
|
| | | {
|
| | | switch (m_NetState)
|
| | | {
|
| | | case NetState.NerverConnect:
|
| | | neverConnectState.OnExit();
|
| | | break;
|
| | | case NetState.AccountLogin:
|
| | | accountLoginState.OnExit();
|
| | | break;
|
| | | case NetState.CreateOrSelectRole:
|
| | | createOrSelectRoleState.OnExit();
|
| | | break;
|
| | | case NetState.RoleLogin:
|
| | | roleLoginState.OnExit();
|
| | | break;
|
| | | case NetState.Connected:
|
| | | connectedState.OnExit();
|
| | | break;
|
| | | case NetState.DisConnected:
|
| | | disconnectState.OnExit();
|
| | | break;
|
| | | }
|
| | |
|
| | | this.m_NetState = value;
|
| | | switch (m_NetState)
|
| | | {
|
| | | case NetState.NerverConnect:
|
| | | neverConnectState.OnEnter();
|
| | | break;
|
| | | case NetState.AccountLogin:
|
| | | accountLoginState.OnEnter();
|
| | | break;
|
| | | case NetState.CreateOrSelectRole:
|
| | | createOrSelectRoleState.OnEnter();
|
| | | break;
|
| | | case NetState.RoleLogin:
|
| | | roleLoginState.OnEnter();
|
| | | break;
|
| | | case NetState.Connected:
|
| | | connectedState.OnEnter();
|
| | | break;
|
| | | case NetState.DisConnected:
|
| | | disconnectState.OnEnter();
|
| | | break;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | private ClientSocketController socketController;
|
| | | public bool socketConnected { get { return socketController == null ? false : socketController.Connected; } }
|
| | |
|
| | | Queue<GameNetPackBasic> packQueue = new Queue<GameNetPackBasic>();
|
| | |
|
| | | DateTime m_LastPackageTime;
|
| | | public DateTime lastPackageTime { get { return m_LastPackageTime; } }
|
| | |
|
| | | Action onConnected;
|
| | | public event Action disconnectEvent;
|
| | | public event Action connectedEvent;
|
| | |
|
| | | public GameNetSystem()
|
| | | {
|
| | | var gameObject = new GameObject("NetUpdateBehaviour");
|
| | | GameObject.DontDestroyOnLoad(gameObject);
|
| | | m_NetUpdateBehaviour = gameObject.AddComponent<NetUpdateBehaviour>();
|
| | | m_NetUpdateBehaviour.RegisterUpdateCallBack(OnUpdate);
|
| | |
|
| | | neverConnectState = gameObject.AddComponent<NeverConnectState>();
|
| | | accountLoginState = gameObject.AddComponent<AccountLoginState>();
|
| | | createOrSelectRoleState = gameObject.AddComponent<CreateOrSelectRoleState>();
|
| | | roleLoginState = gameObject.AddComponent<RoleLoginState>();
|
| | | connectedState = gameObject.AddComponent<ConnectedState>();
|
| | | disconnectState = gameObject.AddComponent<DisconnectState>();
|
| | |
|
| | | netState = NetState.NerverConnect;
|
| | | }
|
| | |
|
| | | public void BeginConnectGameServer(string _ip, int _port, Action _onConnected)
|
| | | {
|
| | | if (socketController != null && socketController.Connected)
|
| | | {
|
| | | socketController.CloseConnect();
|
| | | }
|
| | |
|
| | | socketController = new ClientSocketController();
|
| | |
|
| | | GameNetEncode.ResetEncodeIndex();
|
| | | lock (packQueue)
|
| | | {
|
| | | packQueue.Clear();
|
| | | }
|
| | |
|
| | | onConnected = _onConnected;
|
| | | socketController.Connect(_ip, _port, OnSocketConnected);
|
| | | }
|
| | |
|
| | | public void SendInfo(GameNetPackBasic vNetPack)
|
| | | {
|
| | | if (socketController != null)
|
| | | {
|
| | | socketController.SendInfo(vNetPack);
|
| | | }
|
| | | }
|
| | |
|
| | | public void SendInfo(byte[] vBytes)
|
| | | {
|
| | | if (socketController != null)
|
| | | {
|
| | | socketController.SendInfo(vBytes);
|
| | | }
|
| | | }
|
| | |
|
| | | public void PushPackage(GameNetPackBasic _package)
|
| | | {
|
| | | if (_package == null)
|
| | | {
|
| | | return;
|
| | | }
|
| | |
|
| | | m_LastPackageTime = DateTime.Now;
|
| | |
|
| | | lock (packQueue)
|
| | | {
|
| | | lock (_package)
|
| | | {
|
| | | if (PackageRegedit.Contain(_package.cmd))
|
| | | {
|
| | | packQueue.Enqueue(_package);
|
| | | }
|
| | | else
|
| | | {
|
| | | DebugEx.LogWarningFormat("数据包(cmd:{0})未登记!", _package.cmd);
|
| | | }
|
| | | }
|
| | |
|
| | | }
|
| | |
|
| | | }
|
| | |
|
| | | public void Disconnect()
|
| | | {
|
| | | try
|
| | | {
|
| | | if (socketController != null)
|
| | | {
|
| | | socketController.CloseConnect();
|
| | | }
|
| | | GameNetEncode.ResetEncodeIndex();
|
| | |
|
| | | lock (packQueue)
|
| | | {
|
| | | packQueue.Clear();
|
| | | }
|
| | | }
|
| | | catch (Exception ex)
|
| | | {
|
| | | Debug.Log(ex);
|
| | | }
|
| | | finally
|
| | | {
|
| | | netState = NetState.DisConnected;
|
| | | }
|
| | |
|
| | | }
|
| | |
|
| | | public void Reconnect()
|
| | | {
|
| | | try
|
| | | {
|
| | | if (socketController != null)
|
| | | {
|
| | | socketController.CloseConnect();
|
| | | }
|
| | | GameNetEncode.ResetEncodeIndex();
|
| | | lock (packQueue)
|
| | | {
|
| | | packQueue.Clear();
|
| | | }
|
| | | }
|
| | | catch (Exception ex)
|
| | | {
|
| | | Debug.Log(ex);
|
| | | }
|
| | | finally
|
| | | {
|
| | | netState = NetState.AccountLogin;
|
| | |
|
| | | var loginModel = ModelCenter.Instance.GetModel<LoginModel>();
|
| | | loginModel.busy = false;
|
| | | loginModel.ReAccountLogin();
|
| | | }
|
| | | }
|
| | |
|
| | | public void LoginOut()
|
| | | {
|
| | | try
|
| | | {
|
| | | if (socketController != null)
|
| | | {
|
| | | socketController.CloseConnect();
|
| | | }
|
| | | GameNetEncode.ResetEncodeIndex();
|
| | | lock (packQueue)
|
| | | {
|
| | | packQueue.Clear();
|
| | | }
|
| | | }
|
| | | catch (Exception ex)
|
| | | {
|
| | | Debug.Log(ex);
|
| | | }
|
| | | finally
|
| | | {
|
| | | netState = NetState.NerverConnect;
|
| | | var loginModel = ModelCenter.Instance.GetModel<LoginModel>();
|
| | | loginModel.busy = false;
|
| | | WindowJumpMgr.Instance.ClearJumpData();
|
| | | StageManager.Instance.LoadLoginStage();
|
| | | NetLinkWin.Hide();
|
| | | }
|
| | |
|
| | | }
|
| | |
|
| | | public void OnAccountLogin()
|
| | | {
|
| | | netState = NetState.AccountLogin;
|
| | | }
|
| | |
|
| | | public void OnEnterWorld()
|
| | | {
|
| | | netState = NetState.RoleLogin;
|
| | | }
|
| | |
|
| | | void OnUpdate()
|
| | | {
|
| | | lock (packQueue)
|
| | | {
|
| | | if (packQueue != null)
|
| | | {
|
| | | while (packQueue.Count > 0)
|
| | | {
|
| | | PackageRegedit.Distribute(packQueue.Dequeue());
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | }
|
| | |
|
| | | private void OnSocketConnected()
|
| | | {
|
| | | m_LastPackageTime = DateTime.Now;
|
| | | if (onConnected != null)
|
| | | {
|
| | | onConnected();
|
| | | onConnected = null;
|
| | | }
|
| | | }
|
| | |
|
| | | public enum NetState
|
| | | {
|
| | | NerverConnect = 1,
|
| | | AccountLogin = 2,
|
| | | CreateOrSelectRole = 3,
|
| | | RoleLogin = 4,
|
| | | Connected = 5,
|
| | | DisConnected = 6,
|
| | | }
|
| | |
|
| | | }
|