public PomeloClient() { netWorkState = enNetWorkState.Disconnected; eventManager = new EventManager(); receiveMsgQueue = new Queue <Message>(); }
public void Disconnect() { if (netWorkState == enNetWorkState.Disconnected) { return; } /// Force update to make sure all received messages been dispatched. Update(); // free managed resources if (m_protocol != null) { m_protocol.Close(); } try { m_socket.Shutdown(SocketShutdown.Both); m_socket.Close(); m_socket = null; } catch (Exception) { //todo : 有待确定这里是否会出现异常,这里是参考之前官方github上pull request。emptyMsg } netWorkState = enNetWorkState.Disconnected; eventManager.ClearCallBackMap(); eventManager.ClearCallBackMap(); m_reqId = 100; }
internal void _onDisconnect(string reason) { netWorkState = enNetWorkState.Disconnected; MessageObject jsonObj = new MessageObject(); jsonObj.Add("reason", reason); Message msg = new Message(enMessageType.Sys, DisconnectEvent, jsonObj); receiveMsgQueue.Enqueue(msg); m_socket.Close(); m_socket = null; }
protected void _onConnectCallback(IAsyncResult result) { try { netWorkState = enNetWorkState.Connected; m_socket.EndConnect(result); m_protocol = new Protocol(this, m_socket); Message msg = new Message(enMessageType.Sys, SYS_MSG_CONNECTED); receiveMsgQueue.Enqueue(msg); } catch (SocketException e) { _onDisconnect(e.Message); } }
/// 初始化连接 public void InitClient(string host, int port, Action <Message> callback) { _assert(netWorkState == enNetWorkState.Disconnected); UnityEngine.Debug.Log("Connect to " + host + " with port " + port); netWorkState = enNetWorkState.Connecting; IPAddress ipAddress = null; try { if (!IPAddress.TryParse(host, out ipAddress)) { IPAddress[] addresses = Dns.GetHostEntry(host).AddressList; foreach (var item in addresses) { if (item.AddressFamily == AddressFamily.InterNetwork) { ipAddress = item; break; } } } } catch (Exception e) { _onDisconnect(e.Message); return; } if (ipAddress == null) { throw new Exception("Cannot parse host : " + host); } m_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint ie = new IPEndPoint(ipAddress, port); eventManager.RemoveCallback(SYS_MSG_CONNECTED); eventManager.AddCallback(SYS_MSG_CONNECTED, callback); m_socket.BeginConnect(ie, _onConnectCallback, m_socket); }