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); } }
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)); }
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)); } }
public override MQDataInfo ResolvePackage(IBufferStream bufferStream) { var buffer = bufferStream.Read(); return(MQTools.ResolveMQDataInfo(buffer)); }