예제 #1
0
        public bool CloseMatch(bool hint = true)
        {
            if (null != mMatchClient)
            {
                if (!CanWorking)
                {
                    throw new Exception("CloseMatch:this tcp networking cannot working, because mNetworkingModel is null");
                }
                if (hint)
                {
                    mMatchClient.Close();
                }
                else
                {
                    mMatchClient.CloseNotCallback();
                }
                while (null != mMatchClient && mMatchClient.Connected)
#if NETFX_CORE && UNITY_METRO && !UNITY_EDITOR
                { continue; }
#else
                { Thread.Sleep(1); }
#endif
                mMatchClient = null;
                if (hint)
                {
                    TcpIPMessageQueue.EnqueueRecv(LocalAsyncToMainThread.Builder(LocalAsyncToMainThreadType.MatchDisconnection));
                }
                AsyncUnLockNetMsgScreenLocked();
            }
            return(true);
        }
예제 #2
0
 public void AsyncUnLockNetMsgScreenLocked()
 {
     lock (mWaitUnlockMsgs)
     {
         mWaitUnlockMsgs.Clear();
     }
     TcpIPMessageQueue.EnqueueRecv(LocalAsyncToMainThread.Builder(LocalAsyncToMainThreadType.UnlockScreen));
 }
예제 #3
0
 public void CloseNotCallback()
 {
     Connection    -= new ConnectionOk(OnTcpIPClientConnected);
     DataOn        -= new DataOn(OnTcpIPClientReceived);
     Disconnection -= new ExceptionDisconnection(OnTcpIPClientDisconnected);
     TcpIPMessageQueue.EnqueueRecv(S2C_Hint.Builder(S2CHintType.Intro, "[NetworkClose]:Nothing"));
     base.Close();
     mConnected = false;
 }
예제 #4
0
        public void CheckRecvedMessage(ITcpNetLogicModel l)
        {
            if (!CanWorking)
            {
                throw new Exception("CheckRecvedMessage:this tcp networking cannot working, because mNetworkingModel is null");
            }
            IS2C_Msg msg = TcpIPMessageQueue.PeekRecv();

            while (null != msg)
            {
                bool handled = true;
                bool breaked = false;
                if (msg.MessageID == (int)RecvMsgType.S2C_ChangeScene)
                {
                    UnLockNetMsgScreenLocked();
                }
                else
                {
                    if (mWaitUnlockMsgs.Contains(msg.MessageID))
                    {
                        mWaitUnlockMsgs.Remove(msg.MessageID);
                    }
                    if (mWaitUnlockMsgs.Count == 0)
                    {
                        UnLockNetMsgScreenLocked();
                    }
                }
                if (!l.HandleMessage(msg, ref handled, ref breaked))
                {
                    Debug.LogError("处理消息[" + (RecvMsgType)msg.MessageID + "]失败!!!");
                    TcpIPMessageQueue.DequeueRecv();
                }
                if (handled)
                {
                    TcpIPMessageQueue.DequeueRecv();
                }
                else
                {
                    Debug.LogError("标记为未处理的消息[" + (RecvMsgType)msg.MessageID + "]");
                    if (msg.CanDroped)
                    {
                        TcpIPMessageQueue.DequeueRecv();
                    }
                    break;
                }
                if (breaked)
                {
                    Debug.LogWarning("跳出本次消息处理[" + (RecvMsgType)msg.MessageID + "]");
                    break;
                }
                msg = TcpIPMessageQueue.PeekRecv();
            }
        }
예제 #5
0
 public override void Close()
 {
     //if (null != mSendMessageThread)
     //{
     //    mSendMessageThread.Abort();
     //    mSendMessageThread = null;
     //    while (TcpIPMessageQueue.DequeueSend() != null) ;
     //}
     TcpIPMessageQueue.EnqueueRecv(S2C_Hint.Builder(S2CHintType.Intro, "[NetworkClose]:Nothing"));
     base.Close();
     mConnected     = false;
     Connection    -= new ConnectionOk(OnTcpIPClientConnected);
     DataOn        -= new DataOn(OnTcpIPClientReceived);
     Disconnection -= new ExceptionDisconnection(OnTcpIPClientDisconnected);
 }
예제 #6
0
 void OnTcpIPClientConnected(string message, bool IsConn)
 {
     mConnected = IsConn;
     if (IsConn)
     {
         TcpIPMessageQueue.EnqueueRecv(S2C_Hint.Builder(S2CHintType.Intro, "[OnTcpIPClientConnected1]" + message));
         //mSendMessageThread = new Thread(new ParameterizedThreadStart(SendMessageThreading));
         //mSendMessageThread.Start(this);
     }
     else
     {
         TcpIPMessageQueue.EnqueueRecv(S2C_Hint.Builder(S2CHintType.Intro, "[ff0000][OnTcpIPClientConnected2]" + message));
         TcpIPMessageQueue.EnqueueRecv(S2C_Hint.Builder(S2CHintType.Error, message));
     }
 }
 public static void SendHeart()
 {
     //LocalPlayer lp = LocalPlayer.Inst;
     //if (null != lp && lp.InSceneState)
     {
         if (mHeartTick >= 4)
         {
             TcpIPMessageQueue.EnqueueRecv(LocalAsyncToMainThread.Builder(LocalAsyncToMainThreadType.Disconnection));
             mHeartTick = 0;
             return;
         }
     }
     TcpIPNetwork.Inst.SendMessage(C2S_HeartTicker.Create());
     mLastSendHeartTime = Time.realtimeSinceStartup;
     //if (null != lp && lp.InSceneState)
     mHeartTick++;
     Debug.Log("发送心跳包:" + mLastSendHeartTime.ToString() + ", cnt=" + mHeartTick.ToString());
 }
예제 #8
0
 void OnTcpIPClientDisconnected(string message)
 {
     //if (null != mSendMessageThread)
     //{
     //    mSendMessageThread.Abort();
     //    mSendMessageThread = null;
     //    while (TcpIPMessageQueue.DequeueSend() != null) ;
     //}
     mConnected = false;
     //if (LocalPlayer.Inst.InLoginState)
     //    TcpIPMessageQueue.EnqueueRecv(S2C_Hint.Builder(S2CPromptMode.Intro信息, "[OnTcpIPClientDisconnected]" + message));
     //else
     TcpIPMessageQueue.EnqueueRecv(S2C_Hint.Builder(S2CHintType.Error, message));
     if (null != OnDisConnected)
     {
         OnDisConnected(message);
     }
 }
예제 #9
0
 public bool ConnectMatchServer(string address, int port)
 {
     if (!CanWorking)
     {
         throw new Exception("ConnectMatchServer:this tcp networking cannot working, because mNetworkingModel is null");
     }
     if (null != mMatchClient)
     {
         Debug.LogWarning(string.Format("关闭当前连接后才能与服务器[{0}:{1}]建立连接!", address, port));
         CloseMatch(false);
     }
     mMatchClient = new TcpIPClient();
     mMatchClient.OnDisConnected += new TcpIPClient.DisConnected((string message) =>
     {
         mMatchClient.Close();
         mMatchClient = null;
         TcpIPMessageQueue.EnqueueRecv(LocalAsyncToMainThread.Builder(LocalAsyncToMainThreadType.MatchDisconnection));
     });
     mMatchClient.ConnectionTo(address, port);
     return(true);
 }