コード例 #1
0
        /*
         * Reads data into Packet.
         * This assumes the byte array is structured as follows: [PacketType][Data]
         */
        public static Packet ReadPacketFromByteArray(TcpClient Sender, byte[] Data)
        {
            Packet packet = new Packet();

            //Make sure we have some data.
            if (Data.Length > 0)
            {
                //Stream to read data.
                MemoryStream stream = new MemoryStream(Data);

                //Read packetType.
                byte[] packetTypeBuffer = new byte[sizeof(EPacketType)];
                stream.Read(packetTypeBuffer, 0, sizeof(EPacketType));
                int         packetTypeRaw = BitConverter.ToInt32(packetTypeBuffer, 0);
                EPacketType packetType    = EPacketType.None;

                //Check so it is a valid packet type and if it is let's use it.
                if (Enum.IsDefined(typeof(EPacketType), packetTypeRaw))
                {
                    packetType = (EPacketType)packetTypeRaw;
                }

                //The rest is just data so let's read that.
                byte[] packetData = new byte[stream.Length - stream.Position + 1];
                stream.Read(packetData, 0, packetData.Length);

                //Now create the packet.
                packet = new Packet(Sender, packetType, packetData);
            }

            return(packet);
        }
コード例 #2
0
 internal virtual void RPCServer(EPacketType type, params object[] objs)
 {
     if (null != Netlayer)
     {
         Netlayer.RPCServer(type, objs);
     }
 }
コード例 #3
0
ファイル: TMPacket.cs プロジェクト: x2v0/TM
        /// <summary>
        ///    Initializes a new instance of the <see cref="Packet" /> class.
        /// </summary>
        public Packet(EServerType server_type, EPacketType type, byte value, uint length, byte[] data)
        {
            BufferChunk.SetNetworking();
            Header = new PacketHeader(server_type);

            Header.type          = (byte)type;
            Header.value         = value;
            Header.packet_number = PacketNumber++;
            var len = PacketHeader.Length + 1; // +1 checksum

            Header.datalength = 1;

            if ((data != null) &&
                (length > 0))
            {
                Header.datalength = length + 1;
                len += Header.datalength;
                Data = new BufferChunk((int)len);

                Data.Add(Header);
                Data += data;
                //var str = Encoding.ASCII.GetString(Data.Buffer);
            }
            else
            {
                Data = new BufferChunk((int)len);
                Data.Add(Header);
            }

            AddChecksumm();
        }
コード例 #4
0
    protected void RPC_Sync(uLink.BitStream stream, uLink.NetworkMessageInfo info)
    {
        EPacketType type = EPacketType.PT_MAX;

        try
        {
            type = stream.Read <EPacketType>();
            _actionEvent[type](stream, info);
        }
        catch (Exception e)
        {
            if (_actionEvent.ContainsKey(type))
            {
                if (LogFilter.logError)
                {
                    Debug.LogErrorFormat("Message:[{0}]\r\n{1}\r\n{2}\r\n{3}", GetType(), type, e.Message, e.StackTrace);
                }
            }
            else
            {
                if (LogFilter.logDev)
                {
                    Debug.LogWarningFormat("Message:[{0}]|[{1}] does not implement\r\n{2}", type, GetType(), e.StackTrace);
                }
            }
        }
    }
コード例 #5
0
        public Packet(EPacketType type)
        {
            Id   = m_nextId;
            Type = type;

            m_nextId++;
        }
コード例 #6
0
        public static Packet Deserialize(byte[] packetsBuffer)
        {
            int    index             = 0;
            Packet packetDeserialize = null;

            // Deerialize id
            uint uniqueId;

            Serializer.DeserializeData(packetsBuffer, ref index, out uniqueId);

            // Deerialize id
            EPacketType type = (EPacketType)((int)packetsBuffer[index]);

            index++;

            // Deerialize id
            ushort serializedSize;

            Serializer.DeserializeData(packetsBuffer, ref index, out serializedSize);

            packetDeserialize = PacketFactory.CreatePacket(type);

            packetDeserialize.Id             = uniqueId;
            packetDeserialize.Type           = type;
            packetDeserialize.SerializedSize = serializedSize;

            packetDeserialize.OnDeserialize(packetsBuffer, index);

            return(packetDeserialize);
        }
コード例 #7
0
ファイル: _SubPacketHead.cs プロジェクト: dengnianchen/DLib
 public _SubPacketHead(EPacketType packetType, byte seq = 0, byte sub = 0)
 {
     this.fid = _FIX_ID;
     this.tid = _TYPE_ID[(int)packetType];
     this.seq = seq;
     this.sub = sub;
 }
コード例 #8
0
 public override void Push(JsonDataObject Value_)
 {
     {
         SByte Var = 0;
         Value_.Pop("PacketType", ref Var);
         PacketType = (EPacketType)Var;
     }
     Value_.Pop("RecvPacketSeq", ref RecvPacketSeq);
 }
コード例 #9
0
 public override void Push(CStream Stream_)
 {
     {
         SByte Var = 0;
         Stream_.Pop(ref Var);
         PacketType = (EPacketType)Var;
     }
     Stream_.Pop(ref RecvPacketSeq);
 }
コード例 #10
0
 public void AddListener(EPacketType type, EventHandler <SocketPacketEventArgs> listener)
 {
     if (!m_onMessageReceived.ContainsKey(type))
     {
         m_onMessageReceived.Add(type, listener);
     }
     else
     {
         m_onMessageReceived[type] += listener;
     }
 }
コード例 #11
0
        public bool RemoveListener(EPacketType type, EventHandler <SocketPacketEventArgs> listener)
        {
            if (!m_onMessageReceived.ContainsKey(type))
            {
                return(false);
            }
            else
            {
                m_onMessageReceived[type] -= listener;
            }

            return(true);
        }
コード例 #12
0
        /*
         * Registers a packet handler.
         */
        public void RegisterPacketHandler(EPacketType packetType, HandlePacketDelegate packetDelegate)
        {
            HandlePacketDelegate existingDelegate;

            if (_packetHandlers.TryGetValue(packetType, out existingDelegate))
            {
                existingDelegate += packetDelegate;
            }
            else
            {
                _packetHandlers.Add(packetType, packetDelegate);
            }
        }
コード例 #13
0
        /*
         * Creates a byte array from data.
         * Packet returnes is in the following format: [Length][PacketType][Data]
         */
        public static byte[] CreatePacketByteArray(EPacketType packetType, byte[] Data)
        {
            int          size   = sizeof(EPacketType) + Data.Length;
            MemoryStream stream = new MemoryStream(1 + size);

            //Write length
            stream.Write(BitConverter.GetBytes(size), 0, sizeof(int));
            //Write Packettype
            stream.Write(BitConverter.GetBytes((int)packetType), 0, sizeof(EPacketType));
            //Write Data
            stream.Write(Data, 0, Data.Length);

            return(stream.ToArray());
        }
コード例 #14
0
        public void RegisterPacketHandler(EPacketType packetType, HandlePacketDelegate packetDelegate)
        {
            List <HandlePacketDelegate> existingDelegate;

            if (_packetHandlers.TryGetValue(packetType, out existingDelegate))
            {
                existingDelegate.Add(packetDelegate);
            }
            else
            {
                List <HandlePacketDelegate> newList = new List <HandlePacketDelegate>();
                newList.Add(packetDelegate);
                _packetHandlers.Add(packetType, new List <HandlePacketDelegate>(newList));
            }
        }
コード例 #15
0
ファイル: _SubPacketHead.cs プロジェクト: dengnianchen/DLib
        public static ushort Size(EPacketType type)
        {
            switch (type)
            {
            case EPacketType.UdpSmall:
            case EPacketType.Tcp:
                return(2);

            case EPacketType.UdpLargeFirst:
            case EPacketType.UdpLargeOther:
                return(4);

            default:
                return(ushort.MaxValue);
            }
        }
コード例 #16
0
ファイル: TMPacket.cs プロジェクト: x2v0/TM
        /// <summary>
        ///    Initializes a new instance of the <see cref="Packet" /> class.
        /// </summary>
        public Packet(EServerType server_type, EPacketType type, byte cmd)
        {
            BufferChunk.SetNetworking();
            Header = new PacketHeader(server_type);

            Header.type          = (byte)type;
            Header.value         = cmd;
            Header.packet_number = PacketNumber++;
            Header.datalength    = 1;
            var len = PacketHeader.Length;

            len += Header.datalength;
            Data = new BufferChunk((int)len);
            Data.Add(Header);

            AddChecksumm();
        }
コード例 #17
0
    protected void BindAction(EPacketType type, Action <uLink.BitStream, uLink.NetworkMessageInfo> action)
    {
        if (_actionEvent.ContainsKey(type))
        {
            if (LogFilter.logDebug)
            {
                Debug.LogWarningFormat("Replace msg handler:{0}", type);
            }
            _actionEvent.Remove(type);
        }

        if (LogFilter.logDev)
        {
            Debug.LogWarningFormat("Register msg handler:{0}", type);
        }
        _actionEvent.Add(type, action);
    }
コード例 #18
0
ファイル: TMPacket.cs プロジェクト: x2v0/TM
        /// <summary>
        ///    Initializes a new instance of the <see cref="Packet" /> class.
        /// </summary>
        public Packet(EServerType server_type, EPacketType type,
                      byte cmd, byte value = 0, byte[] data = null)
        {
            BufferChunk.SetNetworking();
            Header = new PacketHeader(server_type);

            Header.type          = (byte)type;
            Header.value         = value;
            Header.packet_number = PacketNumber++;
            var len = PacketHeader.Length + 1; // +1 checksum

            Header.datalength = 1;

            if ((data != null) &&
                (data.Length > 0))
            {
                Header.datalength += (uint)data.Length;
                len += Header.datalength;
                Data = new BufferChunk((int)len);
                Data.Add(Header);
                Data += data;
            }
            else
            {
                Data = new BufferChunk((int)len);
                Data.Add(Header);
            }

            AddChecksumm();

#if LOCAL_DEBUG
            Console.WriteLine(Encoding.ASCII.GetString(Header.sign));

            if (data != null)
            {
                var str = Encoding.ASCII.GetString(data);
                Console.WriteLine(str);
            }
#endif
        }
コード例 #19
0
ファイル: TMPacket.cs プロジェクト: x2v0/TM
        /// <summary>
        /// Initializes a new instance of the <see cref="Packet"/> class.
        /// </summary>
        public Packet(EServerType server_type, EPacketType type, string data)
        {
            BufferChunk.SetNetworking();
            Header = new PacketHeader(server_type);

            Header.type          = (byte)type;
            Header.value         = 0;
            Header.packet_number = PacketNumber++;
            data += "\0"; // quick&dirty

            if (!string.IsNullOrEmpty(data))
            {
                Header.datalength = (uint)data.Length + 1; // +1 checksum
                var len = PacketHeader.Length;
                len += Header.datalength;
                Data = new BufferChunk((int)len);
                Data.Add(Header);
                Data += data;
                var str = Encoding.ASCII.GetString(Data.Buffer);
            }
            else
            {
                Header.datalength = 1;
                Data = new BufferChunk((int)(PacketHeader.Length + 1));
                Data.Add(Header);
            }

            AddChecksumm();

#if LOCAL_DEBUG
            Console.WriteLine(Encoding.ASCII.GetString(Header.sign));

            if (!string.IsNullOrEmpty(data))
            {
                var str = data;
                Console.WriteLine(str);
            }
#endif
        }
コード例 #20
0
        public static Packet CreatePacket(EPacketType packetType)
        {
            Packet packet = null;

            switch (packetType)
            {
            case EPacketType.Text:
                packet = new PacketTextMessage();
                break;

            case EPacketType.Ack:
                packet = new PacketAck();
                break;

            case EPacketType.Connected:
                packet = new PacketClientConnected();
                break;

            case EPacketType.CreateGameRequest:
                packet = new PacketCreateGameRequest();
                break;

            case EPacketType.CreateGameAnswer:
                packet = new PacketCreateGameAnswer();
                break;

            case EPacketType.JoinGameRequest:
                packet = new PacketJoinGameRequest();
                break;

            case EPacketType.JoinGameAnswer:
                packet = new PacketJoinGameAnswer();
                break;

            case EPacketType.GetGameRequest:
                packet = new PacketGetGameRequest();
                break;

            case EPacketType.GetGameAnswer:
                packet = new PacketGetGameAnswer();
                break;

            case EPacketType.LeaveGameRequest:
                packet = new PacketLeaveGameRequest();
                break;

            case EPacketType.LeaveGameAnswer:
                packet = new PacketLeaveGameAnswer();
                break;

            case EPacketType.ObjectEnter:
                packet = new PacketObjectEnter();
                break;

            case EPacketType.ObjectLeave:
                packet = new PacketObjectLeave();
                break;

            case EPacketType.NewPlayerJoin:
                packet = new PacketNewPlayerJoin();
                break;

            case EPacketType.UpdateMovementAnswer:
                packet = new PacketMovementUpdateAnswer();
                break;

            case EPacketType.GameStarted:
                packet = new PacketGameStarted();
                break;

            case EPacketType.PingAnswer:
                packet = new PacketPingAnswer();
                break;

            case EPacketType.PingRequest:
                packet = new PacketPingRequest();
                break;

            case EPacketType.ClockSyncAnswer:
                packet = new PacketSyncClockAnswer();
                break;

            default:
                throw new Exception("Impossible to instantiate the packet");
            }

            return(packet);
        }
コード例 #21
0
 public SHeader2(SHeader2 Obj_)
 {
     PacketType    = Obj_.PacketType;
     RecvPacketSeq = Obj_.RecvPacketSeq;
 }
コード例 #22
0
 public SHeader2(EPacketType PacketType_, TPacketSeq RecvPacketSeq_)
 {
     PacketType    = PacketType_;
     RecvPacketSeq = RecvPacketSeq_;
 }
コード例 #23
0
 public void Set(SHeader2 Obj_)
 {
     PacketType    = Obj_.PacketType;
     RecvPacketSeq = Obj_.RecvPacketSeq;
 }
コード例 #24
0
 public PacketView(EPacketType type) : base(type)
 {
 }
コード例 #25
0
 public PacketAnswer(EPacketType type) : base(type)
 {
 }
コード例 #26
0
 public Packet(TcpClient sender, EPacketType packetType, byte[] data)
 {
     _sender     = sender;
     _packetType = packetType;
     _data       = data;
 }
コード例 #27
0
ファイル: Peer.cs プロジェクト: thinking2535/Rso
 void _SendBegin(EPacketType PacketType_ = EPacketType.User)  // 외부에서 Stream 에 한번에 담아 보낼 수 있으나, 복사를 한번 더 하게 되기 때문에 SProto 를 여러 파라미터로받아 내부에서 SendBegin, SendEnd 영역을 두어 보내는 방식으로 처리
 {
     new SHeader(0, 0, _SendPacketSeq + 1).Pop(_StreamSnd);
     new SHeader2(PacketType_, _RecvPacketSeq).Pop(_StreamSnd);
 }
コード例 #28
0
 public Packet(EPacketType type, bool reliable = true)
 {
     Type       = type;
     IsReliable = reliable;
 }