コード例 #1
0
        /// <summary>
        /// 接受网络数据,将接受到的放入消息队列
        /// </summary>
        private void _onReceiveSocket()
        {
            while (true)
            {
                if (!clientSocket.Connected)
                {
                    _isConnected = false;
                    break;
                }
                try
                {
                    int receiveLength = clientSocket.Receive(_tmpReceiveBuff);
                    if (receiveLength > 0)
                    {
                        //将收到的数据添加到缓存器中
                        _databuffer.AddBuffer(_tmpReceiveBuff, receiveLength);
                        SGNFDebug.HEXLog("rcv", _tmpReceiveBuff, receiveLength);
                        //取出一条完整数据
                        while (_databuffer.GetData(out _socketData))
                        {
                            ISSocketModel DeData = SocketUtil.ISDeSerial(_socketData);

                            //如果数据属于内部协议
                            if (Enum.IsDefined(typeof(SocketUtil.InternalCommand), DeData.Command))
                            {
                                if (DeData.Command == (int)SocketUtil.InternalCommand.NULL)
                                {
                                    SGNFDebug.Log("Got NULL from server");
                                }
                                if (DeData.Command == (int)SocketUtil.InternalCommand.PING)
                                {
                                    //Client.RcvPingStr = DeData.Message[0];
                                }
                                if (DeData.Command == (int)SocketUtil.InternalCommand.SSINFO)
                                {
                                    int num = Convert.ToInt32(DeData.Message[0]);
                                    if (num > 0)
                                    {
                                        NetManager.Instance.allSSInfo.Clear();
                                        for (int i = 0; i < num; i++)
                                        {
                                            NetManager.Instance.allSSInfo.Add(new SocketUtil.SSInfo()
                                            {
                                                Tag  = DeData.Message[i * 3 + 1],
                                                IP   = DeData.Message[i * 3 + 2],
                                                Port = Convert.ToInt32(DeData.Message[i * 3 + 3]),
                                            });
                                        }
                                    }
                                    SGNFDebug.ListLog("Got " + num + " row of SS from server", NetManager.Instance.allSSInfo);
                                }
                            }
                            else
                            {
                                //锁死消息中心消息队列,并添加数据
                                lock (MessageCenter.Instance.ISMessageDataQueue)
                                {
                                    MessageCenter.Instance.ISMessageDataQueue.Enqueue(DeData);
                                }
                            }
                        }
                    }
                }
                catch (Exception e)
                {
                    clientSocket.Disconnect(true);
                    clientSocket.Shutdown(SocketShutdown.Both);
                    clientSocket.Close();
                    SGNFDebug.ExceptionCaught(e);
                    break;
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// 接受网络数据,将接受到的放入消息队列
        /// </summary>
        private void _onReceiveSocket()
        {
            while (true)
            {
                if (!clientSocket.Connected)
                {
                    _isConnected = false;
                    break;
                }
                try
                {
                    int receiveLength = clientSocket.Receive(_tmpReceiveBuff);
                    if (receiveLength > 0)
                    {
                        //将收到的数据添加到缓存器中
                        _databuffer.AddBuffer(_tmpReceiveBuff, receiveLength);
                        SGNFDebug.HEXLog("rcv", _tmpReceiveBuff, receiveLength);
                        //取出一条完整数据
                        while (_databuffer.GetData(out _socketData))
                        {
                            SSSocketModel DeData = SocketUtil.SSDeSerial(_socketData);

                            //如果数据属于内部协议
                            if (Enum.IsDefined(typeof(SocketUtil.InternalCommand), DeData.Command))
                            {
                                if (DeData.Command == (int)SocketUtil.InternalCommand.NULL)
                                {
                                    SGNFDebug.Log("Got NULL from server");
                                }
                                if (DeData.Command == (int)SocketUtil.InternalCommand.PING)
                                {
                                    //Client.RcvPingStr = DeData.Message[0];
                                }
                                if (DeData.Command == (int)SocketUtil.InternalCommand.TICK)
                                {
                                    if (DeData.Message.Count >= 1)
                                    {
                                        NetManager.Instance.tick = DeData.Message[0];
                                        SGNFDebug.Log("Got Tick!Which is " + DeData.Message[0]);
                                    }
                                    else
                                    {
                                        SGNFDebug.ExceptionCaught(new Exception("Recieved nothing from TICK package!"));;
                                    }
                                }
                            }
                            else
                            {
                                lock (SSRecorder.Instance.RecieveDataBuffer)
                                {
                                    SSRecorder.Instance.RecieveDataBuffer.Add(DeData.CurrentTick, DeData);
                                }
                                //锁死消息中心消息队列,并添加数据
                                lock (MessageCenter.Instance.SSMessageDataQueue)
                                {
                                    MessageCenter.Instance.SSMessageDataQueue.Enqueue(DeData);
                                }
                            }
                        }
                    }
                }
                catch (Exception e)
                {
                    clientSocket.Disconnect(true);
                    clientSocket.Shutdown(SocketShutdown.Both);
                    clientSocket.Close();
                    SGNFDebug.ExceptionCaught(e);
                    break;
                }
            }
        }