示例#1
0
        /// <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);
            }
        }
示例#2
0
        /// <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);
        }
示例#3
0
        /// <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);
        }