public void SendPacket(BasePacket packetToSend)
        {
            dataToSend.Write(
                BitConverter.GetBytes(1 + packetToSend.SizeOfPacket),
                0, 4);
            dataToSend.Write(BitConverter.GetBytes('a'), 0, 1);
            packetToSend.Serialize(dataToSend);

            mFrameSentPackets.Add(packetToSend.ToString());
        }
        string DecodeData(byte[] data, int start, int recv, ushort senderComputerID)
        {
            char         code = Encoding.ASCII.GetString(data, start, 1)[0];
            MemoryStream ms   = new MemoryStream();

            // Sprite s;

            switch (code)
            {
                /* Remember, start marks the position where the code character is, so
                 * always use start+1 when reading the actual data.
                 */
                #region 'P':  Received a ping sent the other guy
            case 'P':     // received a ping from the other guy

                // be sure to use start as the base number for reading from the data
                mTickOfLastReceievedPing = BitConverter.ToInt64(data, start + 1);
                // send the ping back as a reply ping
                // the size of the packet always goes first
                dataToSend.Write(BitConverter.GetBytes(9), 0, 4);
                // then the identifier
                dataToSend.WriteByte((byte)('R'));
                // then the contents
                dataToSend.Write(BitConverter.GetBytes(mTickOfLastReceievedPing), 0, 8);

                return("Received and replied to ping.");

                //break;
                #endregion

                #region 'R': Received response on sent ping, so mark how long it all took.
            case 'R':
                SecondsLastPingTook = TimeManager.CurrentTime - BitConverter.ToDouble(data, start + 1);


                break;
                #endregion

                #region '\t': Regular text
            case '\t':     // text is sent
                this.mReceivedText.Add(Encoding.ASCII.GetString(data, start + 1, recv - 1));
                return("Decoded text");

                //break;
                #endregion

                #region 'N':  Remote computer renamed

            case 'N':
                mNamesConnectedTo[connectedTo.IndexOf(senderComputerID)] =
                    Encoding.ASCII.GetString(data, start + 1, recv - 1);

                return("Renamed Computer " + senderComputerID + " to " +
                       mNamesConnectedTo[connectedTo.IndexOf(senderComputerID)]);

                //break;

                #endregion

                #region 'a': Packet
            case 'a':     // packet

                MemoryStream tempStream = new MemoryStream();

                tempStream.Write(data, start + 1, recv);
                tempStream.Position = 0;

                mTotalPackets++;
                mReceivedPackets.Add(
                    BasePacket.Deserialize(tempStream));

                return("Decoded and added packet to mReceivedPackets");

                //break;
                #endregion

                #region 'b': Plain ol' bytes
            case 'b':     // bytes
                ms = new MemoryStream();

                ms.Write(data, start + 1, recv - 1);
                this.mReceivedBytes.Add(ms.ToArray());
                return("Decoded bytes");

                //break;
                #endregion


            case 'c':
                int oldID = BitConverter.ToInt32(data, start + 1);
                int newID = BitConverter.ToInt32(data, start + 5);

                NetSprite netSprite = this.GetPendingSprite(oldID, senderComputerID);

                this.pendingAddRemoteSprites.Remove(netSprite);

                netSprite.spriteID   = newID;
                netSprite.computerID = senderComputerID;


                this.remoteControlledSprites.Add(netSprite);

                return("Decoded confirmation of Sprite ID change - moved pending to remote");

            //break;
            case 'I':
                mComputerID = (ushort)BitConverter.ToChar(data, start + 1);

                return("Decoded assignment of computer ID assignment from the server");

            //break;
            default:
                return("Data not understood.\n" +
                       "Prefix: " + code + "\n" +
                       "Start of data at: " + start + "\n" +
                       "Number of bytes received: " + recv + "\n");

                //break;
            }

            return("Data not understood.\n" +
                   "Prefix: " + code + "\n" +
                   "Start of data at: " + start + "\n" +
                   "Number of bytes received: " + recv + "\n");
        }
示例#3
0
        public void SendPacket(BasePacket packetToSend)
        {
            dataToSend.Write(
                BitConverter.GetBytes(1 + packetToSend.SizeOfPacket),
                0, 4);
            dataToSend.Write(BitConverter.GetBytes('a'), 0, 1);
            packetToSend.Serialize(dataToSend);

            mFrameSentPackets.Add(packetToSend.ToString());

        }
 public void RemovePacket(BasePacket packet)
 {
     mReceivedPackets.Remove(packet);
 }
示例#5
0
 public void RemovePacket(BasePacket packet)
 {
     mReceivedPackets.Remove(packet);
 }