Пример #1
0
 //Data has been received
 override protected void OnDataReceived(byte[] data, int len)
 {
     if (handshakeStatus == GMTCPHandshakeStage.Complete)
     {
         int bytesReceived = 0;
         //Receive packets until all the data on the wire has been processed
         while (bytesReceived < len)
         {
             UInt32 packetIdentifier = BitConverter.ToUInt32(data, bytesReceived);
             if (packetIdentifier != 0xdeadc0de)
             {
                 Logger.Trace("Packet dropped. Invalid identifier/magic number.");
                 break;
             }
             else
             {
                 //Length of the packet data
                 UInt32       payloadLength = BitConverter.ToUInt32(data, bytesReceived + 8);
                 PacketBuffer p             = new PacketBuffer(data, bytesReceived + 12, (int)payloadLength);
                 OnPacketReceived(p); //Process the packet
                 bytesReceived += (int)payloadLength + 12;
             }
         }
     }
     else if (handshakeStatus == GMTCPHandshakeStage.AwaitingConnectAck)
     {
         uint magicNumber = BitConverter.ToUInt32(data, 0);
         if (magicNumber == 0xcafebabe)
         {   //If the magic number matches
             Logger.Trace("Connect Acknowledged Successfully, Finalizing Handshake...");
             PacketBuffer handshakePacket = new PacketBuffer();
             handshakePacket.WriteUInt32(0xdeafbead);
             handshakePacket.WriteUInt32(0xf00dbeeb);
             handshakePacket.WriteUInt32(0x0000000c);
             base.SendPacket(handshakePacket);
             Logger.Trace("Handshake Finalized.");
             handshakeStatus = GMTCPHandshakeStage.Complete;
         }
     }
 }
Пример #2
0
 //Process an incoming packet
 virtual protected void OnPacketReceived(PacketBuffer p)
 {
     messageDispatcher.HandlePacket(p);
 }
Пример #3
0
 //Send packet
 virtual public void SendPacket(PacketBuffer data)
 {
     socket.Send(data.GetData(), 0, data.GetLength(), 0);
 }