Esempio n. 1
0
        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();
        }
Esempio n. 2
0
 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);
 }
Esempio n. 3
0
        protected NetClient()
        {
            mLock = new object();

            mReplyList      = new LinkedList <Reply>();
            mNetState       = ENetState.ES_UnInit;
            mMutiPacketHelp = new MutiPacketHelp(this);
        }
Esempio n. 4
0
 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");
     }
 }
Esempio n. 5
0
        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, "");
        }
Esempio n. 6
0
        protected virtual void OnConnect()
        {
            lock (mLock)
            {
                mNetState = ENetState.ES_Connected;

                Reply reply = new Reply();
                reply.Type = EReplyType.RT_Connected;
                mReplyList.AddLast(reply);
            }
        }
Esempio n. 7
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);
            }
        }
Esempio n. 8
0
 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);
     }
 }
Esempio n. 9
0
        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);
            }
        }
Esempio n. 10
0
        /*
         * 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);
        }
Esempio n. 11
0
    /// <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);
    }
Esempio n. 12
0
        public void Stop()
        {
            lock (mLock)
            {
                Clear();

                if (mSocket != null)
                {
                    if (mSocket.Connected)
                    {
                        mSocket.Shutdown(SocketShutdown.Both);
                        mSocket.Close();
                    }

                    mSocket = null;
                }
                mNetState = ENetState.ES_UnInit;
            }
        }
Esempio n. 13
0
        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;
            }
        }
Esempio n. 14
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;
            }
        }
Esempio n. 15
0
        /// <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);
            }
        }
Esempio n. 16
0
		/*
		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);
		}
Esempio n. 17
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)
                        {
                            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
            }
        }
Esempio n. 18
0
		public void Stop()
		{
			lock(mLock)
			{
				Clear();
				
				if (mSocket != null)
				{
					if (mSocket.Connected)
					{
						mSocket.Shutdown(SocketShutdown.Both);
						mSocket.Close();
					}
					
					mSocket = null;
				}
				mNetState = ENetState.ES_UnInit;
			}
		}
Esempio n. 19
0
		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;
			}
		}
Esempio n. 20
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);
			}
		}
Esempio n. 21
0
		protected virtual void OnConnect()
		{
			lock(mLock)
			{
				mNetState = ENetState.ES_Connected;
				
				Reply reply = new Reply();
				reply.Type = EReplyType.RT_Connected;
				mReplyList.AddLast(reply);
			}
		}
Esempio n. 22
0
 public static bool IsDisconnected(this ENetState state)
 {
     return(state <= ENetState.Disconnected);
 }
Esempio n. 23
0
 public static bool IsConnected(this ENetState state)
 {
     return(state == ENetState.Connected);
 }
Esempio n. 24
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)
						{
							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
			}
		}
Esempio n. 25
0
        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;
            }
        }
Esempio n. 26
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();
                }
            }
        }