protected virtual void OnTcpServer_MessageReceived(object sender, TcpRawMessageReceivedEventArgs args) { GeneralMessage clientMessage = GeneralMessage.Deserialize(args.Message.MessageRawData, false); //if the server message is model if (clientMessage.Header == (int)MessageHeader.Model) { //get model from general message object model = _tcpServer.ConvertToModel(clientMessage); if (model is QueryServerTimeRequest) { QueryServerTimeRequest queryTimeReq = model as QueryServerTimeRequest; QueryServerTimeResponse response = new QueryServerTimeResponse { RequestID = queryTimeReq.ID, ServerTime = DateTime.Now }; ServerRecvText += $"Received Request:\r\nfrom {queryTimeReq.Name}\r\n"; _tcpServer.SendModelMessage(args.Message.ClientID, response); } else { //do something for other model } } else { } }
private void _tcpServer_MessageReceived(object sender, TcpRawMessageReceivedEventArgs args) { if (!_tcpServer.IsRunning) { return; } //get GeneralMessage from raw data without detached. The message will use shared memory with the receiving buffer. //So this function can't be returned until the buffer used up. GeneralMessage clientMessage = GeneralMessage.Deserialize(args.Message.MessageRawData, false); //if the client message is model if (clientMessage.Header == _tcpServer.HeaderIndicator) { //get model from general message object model = _tcpServer.ConvertToModel(clientMessage); if (model is IUploadFileMessage) { _uploadFileHandler.ProcessFileMessage(args.Message.ClientID, model as IUploadFileMessage, clientMessage.Payload); } else { //detach the message from the receiving buffer, so the message can be processed at any time. clientMessage.Detach(); } } else { } }