Exemplo n.º 1
0
        public void Write(PacketBuffer packet)
        {
            if (packet == null)
                throw new ArgumentNullException(nameof(packet));

            packet.Write(Time);
        }
Exemplo n.º 2
0
        /// <summary>
        /// BSON 패킷 구조를 따르는 PacketBuffer을 BSON Data로 변환 시키는 메서드
        /// </summary>
        /// <param name="buffer">BSON 패킷 구조를 따르는 Packet Buffer</param>
        /// <returns>BSON Data</returns>
        public dynamic Decode(IChannel channel, PacketBuffer buffer)
        {
            //버퍼 읽기 시작을 알림
            buffer.BeginBufferIndex();

            if (buffer.AvailableBytes() < 5) //버퍼길이가 5미만이면 리턴
                return null;

            uint len = buffer.ReadUInt32();
            if (len > buffer.AvailableBytes())
            {
                //버퍼의 길이가 실제 패킷 길이보다 모자름으로, 리셋후 리턴
                buffer.ResetBufferIndex();
                return null;
            }

            var data = new byte[len];
            buffer.ReadBytes(data);

            buffer.EndBufferIndex();

            var stream = new MemoryStream(data);
            dynamic res = Serializer.Deserialize(new BsonReader(stream));
            stream.Dispose();

            return res;
        }
Exemplo n.º 3
0
        public object Decode(IChannel channel, PacketBuffer buffer)
        {
            //버퍼 읽기 시작을 알림
            buffer.BeginBufferIndex();

            if (buffer.AvailableBytes() < 6) //버퍼길이가 5미만이면 리턴
                return null;
            buffer.ReadByte();
            uint len = buffer.ReadUInt32();
            if (len > buffer.AvailableBytes())
            {
                //버퍼의 길이가 실제 패킷 길이보다 모자름으로, 리셋후 리턴
                buffer.ResetBufferIndex();
                return null;
            }

            var data = new byte[len];
            buffer.ReadBytes(data);

            buffer.EndBufferIndex();

            var stream = new MemoryStream(data);
            var res = Unpacker.Create(stream).Unpack<MessagePackObject>();
            stream.Dispose();

            return res;
        }
Exemplo n.º 4
0
        public void Write(PacketBuffer packet)
        {
            if (packet == null)
                throw new ArgumentNullException(nameof(packet));

            Settings.Write(packet);
        }
Exemplo n.º 5
0
        public dynamic Decode(IChannel channel, PacketBuffer buffer)
        {
            buffer.BeginBufferIndex();
            if(buffer.AvailableBytes() > MaxBufferSize)
            {
                channel.Disconnect();
                return null;
            }

            if (buffer.AvailableBytes() == 0)
                return null;

            Request request;

            try
            {
                request = Request.Parse(buffer);
            }
            catch (Exception)
            {
                buffer.ResetBufferIndex();
                return null;
            }

            buffer.EndBufferIndex();
            return request;
        }
Exemplo n.º 6
0
        public void Write(PacketBuffer packet)
        {
            if (packet == null)
                throw new ArgumentNullException(nameof(packet));

            packet.Write(ChunkSize);
            packet.Write(DataHash);
            packet.Write(Data, 0, Data.Length);
        }
Exemplo n.º 7
0
        public void Write(PacketBuffer packet)
        {
            if (packet == null)
                throw new ArgumentNullException(nameof(packet));

            packet.Write((byte)'A');
            packet.Write((byte)'R');
            packet.Write((byte)'M');
            packet.Write(Arm);
        }
Exemplo n.º 8
0
        public PacketBuffer Encode(IChannel channel, object data)
        {
            var str = data as string;
            if (str == null)
                return null;

            var buffer = new PacketBuffer();
            buffer.Write(_encoding.GetBytes(str));
            buffer.WriteBytes(new byte[]{13, 10});
            return buffer;
        }
Exemplo n.º 9
0
        public object Decode(IChannel channel, PacketBuffer buffer)
        {
            var index = buffer.FindBytes(new byte[] {13, 10});
            if (index == -1)
                return null;

            string data = _encoding.GetString(buffer.ReadBytes((int) index));
            buffer.ReadBytes(2);

            return data;
        }
Exemplo n.º 10
0
        /// <summary>
        /// BSON Encode 함수
        /// 
        /// 입력받는 bson 데이터를 BSON 패킷 구조로 변환
        /// </summary>
        /// <param name="data">BSON Data</param>
        /// <returns>BSON 패킷 구조를 따르는 PacketBuffer</returns>
        public PacketBuffer Encode(IChannel channel, dynamic data)
        {
            var buffer = new PacketBuffer();

            var stream = new MemoryStream();
            Serializer.Serialize(new BsonWriter(stream), data);
            stream.Position = 0;

            buffer.Write((UInt32) stream.Length);
            buffer.Write(stream);
            stream.Dispose();

            return buffer;
        }
Exemplo n.º 11
0
 public PacketBuffer Encode(IChannel channel, dynamic data)
 {
     var buffer = new PacketBuffer();
     if (data is string)
         InputBuffer(buffer, 1, System.Text.Encoding.UTF8.GetBytes(data));
     else if (data is byte[])
         InputBuffer(buffer, 2, data);
     else if (data is Ping)
         return null;
     else if (data is Pong)
         return null;
     else
         return null;
     return buffer;
 }
Exemplo n.º 12
0
        public void PacketBufferBytesTest()
        {
            var data = new byte[] {1, 0, 0, 5};
            var buffer = new PacketBuffer();
            buffer.WriteBytes(data);

            buffer.BeginBufferIndex();

            var temp = buffer.ReadBytes(4);
            for (int i = 0; i < temp.Length; i++)
            {
                if(temp[i] != data[i])
                    throw new Exception("PacketBuffer error");
            }
        }
Exemplo n.º 13
0
        public static Request Parse(PacketBuffer buffer)
        {
            var request = new Request();
            request._postData.Add("FILES", new Dictionary<string, string>());

            request.SetFirstHeader(buffer.ReadLine());

            if (!request.GetHeaders(buffer))
                throw new Exception("Header Error");

            if (request.GetMethod() == "POST" && !request.SetPostData(buffer))
                throw new Exception("Header Error");

            return request;
        }
Exemplo n.º 14
0
        public PacketBuffer Encode(IChannel channel, object data)
        {
            if (!(data is MessagePackObject))
                return null;
            var buffer = new PacketBuffer();
            buffer.WriteByte(1);
            var stream = new MemoryStream();
            Packer.Create(stream).Pack((MessagePackObject)data);
            stream.Position = 0;

            buffer.Write((UInt32)stream.Length);
            buffer.Write(stream);
            stream.Dispose();

            return buffer;
        }
Exemplo n.º 15
0
        public void PacketBufferInt32Test()
        {
            var buffer = new PacketBuffer();
            buffer.WriteInt32(1);
            buffer.WriteInt32(0);
            buffer.WriteInt32(0);
            buffer.WriteInt32(5);

            buffer.BeginBufferIndex();
            long m = 0;
            for (int i = 0; i < 4; i++)
                m += buffer.ReadInt32();
            if (m != 6)
            {
                throw new Exception("PacketBuffer error");
            }
        }
Exemplo n.º 16
0
        public void BufferUnstableTest()
        {
            var buffer =
                new PacketBuffer<bool>(
                    new PacketChecker<bool>(
                        new PacketPadder<bool>(new UnstableTestChannel(2)),
                        ByteChannelOptions.Default));
            var data = new byte[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
            byte[] received = new byte[0];

            buffer.Receive += (sender, message) =>
                received = ByteHelper.Combine(received, message.Data.ToArray());
            buffer.Send(new byte[0]);
            buffer.Send(data);

            CollectionAssert.AreEqual(data, received);
        }
Exemplo n.º 17
0
        public void SendMessage(int index, string message, MessageColors color)
        {
            var buffer = new PacketBuffer();

            buffer.AddInteger((int)SMessage);
            buffer.AddInteger((int)color);
            buffer.AddString(message);
            // Use index -1 to broadcast from server to all players
            if (index != -1)
            {
                SendData(index, buffer.ToArray());
            }
            else
            {
                BroadcastData(buffer.ToArray());
            }

            buffer.Dispose();
        }
Exemplo n.º 18
0
        /// <summary>
        ///   取得委託價函式
        /// </summary>
        /// <param name="type">委託價格式(0=1Byte  1=2Byte)</param>
        /// <param name="buffer">即時資料Buffer</param>
        /// <returns>返回值:委託價格</returns>
        private static float EntrustPrice(byte type, PacketBuffer buffer)
        {
            double dPrice = 0;

            if (type == 0)
            {
                if (buffer[0] < 0xff)                       //0xff=無價位
                {
                    dPrice = buffer[0] * 0.01;
                }
                ++buffer.Position;
            }
            else
            {
                dPrice           = ((buffer[0] << 8) + buffer[1]) * 0.01;
                buffer.Position += 2;
            }
            return((float)dPrice);
        }
Exemplo n.º 19
0
        private static bool Serialise(Text2DManager textManager, PacketBuffer packet, BinaryWriter writer, ref uint count)
        {
            Shapes.Text2D shape          = new Shapes.Text2D(null);
            uint          progressMarker = 0;
            int           dataResult     = 1;
            bool          shapeOk        = true;

            foreach (TextEntry entry in textManager.Entries)
            {
                ++count;
                ConvertToShape(shape, entry);
                shape.WriteCreate(packet);

                shapeOk = packet.FinalisePacket();
                if (shapeOk)
                {
                    packet.ExportTo(writer);

                    if (shape.IsComplex)
                    {
                        dataResult = 1;
                        while (dataResult > 0 && shapeOk)
                        {
                            shape.WriteData(packet, ref progressMarker);
                            shapeOk = packet.FinalisePacket();
                            if (shapeOk)
                            {
                                packet.ExportTo(writer);
                            }
                        }

                        shapeOk = dataResult == 0;
                    }
                }

                if (!shapeOk)
                {
                    return(false);
                }
            }

            return(true);
        }
Exemplo n.º 20
0
    static void OnLogin(PacketBuffer buffer)
    {//TRAINER_DATA		TrainerID (Integer)				Prefab Index(short)	AssetID (Integer)				Username (String) ...				LOCATION
        BinaryReader reader = buffer.StartReading();

        reader.ReadString();                         //String Message
        player.ID = reader.ReadInt32();              //TrainerID
        reader.ReadInt16();                          //Prefab Index
        player.TrainerAssetID = reader.ReadInt32();  //AssetID (Integer
        player.Username       = reader.ReadString(); //Username (String

        Pokemon pokeData = new Pokemon();
        SpawnData <System.Object> SpawnData = new SpawnData <System.Object>();

        SpawnData.Data    = (System.Object)pokeData;
        player.spawnQueue = new Queue <SpawnData <System.Object> >();
        player.spawnQueue.Enqueue(SpawnData);
        //Pokemon pokeData1 = (Pokemon)player.spawnQueue.Peek();
        Console.WriteLine(">> Player[ID = " + player.ID + "]Username : +" + player.Username + " Has logged on ");
    }
        private static void AcceptCallback(IAsyncResult ar)
        {
            Socket socket = _serverSocket.EndAccept(ar);

            _serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), null);

            byte[] tempData = new byte[1024];
            socket.ReceiveTimeout = (int)Constants.CONNECT_TIMEOUT * 1000;

            try {
                PacketBuffer buffer = new PacketBuffer();
                buffer.WriteServerPacket(ServerPackets.SAskIfClientOrServer);
                SendDataTo(socket, buffer.ToArray());
                buffer.Dispose();

                socket.Receive(tempData);

                PacketBuffer  receivedbuffer = new PacketBuffer(tempData);
                ClientPackets packet         = receivedbuffer.ReadClientPacket();
                string        key            = receivedbuffer.ReadString();
                int           index          = receivedbuffer.ReadInteger();

                if (packet != ClientPackets.CSendKey)
                {
                    throw new Exception("Wrong packet sent to server.");
                }

                if (key == ServerHandleNetworkData.masterServerKey)
                {
                    ConnectMatchServer(socket, index);
                }
                else if (key == ServerHandleNetworkData.clientKey)
                {
                    ConnectPlayer(socket);
                }
                else
                {
                    throw new Exception("Wrong key sent to server.");
                }
            } catch {
                socket.Close();
            }
        }
Exemplo n.º 22
0
        public void HandleStack(int index, byte[] data)
        {
            var buffer = new PacketBuffer();

            buffer.AddBytes(data);
            buffer.GetInteger();
            var from = buffer.GetString();
            var to   = buffer.GetString();

            buffer.Dispose();
            var player = _userService.ActiveUsers.Find(p => p.Id == Types.PlayerIds[index]);

            if (Transactions.StackItems(from, to, player) == -1)
            {
                SendMessage(index, "Invalid item, item cannot stack, or stack is full.", Warning);
            }
            ;
            SendInventory(index);
        }
Exemplo n.º 23
0
        private static void Handle_RequestEnterQuickPlay(int index, byte[] data)
        {
            PacketBuffer buffer = new PacketBuffer();

            buffer.WriteBytes(data);
            int    packetNum = buffer.ReadInteger();
            string msg       = buffer.ReadString();

            buffer.Dispose();

            //Json parse
            UserSession userSession = SqlConnection.InitialazeUserSession(msg);

            userSession.mainTeam[0] = SqlConnection.LoadUserChar(userSession.mainTeamNames[0], userSession);
            userSession.mainTeam[1] = SqlConnection.LoadUserChar(userSession.mainTeamNames[1], userSession);
            userSession.mainTeam[2] = SqlConnection.LoadUserChar(userSession.mainTeamNames[2], userSession);
            Console.WriteLine(index + string.Format(" : Entered 'QuickPlay' mode. (Rating = {0}, teamPower = {1})", userSession.rating, userSession.mainTeam[0].power + userSession.mainTeam[1].power + userSession.mainTeam[2].power));
            QuickPlayLobby.EnterQuery(userSession);
        }
Exemplo n.º 24
0
 /// <summary>
 /// Write this message to <paramref name="packet"/>.
 /// </summary>
 /// <param name="packet">The packet to write to.</param>
 /// <returns>True</returns>
 public bool Write(PacketBuffer packet)
 {
     packet.WriteBytes(new byte[] { CameraID }, true);
     packet.WriteBytes(new byte[] { Reserved1 }, true);
     packet.WriteBytes(BitConverter.GetBytes(Reserved2), true);
     packet.WriteBytes(BitConverter.GetBytes(X), true);
     packet.WriteBytes(BitConverter.GetBytes(Y), true);
     packet.WriteBytes(BitConverter.GetBytes(Z), true);
     packet.WriteBytes(BitConverter.GetBytes(DirX), true);
     packet.WriteBytes(BitConverter.GetBytes(DirY), true);
     packet.WriteBytes(BitConverter.GetBytes(DirZ), true);
     packet.WriteBytes(BitConverter.GetBytes(UpX), true);
     packet.WriteBytes(BitConverter.GetBytes(UpY), true);
     packet.WriteBytes(BitConverter.GetBytes(UpZ), true);
     packet.WriteBytes(BitConverter.GetBytes(Near), true);
     packet.WriteBytes(BitConverter.GetBytes(Far), true);
     packet.WriteBytes(BitConverter.GetBytes(FOV), true);
     return(true);
 }
Exemplo n.º 25
0
        internal static MitakeNotice Decode(int serial, PacketBuffer buffer)
        {
            int    iBodySize = 0;
            string sTime = null, sText = null;

            int  iSerial = 0;
            byte bNumber = 0, bCount = 0;

            iBodySize = buffer.Data[3] - 5;

            buffer.Position = 7;             //移動至資料結構(時間欄位)

            //取得序號
            iSerial          = (buffer[0] << 8) + buffer[1];
            buffer.Position += 2;

            bNumber = buffer[0];             //取得封包編號(0 = 標題)
            ++buffer.Position;

            if (bNumber == 0)
            {
                //取得封包個數
                bCount = buffer[0];
                ++buffer.Position;

                //取得公告時間
                sTime            = string.Format("{0}:{1}", buffer[0].ToString("0#"), buffer[1].ToString("0#"));
                buffer.Position += 2;

                iBodySize -= 6;
            }
            else
            {
                iBodySize -= 3;
            }

            if (iBodySize > 0)
            {
                sText = Encoding.GetEncoding("big5").GetString(buffer.Data, buffer.Position, iBodySize);
            }

            return(__cNoticeUtil.Merge(serial, iSerial, bNumber, bCount, sTime, sText));            //封包合併(如果合併完成會傳出公告資訊類別, 否則回傳null)
        }
Exemplo n.º 26
0
        private static void HandleRotationStepback(GamePlayerUDP player, byte[] data)
        {
            using (PacketBuffer buffer = new PacketBuffer())
            {
                buffer.WriteBytes(data);
                buffer.ReadInteger();
                ObjectType type          = (ObjectType)buffer.ReadInteger();
                int        index         = buffer.ReadInteger();
                int        StepBackIndex = buffer.ReadInteger();
                switch (type)
                {
                case ObjectType.spell:
                    try
                    {
                        player.room.dynamicObjectsList.Get(index).rotation.UdpateStepBack(StepBackIndex);
                    }
                    catch (Exception ex)
                    {
                        if (ex is NullReferenceException || ex is IndexOutOfRangeException)
                        {
                            return;
                        }
                        Global.serverForm.Debug(ex + "");
                    }
                    break;

                case ObjectType.staticObjects:
                    try
                    {
                        player.room.staticObjectsList.Get(index).rotation.UdpateStepBack(StepBackIndex);
                    }
                    catch (Exception ex)
                    {
                        if (ex is NullReferenceException || ex is IndexOutOfRangeException)
                        {
                            return;
                        }
                        Global.serverForm.Debug(ex + "");
                    }
                    break;
                }
            }
        }
Exemplo n.º 27
0
        private static void PacketDecode(Socket socket, SocketToken Token, bool IsDecode)
        {
            int          iCheck  = 0;
            PacketBuffer cPacket = Token.ReceiveBuffer;

            cPacket.Position = -1;
            while (++cPacket.Position < cPacket.Length)
            {
                iCheck = VerifyPacket(cPacket);
                switch (iCheck)
                {
                case -1:                                 //未知封包
                    if (Token.IsStart)
                    {
                        if (cPacket[0] == 0x0b)
                        {
                            if (McpDecoder.McpDecode(socket, Token))
                            {
                                continue;
                            }
                        }
                        Token.IsStart = false;
                    }
                    Token.AddTemp();
                    break;

                case 0:                                  //完整封包
                    int iSize = cPacket[3] + 4;
                    Token.SetPackage(iSize);
                    DecodeFinance(socket, Token.StockEvent, IsDecode);
                    cPacket.Position += (iSize - 1);
                    Token.IsStart     = true;
                    break;

                case 1:                                  //末端斷包
                    while (++cPacket.Position < cPacket.Length)
                    {
                        Token.AddTemp();
                    }
                    break;
                }
            }
        }
Exemplo n.º 28
0
        public void SendEntities(User user)
        {
            foreach (var npc in NpcTalk)
            {
                var buffer = new PacketBuffer(0x8, user);
                buffer.WriteUInt16(npc.EntityId);
                buffer.WriteUInt16(2); // Type? 2 = NPC
                buffer.WriteUInt32((uint)npc.Type);
                buffer.WriteUInt32(0); // ?
                buffer.WriteUInt16(0); // ?

                var pos = PointObjects.FirstOrDefault(x => x.Id == npc.PosId);

                if (pos != null)
                {
                    buffer.WriteUInt16((ushort)pos.X);
                    buffer.WriteUInt16((ushort)pos.Y);
                    buffer.WriteUInt16((ushort)pos.X);
                    buffer.WriteUInt16((ushort)pos.Y);
                }
                else
                {
                    Program.logger.Error("------ Entity position {0} not found for NPC {1} in map {2} ({3})", npc.PosId, npc.Type, Name, Id);

                    buffer.WriteUInt16(0);
                    buffer.WriteUInt16(0);
                    buffer.WriteUInt16(0);
                    buffer.WriteUInt16(0);
                }

                buffer.WriteString(Methods.Utf8Convert(Data.CharacterInfo[npc.Type].Name));
                buffer.WriteByte(0x00);

                buffer.WriteHexString("00 80 00 00 00 00 00 00 00 00 00 00"); // ?
                buffer.WriteUInt16((ushort)npc.PosId);
                buffer.WriteUInt16((ushort)npc.HeadMarkType);                 // Head marking
                buffer.WriteUInt16(0);                                        // ?

                Program.logger.Debug("Sending entity packet: {0}", Util.ByteToHex(buffer.GetBuffer()));

                buffer.Send();
            }
        }
Exemplo n.º 29
0
    public override void Deserialize(byte[] data)
    {
        PacketBuffer buffer = new PacketBuffer();

        buffer.WriteBytes(data);

        // Read position
        Vector3 receivedPosition = buffer.ReadVector3();

        transform.position = receivedPosition;

        // Read rotation
        Vector3 receivedRotation = buffer.ReadVector3();

        transform.rotation = Quaternion.identity * Quaternion.Euler(receivedRotation);


        //Debug.Log(string.Format("Deserialized object , rot = {0}", receivedRotation));
    }
Exemplo n.º 30
0
        internal ServerPacket RecieveSinglePacketIfAvailable(PacketBuffer pBuffer)
        {
            if (pBuffer.Length <= 0)
            {
                return(null);
            }
            ServerPacketId packetid = (ServerPacketId)pBuffer[0];

            ServerPacketInfo info;

            if (!_registry.TryGetValue(packetid, out info))
            {
                InvokeOnUnknownPacket(string.Format("Invalid packet {0}, clearing buffer.", packetid), pBuffer.buffer);
                pBuffer.ClearIncoming();
            }
            else
            {
                ushort packetlen;
                if (!info.isFixedLen)
                {
                    if (pBuffer.Length < 3)
                    {
                        return(null);
                    }
                    packetlen = (ushort)(pBuffer[1] << 8 | pBuffer[2]);
                }
                else
                {
                    packetlen = info.FixedLength;
                }
                if (pBuffer.Length >= packetlen)
                {
                    ServerPacket packet = null;
                    if (info.Factory != null)
                    {
                        packet = info.Factory(new PacketReader(Version, pBuffer, packetlen));
                    }
                    pBuffer.RemoveBufferHead(packetlen);
                    return(packet);
                }
            }
            return(null);
        }
Exemplo n.º 31
0
        /// <summary>
        /// Read an <see cref="UpdateMessage"/> for this shape.
        /// </summary>
        /// <param name="packet">The buffer from which the reader reads.</param>
        /// <param name="reader">The stream to read message data from.</param>
        /// <returns><c>true</c> if the message is successfully read.</returns>
        /// <remarks>
        /// Respects the <see cref="UpdateFlag"/> values, only modifying requested data.
        /// </remarks>
        public virtual bool ReadUpdate(PacketBuffer packet, BinaryReader reader)
        {
            UpdateMessage up = new UpdateMessage();

            if (up.Read(reader))
            {
                if ((up.Flags & (ushort)UpdateFlag.UpdateMode) == 0)
                {
                    // Full update.
                    _data.Attributes = up.Attributes;
                }
                else
                {
                    // Partial update.
                    if ((up.Flags & (short)UpdateFlag.Position) != 0)
                    {
                        _data.Attributes.X = up.Attributes.X;
                        _data.Attributes.Y = up.Attributes.Y;
                        _data.Attributes.Z = up.Attributes.Z;
                    }
                    if ((up.Flags & (short)UpdateFlag.Rotation) != 0)
                    {
                        _data.Attributes.RotationX = up.Attributes.RotationX;
                        _data.Attributes.RotationY = up.Attributes.RotationY;
                        _data.Attributes.RotationZ = up.Attributes.RotationZ;
                        _data.Attributes.RotationW = up.Attributes.RotationW;
                    }
                    if ((up.Flags & (short)UpdateFlag.Scale) != 0)
                    {
                        _data.Attributes.ScaleX = up.Attributes.ScaleX;
                        _data.Attributes.ScaleY = up.Attributes.ScaleY;
                        _data.Attributes.ScaleZ = up.Attributes.ScaleZ;
                    }
                    if ((up.Flags & (short)UpdateFlag.Colour) != 0)
                    {
                        _data.Attributes.Colour = up.Attributes.Colour;
                    }
                }
                return(true);
            }
            return(false);
        }
Exemplo n.º 32
0
        private static void HandleServerPulse(byte[] data)
        {
            var buffer = new PacketBuffer();

            buffer.AddBytes(data);
            buffer.GetInteger(); // Packet Type
            var numPlayers = buffer.GetInteger();

            Globals.serverTime = BitConverter.ToInt64(buffer.GetBytes(8), 0);
            for (var i = 0; i != numPlayers; i++)
            {
                var index     = buffer.GetInteger();
                var Id        = buffer.GetString();
                var X         = buffer.GetFloat();
                var Y         = buffer.GetFloat();
                var Rotation  = buffer.GetFloat();
                var Health    = buffer.GetInteger();
                var MaxHealth = buffer.GetInteger();
                var Shield    = buffer.GetInteger();
                var MaxShield = buffer.GetInteger();
                var inGame    = BitConverter.ToBoolean(buffer.GetBytes(1), 0);
                // If the buffer is not ourselves, skip the update - need to do not in game characters to remove logged out users
                if (index == GameLogic.PlayerIndex)
                {
                    continue;
                }
                Types.Player[index].Id        = Id;
                Types.Player[index].X         = X;
                Types.Player[index].Y         = Y;
                Types.Player[index].Rotation  = Rotation;
                Types.Player[index].Health    = Health;
                Types.Player[index].MaxHealth = MaxHealth;
                Types.Player[index].Shield    = Shield;
                Types.Player[index].MaxShield = MaxShield;
            }
            GameLogic.LocalMobs   = buffer.GetList <Mob>();
            GameLogic.LocalCombat = buffer.GetList <Combat>();
            GameLogic.LocalLoot   = buffer.GetList <Inventory>();
            GameLogic.RealLoot    = buffer.GetList <Loot>();
            GameLogic.WatchCombat();
            buffer.Dispose();
        }
Exemplo n.º 33
0
        /// <summary>
        /// Handle create messages.
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="packet"></param>
        /// <param name="reader"></param>
        /// <returns></returns>
        protected virtual Error HandleMessage(CreateMessage msg, PacketBuffer packet, BinaryReader reader)
        {
            TextEntry text = new TextEntry();

            text.ID          = msg.ObjectID;
            text.ObjectFlags = msg.Flags;
            text.Category    = msg.Category;
            text.Position    = new Vector3(msg.Attributes.X, msg.Attributes.Y, msg.Attributes.Z);
            text.Colour      = Maths.ColourExt.ToUnity32(new Maths.Colour(msg.Attributes.Colour));

            // Read the text.
            int textLength = reader.ReadUInt16();

            if (textLength > 0)
            {
                byte[] textBytes = reader.ReadBytes(textLength);
                text.Text = System.Text.Encoding.UTF8.GetString(textBytes);
            }

            if (msg.ObjectID == 0)
            {
                TransientText.Add(text);
            }
            else
            {
                if (PersistentText.ContainsEntry(text.ID))
                {
                    // Object ID already present. Check for replace flag.
                    if ((msg.Flags & (ushort)ObjectFlag.Replace) == 0)
                    {
                        // Not replace flag => error.
                        return(new Error(ErrorCode.DuplicateShape, msg.ObjectID));
                    }

                    // Replace.
                    PersistentText.Remove(text.ID);
                }
                PersistentText.Add(text);
            }

            return(new Error());
        }
Exemplo n.º 34
0
        public void TestWriteSizeCheck()
        {
            byte[] empty   = Array.Empty <byte>();
            byte[] random1 = new byte[128];
            byte[] random2 = new byte[3072];
            byte[] random3 = new byte[262144];
            Random gen     = new Random();

            gen.NextBytes(random1);
            gen.NextBytes(random2);
            gen.NextBytes(random3);

            using var write = new PacketBuffer();
            write.WriteByteArray(empty, empty.Length);
            write.WriteByteArray(random2, random2.Length);
            write.WriteShortByteArray(random1);
            Assert.ThrowsException <ArgumentOutOfRangeException>(() => write.WriteShortByteArray(random2));
            write.WriteMediumByteArray(random2);
            Assert.ThrowsException <ArgumentOutOfRangeException>(() => write.WriteMediumByteArray(random3));
        }
Exemplo n.º 35
0
    public void SendPlayerCount()
    {
        int ActiveClients = CountActiveClients();

        PacketBuffer buffer = new PacketBuffer();

        buffer.WriteInt32((int)ServerPackets.SConnectedPlayerCount);
        buffer.WriteInt32(ActiveClients);

        for (int i = 0; i < _clients.Length; i++)
        {
            if (_clients[i].Socket != null)
            {
                SendDataTo(i, buffer.ToArray());
                Debug.Log("Player count sended to Client[" + i + "]");
            }
        }

        buffer.Dispose();
    }
Exemplo n.º 36
0
        public void TestEncrypted()
        {
            using var message = new FakeMessage { Text = text };
            Span <byte> key = stackalloc byte[64];

            RandomNumberGenerator.Fill(key);

            using var buffer = new PacketBuffer();

            message.Encrypt(key);
            message.WritePacket(buffer, PacketRole.Client);

            buffer.Position = 0;

            using var received = new FakeMessage();
            received.ReadPacket(buffer, PacketRole.Server);
            received.Decrypt(key);

            Assert.AreEqual(text, received.Text);
        }
Exemplo n.º 37
0
 private void Read_v1_1(PacketBuffer buf)
 {
     Algorithm      = ContentAlgorithm.None;
     Name           = buf.ReadString();
     Length         = Convert.ToInt64(buf.ReadULong());
     Attributes     = (FileAttributes)buf.ReadUInt();
     CreationTime   = buf.ReadDate();
     LastAccessTime = buf.ReadDate();
     LastWriteTime  = buf.ReadDate();
     Thumbnail      = buf.ReadByteArray();
     if (buf.Pending >= 32) // This is necessary as VSL 1.1 .NET does not even send an empty 32 byte array as SHA.
     {
         SHA256 = buf.ReadByteArray(32);
     }
     else
     {
         SHA256 = new byte[32]; // We leave an empty 32 byte array to prevent further crashes.
     }
     Available = true;
 }
Exemplo n.º 38
0
        private void InputBuffer(PacketBuffer buffer, byte type, byte[] data)
        {
            var buf = new byte[127];
            var stream = new MemoryStream(data);

            while (true)
            {
                int len = stream.Read(buf, 0, 127);
                if (len == 0)
                    break;

                buffer.WriteByte((byte)((len != 127 ? 0x80 : 0x0) | type));
                buffer.WriteByte((byte)(0x7F & len));

                buffer.Write(buf, 0, len);

                if (len != 127)
                    break;
            }
        }
Exemplo n.º 39
0
        public static void EndMove(User user, int numMoves)
        {
            //user.Character.Mover.Task.Dispose();
            user.Character.Mover.Moving = false;

            if (numMoves > 0)
            {
                var res = new PacketBuffer(0x18, user);
                res.WriteUInt16(user.Character.EntityId);
                res.WriteUInt16(user.Character.X);
                res.WriteUInt16(user.Character.Y);
                res.WriteUInt16(user.Character.Mover.Destination.X);
                res.WriteUInt16(user.Character.Mover.Destination.Y);
                res.WriteByte(0x2);
                res.Send();

                user.Character.X = user.Character.Mover.Destination.X;
                user.Character.Y = user.Character.Mover.Destination.Y;
            }
        }
Exemplo n.º 40
0
        /// <summary>
        /// The primary message handling function.
        /// </summary>
        /// <param name="packet"></param>
        /// <param name="reader"></param>
        /// <returns></returns>
        public override Error ReadMessage(PacketBuffer packet, BinaryReader reader)
        {
            switch (packet.Header.MessageID)
            {
            case (ushort)CategoryMessageID.Name:
                CategoryNameMessage msg = new CategoryNameMessage();
                if (!msg.Read(reader))
                {
                    return(new Error(ErrorCode.MalformedMessage));
                }

                AddCategory(msg.CategoryID, msg.ParentID, msg.Name, msg.DefaultActive);
                break;

            default:
                return(new Error(ErrorCode.InvalidMessageID, packet.Header.MessageID));
            }

            return(new Error());
        }
Exemplo n.º 41
0
        public void UpdatePlayer(int index)
        {
            var buffer = new PacketBuffer();
            var player = _userService.ActiveUsers.Find(p => p.Id == Types.PlayerIds[index]);

            buffer.AddInteger((int)SPlayerUpdate);
            buffer.AddInteger(player.Health);
            buffer.AddInteger(player.MaxHealth);
            buffer.AddInteger(player.Shield);
            buffer.AddInteger(player.MaxShield);
            buffer.AddInteger(player.Exp);
            buffer.AddInteger(player.Level);
            buffer.AddInteger(player.Weap1Charge);
            buffer.AddInteger(player.Weap2Charge);
            buffer.AddInteger(player.Weap3Charge);
            buffer.AddInteger(player.Weap4Charge);
            buffer.AddInteger(player.Weap5Charge);
            SendData(index, buffer.ToArray());
            buffer.Dispose();
        }
Exemplo n.º 42
0
        public void ParseChat(int index, byte[] data)
        {
            var buffer = new PacketBuffer();
            var player = _userService.ActiveUsers.Find(p => p.Id == Types.PlayerIds[index]);

            buffer.AddBytes(data);
            buffer.GetInteger();
            var str = buffer.GetString();

            if (str.ToLower().StartsWith("/c"))
            {
                RelayChat(index, str.Substring(3));
            }
            if (str.ToLower().StartsWith(">>"))
            {
                var result = Transactions.AdminCommand(index, player, str.Substring(2).TrimStart());
                SendMessage(index, result, Notification);
                XFerLoad(index, 1);
            }
        }
Exemplo n.º 43
0
        private static void Handle_RequestUserAccountDataUpdate(int index, byte[] data)
        {
            PacketBuffer buffer = new PacketBuffer();

            buffer.WriteBytes(data);
            int    packetNum = buffer.ReadInteger();
            string msg       = buffer.ReadString();

            buffer.Dispose();

            //Json parse
            UserSession userSession = SqlConnection.InitialazeUserSession(msg);

            userSession.mainTeam[0] = SqlConnection.LoadUserChar(userSession.mainTeamNames[0], userSession);
            userSession.mainTeam[1] = SqlConnection.LoadUserChar(userSession.mainTeamNames[1], userSession);
            userSession.mainTeam[2] = SqlConnection.LoadUserChar(userSession.mainTeamNames[2], userSession);
            ServerTCP.Send_UpdateUserSessionData(index, JsonConvert.SerializeObject(userSession));

            ServerTCP.Send_UpdateUserImage(index, SqlConnection.GetUserImage(userSession.login));
        }
Exemplo n.º 44
0
    static void SpamMovePackets()
    {
        for (int i = 0; i < PacketCount; i++)
        {
            try
            {
                // Thread.Sleep(1);

                //PacketBuffer buffer = clientCore.clientSocket.CreatePacket(PacketTypes.Game);  //Header
                //buffer.StartWriting(true).WriteHeader((byte)GameHeader.Movement).WriteInt(player.TrainerAssetID).WriteVector3(i, 5, 5).WriteVector3Short(5, 4, 13);
                PacketBuffer buffer = clientCore.clientSocket.CreatePacket(PacketTypes.Special);  //Header
                buffer.StartWriting(true).WriteHeader((byte)SpecialRequest.SendChat).WriteString(i + "Packet");

                clientCore.clientSocket.SendPacket();
            }
            catch (Exception e)
            {
            }
        }
    }
Exemplo n.º 45
0
        public void ProcessClientPacket(PacketEvent packetEvent)
        {
            if (packetEvent.Id != 0x01)
            {
                return;
            }
            var str = packetEvent.Buffer.ReadString();

            if (str.StartsWith("."))
            {
                commandManager.HandleCommand(packetEvent, str);
                packetEvent.Cancelled = true;
                return;
            }
            var buf = new PacketBuffer();

            buf.WriteString(str);
            buf.Reset();
            packetEvent.Buffer = buf;
        }
Exemplo n.º 46
0
        /// <summary>
        /// Overridden to include the triangle count.
        /// </summary>
        /// <returns><c>true</c> on success.</returns>
        /// <param name="packet">Packet to write the message to.</param>
        public override bool WriteCreate(PacketBuffer packet)
        {
            if (!base.WriteCreate(packet))
            {
                return(false);
            }
            // Write number of vertices and indices.
            // Index support to come.
            uint count = (uint)_vertices.Length;

            packet.WriteBytes(BitConverter.GetBytes(count), true);
            count = (uint)_indices.Length;
            packet.WriteBytes(BitConverter.GetBytes(count), true);
            byte drawType = (byte)DrawType;

            packet.WriteBytes(new byte[] { drawType }, false);
            packet.WriteBytes(BitConverter.GetBytes(_drawWeight), true);

            return(true);
        }
Exemplo n.º 47
0
        private static void DownloadData(byte[] data)
        {
            var buffer = new PacketBuffer();

            buffer.AddBytes(data);
            buffer.GetInteger();
            GameLogic.PlayerIndex = buffer.GetInteger(); // Index on server side
            var suppress = buffer.GetInteger();
            var i        = GameLogic.PlayerIndex;

            Types.Player[i] = new User
            {
                Id          = buffer.GetString(),
                Name        = buffer.GetString(),
                X           = buffer.GetFloat(),
                Y           = buffer.GetFloat(),
                Rotation    = buffer.GetFloat(),
                Health      = buffer.GetInteger(),
                MaxHealth   = buffer.GetInteger(),
                Shield      = buffer.GetInteger(),
                MaxShield   = buffer.GetInteger(),
                Rank        = buffer.GetString(),
                Credits     = buffer.GetInteger(),
                Exp         = buffer.GetInteger(),
                Level       = buffer.GetInteger(),
                Weap1Charge = buffer.GetInteger(),
                Weap2Charge = buffer.GetInteger(),
                Weap3Charge = buffer.GetInteger(),
                Weap4Charge = buffer.GetInteger(),
                Weap5Charge = buffer.GetInteger(),
                Inventory   = buffer.GetList <Inventory>()
            };
            buffer.Dispose();
            if (suppress == 1)
            {
                return;
            }
            MenuManager.Clear(1);
            Globals.graphicsChange = Globals.Fullscreen;
            InterfaceGUI.AddChats(@"User data downloaded.", Color.DarkOliveGreen);
        }
Exemplo n.º 48
0
        public void PacketBufferByteTest()
        {
            var buffer = new PacketBuffer();
            buffer.WriteByte(1);
            buffer.WriteByte(0);
            buffer.WriteByte(0);
            buffer.WriteByte(5);

            buffer.BeginBufferIndex();

            if(buffer.ReadByte() != 1)
                throw new Exception("PacketBuffer error");

            if (buffer.ReadByte() != 0)
                throw new Exception("PacketBuffer error");

            if (buffer.ReadByte() != 0)
                throw new Exception("PacketBuffer error");

            if (buffer.ReadByte() != 5)
                throw new Exception("PacketBuffer error");
        }
Exemplo n.º 49
0
        public dynamic Decode(IChannel channel, PacketBuffer buffer)
        {
            buffer.BeginBufferIndex();
            var stream = new MemoryStream();
            while (true)
            {
                if (buffer.AvailableBytes() < 2)
                    return null;
                byte frameH = buffer.ReadByte();
                byte frameP = buffer.ReadByte();
                int len = frameP & 0x7F;
                if (len > 0x7D)
                {
                    if (buffer.AvailableBytes() < 2)
                        return null;

                    for (var i = 0; i < 2; i++)
                        len = (len << 8) + buffer.ReadByte();

                    if ((frameP & 0x7F) == 0x7F)
                    {
                        if (buffer.AvailableBytes() < 2)
                            return null;
                        for (var i = 0; i < 2; i++)
                            len = (len << 8) + buffer.ReadByte();
                    }
                }

                if (buffer.AvailableBytes() < 4 + len)
                    return null;

                byte[] key = (frameP & 0x80) == 0x80 ? buffer.ReadBytes(4) : null;

                byte[] data = null;
                if (key == null)
                {
                    data = buffer.ReadBytes(len);
                }
                else
                {
                    data = new byte[len];
                    for (int i = 0; i < len; i++)
                        data[i] = (byte) (buffer.ReadByte() ^ key[i%4]);
                }
                stream.Write(data, 0, len);

                if ((frameH & 0xF) == 8)
                {
                    buffer.EndBufferIndex();
                    return new ConnectionClose();
                }
                if ((frameH & 0xF) == 9)
                {
                    buffer.EndBufferIndex();
                    return new Ping();
                }
                if((frameH & 0xF) == 10)
                {
                    buffer.EndBufferIndex();
                    return new Pong();
                }

                if((frameH & 0x80) == 128)
                    break;
            }
            buffer.EndBufferIndex();
            return stream.ToArray();
        }
Exemplo n.º 50
0
        public void PacketBufferTest1()
        {
            PacketBuffer buffer = new PacketBuffer();
            buffer.Dispose();
            try
            {

                buffer.Write(1);
            }
            catch (Exception) { return; }
            throw new Exception("error");
        }
Exemplo n.º 51
0
        public PacketBuffer Encode(IChannel channel, dynamic message)
        {
            var response = message as Response;
            if (response == null)
                return null;

            var builder = new StringBuilder();
            builder.Append("HTTP/");
            builder.Append(response.Protocol);
            builder.Append(" ");
            builder.Append(response.Status);
            builder.Append(" ");
            builder.AppendLine(StatusDictionary[response.Status]);
            builder.AppendFormat("Content-Type: {0}\r\n", response.ContentType);
            builder.Append(response.GetHeader());

            MemoryStream content = null;
            if(response.GetContent() is StringBuilder)
                content = new MemoryStream(Encoding.UTF8.GetBytes(response.GetContent().ToString()));
            else
                content = (MemoryStream) response.GetContent();
            content.Position = 0;

            builder.AppendFormat("Content-Length: {0}\r\n\r\n", content.Length);

            var buffer = new PacketBuffer();

            buffer.WriteBytes(Encoding.UTF8.GetBytes(builder.ToString()));
            buffer.WriteStream(content);

            return buffer;
        }
Exemplo n.º 52
0
 private void LoadPostData(string contentType, PacketBuffer buffer, string name = null)
 {
     if (contentType == null)
     {
         string data = buffer.ReadString((int) buffer.AvailableBytes());
         if(name != null)
             _postData.Add(name, data);
     }
     else if (contentType == "application/x-www-form-urlencoded")
     {
         string stringData = buffer.ReadString((int) buffer.AvailableBytes());
         foreach (string q in stringData.Split('&'))
         {
             int valueStartPoint = q.IndexOf("=", System.StringComparison.Ordinal);
             if (valueStartPoint == -1 && q.Length > valueStartPoint + 1)
                 continue;
             _postData.Add(q.Substring(0, valueStartPoint), q.Substring(valueStartPoint + 1));
         }
     }
     else if (contentType.StartsWith("multipart/form-data;"))
     {
         byte[] p = System.Text.Encoding.UTF8.GetBytes(string.Format("\r\n--{0}", contentType.Substring(contentType.IndexOf("boundary=") + 9)));
         long len = 0;
         while ((len = buffer.FindBytes(p)) > -1)
         {
             var buf = new PacketBuffer();
             buf.WriteBytes(buffer.ReadBytes((int)len));
             buffer.ReadBytes(p.Length);
             buf.BeginBufferIndex();
             buf.ReadLine();
             var hDictionary = new Dictionary<string, string>();
             string h = "";
             while((h = buf.ReadLine()) != "")
             {
                 if (h == null)
                     break;
                 int valueStartIndex = h.IndexOf(": ", System.StringComparison.Ordinal);
                 if (valueStartIndex == -1)
                     continue;
                 string key = h.Substring(0, valueStartIndex).ToLower();
                 string value = h.Substring(valueStartIndex + 2, h.Length - valueStartIndex - 2);
                 hDictionary.Add(key, value);
             }
             if (hDictionary.Count != 0)
             {
                 string pname =
                     hDictionary["content-disposition"].Substring(
                         hDictionary["content-disposition"].IndexOf("name") + 6);
                 pname = pname.Substring(0, pname.Length - 1);
                 string type = null;
                 try
                 {
                     type = hDictionary["content-type"];
                 }
                 catch (Exception)
                 {
                 }
                 LoadPostData(type, buf, pname);
             }
             buf.Dispose();
         }
     }
     else if (name != null)
     {
         string tempName = Path.GetTempFileName();
         var stream = new FileStream(tempName, FileMode.OpenOrCreate, FileAccess.Write);
         byte[] data = new byte[1024];
         int len;
         while((len = buffer.Read(data, 0, 1024)) > 0)
             stream.Write(data, 0, len);
         stream.Close();
         ((Dictionary<string, string>)_postData["FILES"]).Add(name, tempName);
     }
 }
Exemplo n.º 53
0
 private bool GetHeaders(PacketBuffer reader)
 {
     string h;
     while (true)
     {
         h = reader.ReadLine();
         if (h == null)
             break;
         if (h == "")
             return true;
         SetHeader(h);
     }
     return false;
 }
Exemplo n.º 54
0
        public bool SetPostData(PacketBuffer buffer)
        {
            if (Convert.ToInt64(GetHeader("Content-Length")) > buffer.AvailableBytes() + 1)
                return false;
            var buf = buffer.GetStream() as MemoryStream;
            if(buf != null)
                _lowPostData = new MemoryStream(buf.GetBuffer(), (int)buf.Position, (int)(buf.Length - buf.Position));

            LoadPostData(GetHeader("Content-Type"), buffer);
            return true;
        }
Exemplo n.º 55
0
 public object Decode(IChannel channel, PacketBuffer buffer)
 {
     var index = buffer.FindBytes(new byte[] {10, 13});
     return index == -1 ? null : _encoding.GetString(buffer.ReadBytes((int)index));
 }
Exemplo n.º 56
0
 public dynamic Decode(IChannel channel, PacketBuffer buffer)
 {
     return _step.Decode(channel, buffer);
 }