/// <summary> /// 编码客户端向服务器发送的请求消息,暂不加密, /// </summary> /// <param name="gameMessage"></param> public byte[] EncodeGameMessage(IGameMessage gameMessage) { seqid++; gameMessage.GetMessageHeader().SeqId = seqid; int total = 19; byte[] body = gameMessage.EncodeBody(); if (body != null) { total += body.Length; } GameMessageHeader header = gameMessage.GetMessageHeader(); ByteBuf byteBuf = new ByteBuf(total); byteBuf.WriteShort(total); byteBuf.WriteInt(header.SeqId); byteBuf.WriteShort(header.MessageId); byteBuf.WriteLong(DateUtil.GetCurrentTimeUnix()); byteBuf.WriteShort((short)header.ServerType); byteBuf.WriteByte(0); if (body != null) { byteBuf.WriteBytes(body); } byte[] msg = byteBuf.ToArray(); return(msg); }
public AbstractGameMessage() { messageHeader = ReadGameMessageMeta(); int serverType = (int)this.messageHeader.ServerType; int messageId = this.messageHeader.MessageId; this.messageUniqueId = CreateGameMessageUniqueId(serverType, messageId); }
public static GameMessageHeader ReadGameMessageMeta(Type objType) { GameMessageHeader messageHeader = new GameMessageHeader(); GameMessageMeta gameMessageMeta = (GameMessageMeta)objType.GetCustomAttributes(typeof(GameMessageMeta), false).FirstOrDefault(); messageHeader.MessageId = gameMessageMeta.MessageId; messageHeader.ServerType = gameMessageMeta.ServerType; return(messageHeader); }
public void RegisterGameMessageType(List <Type> gameMessageTypes) { if (gameMessageTypes == null) { return; } foreach (Type type in gameMessageTypes) { GameMessageHeader messageHeader = AbstractGameMessage.ReadGameMessageMeta(type); int key = AbstractGameMessage.CreateGameMessageUniqueId((int)messageHeader.ServerType, messageHeader.MessageId); gameMessageTypeMap.Add(key, type); } }