void DefProc() { if (m_state != ENetState.NET_STATE_CONNECTED && m_state != ENetState.NET_STATE_WAITING_SEED) { return; } if (m_state == ENetState.NET_STATE_CONNECTED) { float now = Time.time; if (now - m_lastSendTime > NET_KEEP_ALIVE_INTERVAL) { KeepAlive((Int32)now); m_lastSendTime = now; } if (now - m_lastRecvTime > NET_TIMEOUT) { Debug.Log("Tcp session dead reason = timeout"); m_state = ENetState.NET_STATE_DEAD; return; } //FlushData(); } //ReadData(); }
public void Disconnect() { DebugUtility.LogTrace(LoggerTags.Online, "Disconnect {0}", host); state = ENetState.Disconnected; BridgeCenter.Caller.DisconnnectAsync(host, ""); BridgeCenter.Caller.onRecvMessageEvent -= OnRecvMessage; Misc.SafeInvoke(onDisconnected, ENetCode.WSNormal); }
protected NetClient() { mLock = new object(); mReplyList = new LinkedList <Reply>(); mNetState = ENetState.ES_UnInit; mMutiPacketHelp = new MutiPacketHelp(this); }
void ConnectWorkFinish(bool bSucc) { Debug.Log("ConnectWorkFinish " + bSucc.ToString() + " fun:" + OnConnect.ToString()); m_state = ENetState.NET_STATE_CONNECTED; if (OnConnect != null) { OnConnect(true); Debug.Log("ConnectWorkFinish to fun"); } }
public void Connect(string url) { this.host = url; DebugUtility.LogTrace(LoggerTags.Online, "Connect {0}", host); var center = BridgeCenter.Caller; center.onRecvMessageEvent -= OnRecvMessage; center.onRecvMessageEvent += OnRecvMessage; state = ENetState.Connected; BridgeCenter.Caller.ConnnectAsync(host, ""); }
protected virtual void OnConnect() { lock (mLock) { mNetState = ENetState.ES_Connected; Reply reply = new Reply(); reply.Type = EReplyType.RT_Connected; mReplyList.AddLast(reply); } }
protected virtual void OnDisconnect(int e) { lock (mLock) { mNetState = ENetState.ES_Disconnect; Reply reply = new Reply(); reply.Type = EReplyType.RT_Disconnect; reply.e = e; mReplyList.AddLast(reply); } }
protected void OnDisconnect(int e) { lock (mLock) { //GameDebug.Log("OnDisconnect"); mNetState = ENetState.ES_Disconnect; Reply reply = new Reply(); reply.Type = EReplyType.RT_Disconnect; reply.e = e; mReplyList.AddLast(reply); } }
protected void SendInternalAuthSessionAck(ClientSession clientSession, ENetState netState) { var bf = new BinaryFormatter(); using (var ms = new MemoryStream()) { bf.Serialize(ms, (byte)netState); bf.Serialize(ms, (short)clientSession.DisconnectState); clientSession.Send((int)EInternalProtocol.AUTH_SESSION_ACK, ms.ToArray(), ms.ToArray().Length); } }
/* * static protected CSocket msInstance; * static public CSocket GetInstance() * { * if (NetClient.msInstance == null) * NetClient.msInstance = new NetClient(); * return NetClient.msInstance; * } */ public CSocket() { mPackNum = 0; mLock = new object(); mRequestList = new LinkedList <Request>(); mRecvBuffer = new List <byte>(); mReplyList = new LinkedList <Reply>(); mNetState = ENetState.ES_UnInit; mMutiPacketHelp = new MutiPacketHelp(this); // add at 2013-9-29 mSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); }
/// <summary> /// 获取当前网络状态 /// </summary> /// <returns>网络状态枚举</returns> public static ENetState GetNetState() { ENetState ens = ENetState.none; if (Application.internetReachability == NetworkReachability.NotReachable) { ens = ENetState.none; } else if (Application.internetReachability == NetworkReachability.ReachableViaCarrierDataNetwork) { ens = ENetState.mobile; } else if (Application.internetReachability == NetworkReachability.ReachableViaLocalAreaNetwork) { ens = ENetState.wifi; } return(ens); }
public void Stop() { lock (mLock) { Clear(); if (mSocket != null) { if (mSocket.Connected) { mSocket.Shutdown(SocketShutdown.Both); mSocket.Close(); } mSocket = null; } mNetState = ENetState.ES_UnInit; } }
public void Start(string ip, int port) { lock (mLock) { if (mNetState == ENetState.ES_Connecting || mNetState == ENetState.ES_Connecting) { return; } YwEncrypt.ResetKey(); mRequestList.Clear(); mRecvBuffer.Clear(); mPackNum = 0; mNetState = ENetState.ES_UnInit; // comment at 2013-9-29 // if (mSocket == null) // mSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); //mThread = new Thread(new ThreadStart(_thread_run)); //mThread.IsBackground = true; //mThread.Start(); if (ip == mServerIP && port == mServerPort && mSocket.Connected) { //mListener.OnConnect(); this.OnConnect(); return; } mServerIP = ip; mServerPort = port; Connect(); mNetState = ENetState.ES_Connecting; mConnectWaitTime = 0; } }
public void Stop() { lock (mLock) { Clear(); if (mSocket != null) { #if UNITY_ANDROID if (Const.Region != RegionType.CHINA) { if (mSocket.Connected) { mSocket.Shutdown(SocketShutdown.Both); } } #endif mSocket.Close(); mSocket = null; } mNetState = ENetState.ES_UnInit; } }
/// <summary> /// N개의 클라이언트를 서버에 연결한다. /// </summary> /// <param name="serverAddr"></param> /// <param name="port"></param> public void Connect(string serverAddr, int port, string playerSessionId, ENetState netState) { System.Net.Sockets.Socket socket = new System.Net.Sockets.Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.LingerState = new LingerOption(true, 10); socket.NoDelay = true; socket.SendTimeout = 1000; socket.ReceiveTimeout = 1000; _clientSession = new ClientSession(_logger, _bufferSize); _clientSession.CompletedMessageCallback += OnMessageCompleted; _clientSession.SessionId = playerSessionId; _clientSession.NetState = netState; _serverAddr = serverAddr; _gameSessionId = string.Empty; _playerSessionId = playerSessionId; _port = port; _reconnectCheckTime = DateTime.UtcNow; _logger.Debug(string.Format("[NetClient] Connect to server. socketHandle: {0}, addr: {1}:{2}, playerSessionId: {3}, gameSessionId: {4}", socket.Handle, _serverAddr, _port, _playerSessionId, _gameSessionId)); SocketAsyncEventArgs args = new SocketAsyncEventArgs(); args.Completed += OnConnectCompleted; args.RemoteEndPoint = new IPEndPoint(IPAddress.Parse(serverAddr), port); bool pendiing = socket.ConnectAsync(args); if (pendiing == false) { OnConnectCompleted(socket, args); } }
/* static protected CSocket msInstance; static public CSocket GetInstance() { if (NetClient.msInstance == null) NetClient.msInstance = new NetClient(); return NetClient.msInstance; } */ public CSocket() { mPackNum = 0; mLock = new object(); mRequestList = new LinkedList<Request>(); mRecvBuffer = new List<byte>(); mReplyList = new LinkedList<Reply>(); mNetState = ENetState.ES_UnInit; mMutiPacketHelp = new MutiPacketHelp(this); // add at 2013-9-29 mSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); }
public void Update() { // if (mListener == null) // return; lock (mLock) { if (mNetState == ENetState.ES_Connecting) { mConnectWaitTime += (int)(UnityEngine.Time.deltaTime * 1000.0f); if (mConnectWaitTime > mConnectMaxWaitTime) { mNetState = ENetState.ES_Disconnect; if (mSocket != null) { mSocket.Close(); mSocket = null; } //mListener.OnDisconnect(-1); } } while (mReplyList.Count > 0) { LinkedListNode <Reply> replyNode = mReplyList.First; switch (replyNode.Value.Type) { case EReplyType.RT_Connected: { UnityEngine.Debug.Log("RT_Connected : Socket Connect Succeed"); connected = true; #if false twp.protocol.c2fep.ReqEncryptInfo reqEncryptInfo = new twp.protocol.c2fep.ReqEncryptInfo(); CBoard.Instance.send(reqEncryptInfo.ToBin()); #endif break; } case EReplyType.RT_Disconnect: { UnityEngine.Debug.LogWarning("RT_Disconnect"); break; } case EReplyType.RT_DataReply: { //UnityEngine.Debug.LogWarning("RT_DataReply"); UnityEngine.Debug.Log("===packet header: " + System.BitConverter.ToUInt16(replyNode.Value.Data.ToArray(), 0) + "==="); //处理消息 processStram(new NetSocket.ByteArray(replyNode.Value.Data.ToArray())); break; } default: break; } mReplyList.RemoveFirst(); } if (mNetState == ENetState.ES_Disconnect) { Clear(); } #if USE_MULTIPACK mMutiPacketHelp.Send(); #endif } }
public void Stop() { lock(mLock) { Clear(); if (mSocket != null) { if (mSocket.Connected) { mSocket.Shutdown(SocketShutdown.Both); mSocket.Close(); } mSocket = null; } mNetState = ENetState.ES_UnInit; } }
public void Start(string ip, int port) { lock(mLock) { if (mNetState == ENetState.ES_Connecting || mNetState == ENetState.ES_Connecting) return; YwEncrypt.ResetKey(); mRequestList.Clear(); mRecvBuffer.Clear(); mPackNum = 0; mNetState = ENetState.ES_UnInit; // comment at 2013-9-29 // if (mSocket == null) // mSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); //mThread = new Thread(new ThreadStart(_thread_run)); //mThread.IsBackground = true; //mThread.Start(); if (ip == mServerIP && port == mServerPort && mSocket.Connected) { //mListener.OnConnect(); this.OnConnect(); return; } mServerIP = ip; mServerPort = port; Connect(); mNetState = ENetState.ES_Connecting; mConnectWaitTime = 0; } }
protected virtual void OnDisconnect(int e) { lock(mLock) { mNetState = ENetState.ES_Disconnect; Reply reply = new Reply(); reply.Type = EReplyType.RT_Disconnect; reply.e = e; mReplyList.AddLast(reply); } }
protected virtual void OnConnect() { lock(mLock) { mNetState = ENetState.ES_Connected; Reply reply = new Reply(); reply.Type = EReplyType.RT_Connected; mReplyList.AddLast(reply); } }
public static bool IsDisconnected(this ENetState state) { return(state <= ENetState.Disconnected); }
public static bool IsConnected(this ENetState state) { return(state == ENetState.Connected); }
public void Update() { // if (mListener == null) // return; lock(mLock) { if (mNetState == ENetState.ES_Connecting) { mConnectWaitTime += (int)(UnityEngine.Time.deltaTime*1000.0f); if (mConnectWaitTime > mConnectMaxWaitTime) { mNetState = ENetState.ES_Disconnect; if (mSocket != null) { mSocket.Close(); mSocket = null; } //mListener.OnDisconnect(-1); } } while(mReplyList.Count > 0) { LinkedListNode<Reply> replyNode = mReplyList.First; switch (replyNode.Value.Type) { case EReplyType.RT_Connected: { UnityEngine.Debug.Log("RT_Connected : Socket Connect Succeed"); connected = true; #if false twp.protocol.c2fep.ReqEncryptInfo reqEncryptInfo = new twp.protocol.c2fep.ReqEncryptInfo(); CBoard.Instance.send(reqEncryptInfo.ToBin()); #endif break; } case EReplyType.RT_Disconnect: { UnityEngine.Debug.LogWarning("RT_Disconnect"); break; } case EReplyType.RT_DataReply: { //UnityEngine.Debug.LogWarning("RT_DataReply"); UnityEngine.Debug.Log("===packet header: " + System.BitConverter.ToUInt16(replyNode.Value.Data.ToArray(), 0) + "==="); //处理消息 processStram(new NetSocket.ByteArray(replyNode.Value.Data.ToArray())); break; } default:break; } mReplyList.RemoveFirst(); } if (mNetState == ENetState.ES_Disconnect) Clear(); #if USE_MULTIPACK mMutiPacketHelp.Send(); #endif } }
public void Start(string ip, int port) { lock (mLock) { if (mNetState == ENetState.ES_Connected || mNetState == ENetState.ES_Connecting) { return; } if (mEncrypt != null) { mEncrypt.ResetKey(); } mRecvBuffer.Clear(); mNetState = ENetState.ES_UnInit; if (mSocket == null) { AddressFamily address_family = AddressFamily.InterNetwork; // get ip from host try { bool addressParsed = false; var host_address = Dns.GetHostAddresses(ip); if (host_address.Length > 0) { foreach (var ip_address in host_address) { if (ip_address.AddressFamily == AddressFamily.InterNetworkV6) { ip = ip_address.ToString(); addressParsed = true; break; } if (!addressParsed && ip_address.AddressFamily == AddressFamily.InterNetwork) { ip = ip_address.ToString(); addressParsed = true; } } } if (!addressParsed) { ip = "0.0.0.0"; } } catch (Exception e) { UnityEngine.Debug.LogError(e.Message); ip = "0.0.0.0"; } // get ipv6 address String new_server_ip = ""; GetIPType(ip, out new_server_ip, out address_family); if (!string.IsNullOrEmpty(new_server_ip)) { ip = new_server_ip; } UnityEngine.Debug.Log("begin connnect ip: " + ip + ":" + port); if (mNetType == NetType.NT_TCP) { mSocket = new Socket(address_family, SocketType.Stream, ProtocolType.Tcp); } else { mSocket = new Socket(address_family, SocketType.Dgram, ProtocolType.Udp); } } if (ip == mServerIP && port == mServerPort && mSocket.Connected) { mListener.OnNetConnect(mNetType); return; } mServerIP = ip; mServerPort = port; Connect(); mNetState = ENetState.ES_Connecting; mConnectWaitTime = 0; } }
public void Update() { if (mListener == null) { return; } lock (mLock) { if (mNetState == ENetState.ES_Connecting) { mConnectWaitTime += (int)(UnityEngine.Time.deltaTime * 1000.0f); if (mConnectWaitTime > mConnectMaxWaitTime) { mNetState = ENetState.ES_Disconnect; if (mSocket != null) { #if UNITY_ANDROID if (Const.Region != RegionType.CHINA) { if (mSocket.Connected) { mSocket.Shutdown(SocketShutdown.Both); } } #endif mSocket.Close(); mSocket = null; } mListener.OnNetDisconnect(mNetType, -1); } } if (mNetState == ENetState.ES_Connected && mSocket != null && !mSocket.Connected) { this.OnDisconnect(-1); } while (mReplyList.Count > 0) { LinkedListNode <Reply> replyNode = mReplyList.First; switch (replyNode.Value.Type) { case EReplyType.RT_Connected: mListener.OnNetConnect(mNetType); break; case EReplyType.RT_Disconnect: mListener.OnNetDisconnect(mNetType, replyNode.Value.e); break; case EReplyType.RT_DataReply: mListener.OnNetDataReply(mNetType, replyNode.Value.Protocol, replyNode.Value.Data); break; default: break; } replyNode.Value.Clear(); mReplyList.RemoveFirst(); } if (mNetState == ENetState.ES_Disconnect) { Clear(); } if (mSocket != null) { mMutiPacketHelp.Send(); } } }