Example #1
0
        protected bool ProcessGetForQueue(MQProtocolSession session, MQDataInfo mQDataInfo)
        {
            try
            {
                string data = mQDataInfo.Body.DecodeToString();

                mqServer.Logger.Info($"客户端:【{session.RemoteEndPoint}】消息类型:【{mQDataInfo.Type}】{CommanCode.GetForQueue} :【{mQDataInfo}】消息内容:【{data}】");


                string msgs = ""; //Newtonsoft.Json.JsonConvert.SerializeObject(mqServer.TopicMessageQueueDict);
                var    msg  = MQTools.GetSendMessage((ushort)CommanCode.GetForQueue, msgs, 0);

                var r = session.TrySend(msg);

                mqServer.Logger.Info($"客户端:【{session.RemoteEndPoint}】请求队列 【{msgs}】【确认】消息结果:【{r}】");

                return(true);
            }
            catch (Exception e)
            {
                mqServer.Logger.Error(mQDataInfo, new Exception("处理队列确认消息失败", e));

                session.Close(CSuperSocket.SocketBase.CloseReason.InternalError);

                return(false);
            }
        }
Example #2
0
        protected override int GetBodyLengthFromHeader(IBufferStream bufferStream, int length)
        {
            if (length < 14)
            {
                return(0);
            }

            var header = new byte[14];
            int count  = bufferStream.Read(header, 0, 14);

            byte high = header[13];
            //获取低位
            byte low = header[12];

            return(MQTools.GetBodyLengthFromHeader(high, low));
        }
Example #3
0
        public void MqServer_NewRequestReceived(MQProtocolSession session, MQDataInfo requestInfo)
        {
            try
            {
                if (requestInfo.Type == (byte)MessageType.ResAck)
                {
                    try
                    {
                        mqServer.Logger.Info($"客户端:【{session.RemoteEndPoint}】 接收{MessageType.ResAck} :【{requestInfo.ToString()}】");

                        mqServer.Logger.Info($"客户端:【{session.RemoteEndPoint}】确认回复消息剩余队列:【{session.AckMessageQueueCount}】");
                        //验证出队列
                        session.DequeueAckMessageQueue(requestInfo);
                    }
                    catch (Exception e)
                    {
                        mqServer.Logger.Error(requestInfo, new Exception("处理确认消息失败", e));
                    }
                }
                else  //确认应答
                {
                    if (requestInfo.Type == (byte)MessageType.Ack)
                    {
                        try
                        {
                            mqServer.Logger.Info($"客户端:【{session.RemoteEndPoint}】接收 {MessageType.Ack} :【{requestInfo.ToString()}】");
                            session.Send(MQTools.GetResAckMessage(requestInfo));
                            mqServer.Logger.Info("回应确认消息完成");
                        }
                        catch (Exception e)
                        {
                            mqServer.Logger.Error(requestInfo, new Exception($"发送至 【{session.RemoteEndPoint}】确认消息失败", e));
                        }
                    }

                    //解析消息类型
                    switch (requestInfo.Code)
                    {
                    case 1:    //Login
                        ProcessLogin(session, requestInfo);
                        break;

                    case 10:    //SendMessage
                        if (requestInfo.Type == (byte)MessageType.Ack)
                        {
                            if (session.AckMessageFilter(requestInfo))    //过滤重复消息
                            {
                                ProcessAckMessage(session, requestInfo);
                            }
                        }
                        else
                        {
                            ProcessMessage(session, requestInfo);
                        }
                        break;

                    //case 11://AckMessage
                    //消息队列处理
                    //break;
                    case 12:    //PullMessage
                        ProcessPullMessage(session, requestInfo);
                        break;

                    case 21:    //Subpackage
                        break;

                    case 31:    //BroadcastMessage
                        break;

                    case 41:    //TransferMessage
                        break;

                    case 100:    //Heartbeat
                        ProcessHeartbeat(session, requestInfo);
                        break;

                    case 200:    //GetForTopic
                        ProcessGetForTopic(session, requestInfo);
                        break;

                    case 201:    //CreateTopic
                        ProcessCreateTopic(session, requestInfo);
                        break;

                    case 202:    //DeleteTopic
                        break;

                    case 210:    // GetForQueue
                        ProcessGetForQueue(session, requestInfo);
                        break;

                    case 211:    //AddQueue
                        break;

                    case 212:    //DeleteQueue
                        break;

                    case 220:    //GetForRoom
                        break;

                    case 221:    //AddRoom
                        break;

                    case 222:    //DeleteRoom
                        break;

                    default:
                        break;
                    }
                }

                Console.WriteLine("Receive From: " + session.RemoteEndPoint.ToString());
                Console.WriteLine("MessageKey:" + requestInfo.Key);
                Console.WriteLine("Data:" + requestInfo.ToString());
                Console.WriteLine("-------------------------------------------------------------");
            }
            catch (Exception e)
            {
                mqServer.Logger.Error(requestInfo, new Exception("消息处理流程失败", e));
            }
        }
Example #4
0
        public override MQDataInfo ResolvePackage(IBufferStream bufferStream)
        {
            var buffer = bufferStream.Read();

            return(MQTools.ResolveMQDataInfo(buffer));
        }