Exemplo n.º 1
0
 public NetMessage(byte[] receiveBytes, IPEndPoint endpoint)
 {
     this.Serial = -1;
     this.Buffer = new byte[0];
     this.IsValid = true;
     this.MessageType = NetMessageTypes.Unknown;
     this.EndPoint = endpoint;
     if ((receiveBytes != null) && (receiveBytes.Length > 0))
     {
         this.Buffer = receiveBytes;
         if (((receiveBytes.Length > 4) && (receiveBytes[0] == 8)) && ((receiveBytes[1] == 0) && (receiveBytes[2] == 0)))
         {
             if (receiveBytes[3] == 0)
             {
                 this.MessageType = NetMessageTypes.Nat;
             }
             else if ((receiveBytes.Length > 11) && (receiveBytes[3] == 1))
             {
                 this.MessageType = NetMessageTypes.GPGText;
                 this.ReadMessage(receiveBytes);
             }
             else if ((receiveBytes.Length > 11) && (receiveBytes[3] == 2))
             {
                 this.MessageType = NetMessageTypes.GPGBinary;
                 this.ReadMessage(receiveBytes);
             }
             else if ((receiveBytes.Length > 11) && (receiveBytes[3] == 3))
             {
                 this.MessageType = NetMessageTypes.GPGBinary;
                 this.ReadMessage(receiveBytes);
             }
         }
     }
 }
Exemplo n.º 2
0
 public NetMessage()
 {
     this.Serial = -1;
     this.Buffer = new byte[0];
     this.IsValid = true;
     this.MessageType = NetMessageTypes.Unknown;
 }
Exemplo n.º 3
0
        public static List <DMETypePacketFragment> FromPayload(NetMessageTypes msgClass, byte msgType, byte[] payload, int index, int length)
        {
            List <DMETypePacketFragment> fragments = new List <DMETypePacketFragment>();

            int i = 0;

            while (i < length)
            {
                ushort subPacketSize = (ushort)(length - i);
                if (subPacketSize > Constants.DME_FRAGMENT_MAX_PAYLOAD_SIZE)
                {
                    subPacketSize = Constants.DME_FRAGMENT_MAX_PAYLOAD_SIZE;
                }

                var frag = new DMETypePacketFragment()
                {
                    FragmentMessageClass = (byte)msgClass,
                    FragmentMessageType  = msgType,
                    SubPacketSize        = subPacketSize,
                    SubPacketCount       = 0,
                    SubPacketIndex       = (ushort)fragments.Count,
                    MultiPacketindex     = 0,
                    PacketBufferSize     = length,
                    PacketBufferOffset   = i,
                    Payload = new byte[subPacketSize]
                };

                // Copy payload segment into fragment payload
                Array.Copy(payload, i + index, frag.Payload, 0, subPacketSize);

                //
                fragments.Add(frag);

                // Increment i
                i += subPacketSize;
            }

            // Recorrect fragment counts
            foreach (var frag in fragments)
            {
                frag.SubPacketCount = (ushort)fragments.Count;
            }

            return(fragments);
        }
Exemplo n.º 4
0
 public RawMediusMessage(NetMessageTypes msgClass, byte messageType)
 {
     _class       = msgClass;
     _messageType = messageType;
 }
Exemplo n.º 5
0
 public MediusMessageAttribute(NetMessageTypes msgClass, MediusLobbyExtMessageIds msgType)
 {
     MessageClass = msgClass;
     MessageType  = (byte)msgType;
 }
Exemplo n.º 6
0
        public static BaseMediusMessage Instantiate(BinaryReader reader)
        {
            BaseMediusMessage msg;
            Type classType = null;

            // Init
            Initialize();

            NetMessageTypes msgClass = reader.Read <NetMessageTypes>();
            var             msgType  = reader.ReadByte();

            switch (msgClass)
            {
            case NetMessageTypes.MessageClassDME:
            {
                if (!_dmeMessageClassById.TryGetValue((MediusDmeMessageIds)msgType, out classType))
                {
                    classType = null;
                }
                break;
            }

            case NetMessageTypes.MessageClassLobbyReport:
            {
                if (!_mgclMessageClassById.TryGetValue((MediusMGCLMessageIds)msgType, out classType))
                {
                    classType = null;
                }
                break;
            }

            case NetMessageTypes.MessageClassLobby:
            {
                if (!_lobbyMessageClassById.TryGetValue((MediusLobbyMessageIds)msgType, out classType))
                {
                    classType = null;
                }
                break;
            }

            case NetMessageTypes.MessageClassLobbyExt:
            {
                if (!_lobbyExtMessageClassById.TryGetValue((MediusLobbyExtMessageIds)msgType, out classType))
                {
                    classType = null;
                }
                break;
            }
            }

            // Instantiate
            if (classType == null)
            {
                msg = new RawMediusMessage(msgClass, msgType);
            }
            else
            {
                msg = (BaseMediusMessage)Activator.CreateInstance(classType);
            }

            // Deserialize
            msg.Deserialize(reader);
            return(msg);
        }
Exemplo n.º 7
0
 public static List <DMETypePacketFragment> FromPayload(NetMessageTypes msgClass, byte msgType, byte[] payload)
 {
     return(FromPayload(msgClass, msgType, payload, 0, payload.Length));
 }