/// <summary> /// Handles MessageReceived event of _communicationChannel object. /// /// </summary> /// <param name="sender">Source of event</param><param name="e">Event arguments</param> private void CommunicationChannel_MessageReceived(object sender, MessageEventArgs e) { IScsMessage message = e.Message; if (message is ScsPingMessage) { ICommunicationChannel communicationChannel = this._communicationChannel; ScsPingMessage scsPingMessage1 = new ScsPingMessage(); scsPingMessage1.RepliedMessageId = message.MessageId; ScsPingMessage scsPingMessage2 = scsPingMessage1; communicationChannel.SendMessage((IScsMessage)scsPingMessage2); } else { this.OnMessageReceived(message); } }
/// <summary> /// Handles MessageReceived event of _communicationChannel object. /// </summary> /// <param name="sender">Source of event</param> /// <param name="e">Event arguments</param> private void CommunicationChannel_MessageReceived(object sender, MessageEventArgs e) { var message = e.Message; if (message is ScsPingMessage) { //LogHelper.WriteNetMsgLog("收到客户端:ID:" + this.ClientId.ToString()+ " Ping消息:" + message.ToString()); ScsPingMessage pingMsg = new ScsPingMessage { RepliedMessageId = message.MessageId }; _communicationChannel.SendMessage(pingMsg); //LogHelper.WriteNetMsgLog("发送客户端:ID:" + this.ClientId.ToString() + " Ping消息:" + pingMsg.ToString()); return; } OnMessageReceived(message); }
/// <summary> /// Handles Elapsed event of _pingTimer to send PingMessage messages to server. /// </summary> /// <param name="sender">Source of event</param> /// <param name="e">Event arguments</param> private void PingTimer_Elapsed(object sender, EventArgs e) { if (CommunicationState != CommunicationStates.Connected) { return; } try { var lastMinute = DateTime.Now.AddSeconds(-5); if (_communicationChannel.LastReceivedMessageTime > lastMinute || _communicationChannel.LastSentMessageTime > lastMinute) { return; } ScsPingMessage pingMsg = new ScsPingMessage(); _communicationChannel.SendMessage(pingMsg); //LogHelper.WriteNetMsgLog("发送服务器Ping消息:" + pingMsg.ToString()); } catch { } }
protected override IScsMessage DeserializeMessage(byte[] bytes) { IScsMessage retMsg = null; string msgId = null; byte [] bytMsgId = new byte [ConstData.tokenStringLength]; Buffer.BlockCopy(bytes, 1, bytMsgId, 0, ConstData.tokenStringLength); msgId = Encoding.ASCII.GetString(bytMsgId); if (msgId.Equals(ConstData.emptyGuidString)) { msgId = null; } string replyMsgId = null; byte [] bytReplyMsgId = new byte [ConstData.tokenStringLength]; Buffer.BlockCopy(bytes, 1 + ConstData.tokenStringLength, bytReplyMsgId, 0, ConstData.tokenStringLength); replyMsgId = Encoding.ASCII.GetString(bytReplyMsgId); if (replyMsgId.Equals(ConstData.emptyGuidString)) { replyMsgId = null; } byte msgTypeCodec = bytes[0]; switch ((int)msgTypeCodec) { case ((int)MsgType.ScsRaw_Msg): { if (0 < bytes.Length - (1 + ConstData.tokenStringLength * 2)) { byte[] content = new byte[bytes.Length - (1 + ConstData.tokenStringLength * 2)]; Buffer.BlockCopy(bytes, 1 + ConstData.tokenStringLength * 2, content, 0, content.Length); retMsg = new ScsRawDataMessage(content); } else { retMsg = new ScsRawDataMessage(); } ((ScsRawDataMessage)retMsg).MessageId = msgId; ((ScsRawDataMessage)retMsg).RepliedMessageId = replyMsgId; break; } case ((int)MsgType.ScsText_Msg): { if (0 < bytes.Length - (1 + ConstData.tokenStringLength * 2)) { byte[] bytContent = new byte[bytes.Length - (1 + ConstData.tokenStringLength * 2)]; Buffer.BlockCopy(bytes, 1 + ConstData.tokenStringLength * 2, bytContent, 0, bytContent.Length); string content = Encoding.UTF8.GetString(bytContent); retMsg = new ScsTextMessage(content); } else { retMsg = new ScsTextMessage(); } ((ScsTextMessage)retMsg).MessageId = msgId; ((ScsTextMessage)retMsg).RepliedMessageId = replyMsgId; break; } case ((int)MsgType.ScsPing_Msg): { // N / A retMsg = new ScsPingMessage(); ((ScsPingMessage)retMsg).MessageId = msgId; ((ScsPingMessage)retMsg).RepliedMessageId = replyMsgId; break; } default: { throw new NotImplementedException(); } } return(retMsg); }