コード例 #1
0
ファイル: Server.cs プロジェクト: ndelta0/Obsidian
 internal void BroadcastPacketWithoutQueue(ISerializablePacket packet, params int[] excluded)
 {
     foreach (var(_, player) in this.OnlinePlayers.Where(x => !excluded.Contains(x.Value.EntityId)))
     {
         player.client.SendPacket(packet);
     }
 }
コード例 #2
0
        public void SendMessage(short opCode, ISerializablePacket packet, ResponseCallback responseCallback,
                                int timeoutSecs)
        {
            var message = MessageHelper.Create(opCode, packet.ToBytes());

            SendMessage(message, responseCallback, timeoutSecs, EDeliveryMethod.Reliable);
        }
コード例 #3
0
 protected override void ReceiveCallback(IAsyncResult ar)
 {
     try
     {
         byte[] buffer    = (byte[])ar.AsyncState;
         int    bytesRead = ClientSocket.EndReceive(ar);
         if (bytesRead > 0)
         {
             TPacket packet = ISerializablePacket.FromBytes <TPacket>(buffer);
             Log.Debug($"Received: {packet}");
             OnMessageReceivedEvent(packet);
         }
     }
     catch (MessagePackSerializationException e)
     {
         Log.Warn(e, $"Could not deserialize MessagePack ({typeof(TPacket).Name}) from received bytes");
     }
     catch (Exception e)
     {
         Log.Error(e, "Error in data receiving");
     }
     finally
     {
         byte[] buffer = new byte[BufferSize];
         ClientSocket.BeginReceive(buffer, 0, BufferSize, SocketFlags.None, ReceiveCallback, buffer);
     }
 }
コード例 #4
0
        protected override void AcceptCallback(IAsyncResult ar)
        {
            // Get the socket that handles the client request.
            Socket listener = (Socket)ar.AsyncState;

            if (listener != null)
            {
                Socket handler = listener.EndAccept(ar);

                Log.Trace("Connection accepted");
                // Create the state object.
                Log.Trace("Waiting for Hello packet...");
                // FIXME: Add error handling when client doesn't send a hello packet
                handler.Receive(_buffer);
                TPacket receivedPacket = ISerializablePacket.FromBytes <TPacket>(_buffer);
                Log.Debug($"Received: {receivedPacket}");
                Log.Trace("Adding Connection");
                string portAlias = receivedPacket.GetKey();
                ConnectionRegisteredEvent?.Invoke((portAlias, _clientWorkerFactory.GetClientWorker(portAlias, handler)));
                listener.BeginAccept(AcceptCallback, listener);
            }
            else
            {
                Log.Fatal("listener is null in AcceptCallback");
            }
        }
コード例 #5
0
ファイル: Server.cs プロジェクト: ndelta0/Obsidian
 internal async Task BroadcastPacketAsync(ISerializablePacket packet, params int[] excluded)
 {
     foreach (var(_, player) in this.OnlinePlayers.Where(x => !excluded.Contains(x.Value.EntityId)))
     {
         await player.client.QueuePacketAsync(packet);
     }
 }
コード例 #6
0
        private ISerializablePacket CreateJunk(long Opcode)
        {
            ISerializablePacket Junk = new ISerializablePacket();

            Junk.Opcode = Opcode;
            return(Junk);
        }
コード例 #7
0
        public void SendMessage(short opCode, ISerializablePacket packet, ResponseCallback responseCallback,
                                int timeoutSecs)
        {
            var msg = MessageHelper.Create(opCode, packet.ToBytes());

            Peer.SendMessage(msg, responseCallback, timeoutSecs);
        }
コード例 #8
0
        private uint GetPacketId(ISerializablePacket packet)
        {
            var typeInfo = packet.GetType().GetTypeInfo();
            var attr     = typeInfo.GetCustomAttribute <PacketAttribute>();

            return(attr.PacketId);
        }
コード例 #9
0
 public void Send(short opcode, ISerializablePacket packet)
 {
     using (PooledNetWriter w = NetWriterPool.GetWriter())
     {
         MessageHelper.CreateAndFinalize(w, opcode, packet);
         var segment = w.ToArraySegment();
         if (NetLogFilter.messageDiagnostics)
         {
             NetDiagnostics.OnSend(opcode, segment.Count, connectedPeers.Values.Count);
         }
         if (!isSimulated)
         {
             foreach (var peer in connectedPeers.Values)
             {
                 peer.SendMessage(segment, UDPTransport.Source.Server);
             }
         }
         else
         {
             foreach (var peer in connectedPeers.Values)
             {
                 peer.SendSimulatedMessage(segment, UDPTransport.Source.Server);
             }
         }
     }
 }
コード例 #10
0
        public void Send(Peer peer, short opcode, ISerializablePacket packet)
        {
            if (peer == null || !peer.IsConnected)
            {
                return;
            }

            using (PooledNetWriter w = NetWriterPool.GetWriter())
            {
                MessageHelper.CreateAndFinalize(w, opcode, packet);
                var segment = w.ToArraySegment();
                if (NetLogFilter.messageDiagnostics)
                {
                    NetDiagnostics.OnSend(opcode, segment.Count, 1);
                }
                if (!isSimulated)
                {
                    peer.SendMessage(segment, UDPTransport.Source.Server);
                }
                else
                {
                    peer.SendSimulatedMessage(segment, UDPTransport.Source.Server);
                }
            }
        }
コード例 #11
0
        public override void OnRead(RiftClient From)
        {
            Log.Success("CreationCache", "Requesting Creation cache request : " + From.Rm.RpcInfo.Description());

            if (From.Acct == null || From.Rm == null)
            {
                return;
            }

            CacheTemplate[] Tmps = From.Rm.GetObject <WorldMgr>().GetTemplates();
            foreach (CacheTemplate Tmp in Tmps)
            {
                From.SendSerialized(WorldMgr.BuildCache(Tmp.CacheID, Tmp.CacheType, Tmp));
            }

            CacheData[] Dts = From.Rm.GetObject <WorldMgr>().GetDatas();
            foreach (CacheData Tmp in Dts)
            {
                From.SendSerialized(WorldMgr.BuildCache(Tmp.CacheID, Tmp.CacheType, Tmp));
            }

            ISerializablePacket Packet = new ISerializablePacket();

            Packet.Opcode = (long)Opcodes.LobbyCharacterCreationCacheResponse;
            From.SendSerialized(Packet);
        }
コード例 #12
0
        protected override void AcceptCallback(IAsyncResult ar)
        {
            // Get the socket that handles the client request.
            Socket listener = (Socket)ar.AsyncState;

            if (listener != null)
            {
                Socket handler = listener.EndAccept(ar);

                Log.Trace("Connection accepted");
                Log.Trace("Waiting for a packet...");
                handler.Receive(_buffer);
                TRequestPacket receivedRequestPacket = ISerializablePacket.FromBytes <TRequestPacket>(_buffer);
                Log.Trace($"Received: {receivedRequestPacket}");
                TResponsePacket responsePacket = OnRequestReceivedEvent(receivedRequestPacket);
                handler.Send(responsePacket.ToBytes());
                handler.Shutdown(SocketShutdown.Both);
                handler.Close();

                listener.BeginAccept(AcceptCallback, listener);
            }
            else
            {
                Log.Fatal("listener is null in AcceptCallback");
            }
        }
コード例 #13
0
        public override void OnRead(RiftClient From)
        {
            ISerializablePacket Packet = new ISerializablePacket();

            Packet.Opcode = (long)Opcodes.LobbyCharacterCreationCacheResponse;
            From.SendSerialized(Packet);
        }
コード例 #14
0
ファイル: ArrayBit.cs プロジェクト: Easun/RiftEMU
 public override void ApplyToFieldInfo(FieldInfo Info, ISerializablePacket Packet, Type Field)
 {
     if (Field.Equals(typeof(byte[])))
         Info.SetValue(Packet, val);
     else if(Field.Equals(typeof(string)))
         Info.SetValue(Packet,Marshal.ConvertToString((byte[])val));
 }
コード例 #15
0
 public static void Write(this EndianBinaryWriter writer, ISerializablePacket packet)
 {
     packet.ToBinaryWriter(writer);
     //var bytes = packet != null ? packet.ToBytes() : new byte[0];
     //writer.Write(bytes.Length);
     //writer.Write(bytes);
 }
コード例 #16
0
        // 0x294 = STATS_DEFINITION ?
        protected void PrepareStatsInfo(Character Char, ref ISerializablePacket pck)
        {
            // CHAR_CLASS, CRASH CLIENT ...
            //pck.AddField(2, EPacketFieldType.Unsigned7BitEncoded, (long)Char.Class);

            Items_Template[] Templates = CharacterMgr.Instance.GetEquipedItems(Char.Id);

            Dictionary <long, ISerializablePacket> CharDesc = new Dictionary <long, ISerializablePacket>();

            foreach (Items_Template Template in Templates)
            {
                Model_Info model = CharacterMgr.Instance.GetItemModel(Template.ModelEntry, Char.Race, Char.Sex);

                CharacterDesc Desc = new CharacterDesc();

                Desc.AddField(4, EPacketFieldType.Raw4Bytes, (uint)model.Field_4);

                if (model.Field_5 != 0)
                {
                    Desc.AddField(5, EPacketFieldType.Raw4Bytes, model.Field_5);
                }

                if (model.Field_6 != 0)
                {
                    Desc.AddField(6, EPacketFieldType.Raw4Bytes, model.Field_6);
                }

                if (Template.Slot == 10)
                {
                    Desc.AddField(7, EPacketFieldType.Unsigned7BitEncoded, (long)model.Field_7);
                }
                else
                {
                    Desc.AddField(7, EPacketFieldType.Raw4Bytes, (uint)model.Field_7);
                }

                Desc.Field8 = new CharacterInfoCache();
                Desc.Field8.CacheIdentifier = (uint)model.CacheID;

                CharDesc.Add((long)Template.Slot, Desc);
            }

            Model_Info HairEntry = CharacterMgr.Instance.GetModelForCacheID(Char.HairModelID);

            if (HairEntry != null)
            {
                CharacterDesc DescHair = new CharacterDesc();

                DescHair.AddField(4, EPacketFieldType.Raw4Bytes, (uint)HairEntry.Field_4);
                DescHair.AddField(7, EPacketFieldType.Raw4Bytes, (uint)HairEntry.Field_7);

                DescHair.Field8 = new CharacterInfoCache();
                DescHair.Field8.CacheIdentifier = (uint)HairEntry.CacheID;

                CharDesc.Add((long)46, DescHair);
            }

            pck.AddField(11, EPacketFieldType.Dictionary, CharDesc);
        }
コード例 #17
0
ファイル: WorldMgr.cs プロジェクト: dsstest/RiftEMU
 public static CacheUpdate BuildCache(uint CacheID, long CacheType, ISerializablePacket Packet)
 {
     CacheUpdate Data = new CacheUpdate();
     Data.CacheType = CacheType;
     Data.CacheID = CacheID;
     Data.CacheDatas = new List<ISerializablePacket>() { Packet };
     return Data;
 }
コード例 #18
0
        public void SetCharacterInformation(Character Char)
        {
            ISerializablePacket CharacterInformation = GetPacketOnList((long)Opcodes.WorldCharacterInformation);

            CharacterInformation.AddField(12, EPacketFieldType.ByteArray, Char.CharacterName);
            CharacterInformation.AddField(54, EPacketFieldType.Unsigned7BitEncoded, Program.Rm.RiftId);
            CharacterInformation.AddField(56, EPacketFieldType.Packet, Char.Info.CustomPacket);
        }
コード例 #19
0
ファイル: WorldCanConnect.cs プロジェクト: dsstest/SiennaCore
        public override void OnRead(RiftClient From)
        {
            ISerializablePacket Packet = new ISerializablePacket();

            Packet.Opcode = 0x1E9A;
            Packet.AddField(1, EPacketFieldType.True, false);
            From.SendSerialized(Packet);
        }
コード例 #20
0
ファイル: WorldEntityUpdate.cs プロジェクト: dsstest/RiftEMU
        public void AddPacketToList(long Opcode)
        {
            RemovePacketFromList(Opcode);

            ISerializablePacket Packet = new ISerializablePacket();
            Packet.Opcode = Opcode;
            Field1.Add(Packet);
        }
コード例 #21
0
 public async Task SendPacket(ISerializablePacket packet)
 {
     if (_sinks.Any())
     {
         var preparedPacket = await _packetPackager.PreparePacket(packet);
         await SendPacket(preparedPacket.packetId, preparedPacket.data.AsImmutable());
     }
 }
コード例 #22
0
        public ISerializable SerializePacket(string interfaceName, ISerializablePacket packet)
        {
            Increment();

            WriteStream.ShiftRight((byte)FieldType.PacketType);
            _endianBinaryWriter.WritePacket(interfaceName, packet);
            return(this);
        }
コード例 #23
0
        public void AddPacketToList(long Opcode)
        {
            RemovePacketFromList(Opcode);

            ISerializablePacket Packet = new ISerializablePacket();

            Packet.Opcode = Opcode;
            Field1.Add(Packet);
        }
コード例 #24
0
        protected void SetItemInBagSlot(ref Dictionary <long, ISerializablePacket> IInvDic, long Slot, long ItemGUID)
        {
            ISerializablePacket ItemInfo = new ISerializablePacket();

            ItemInfo.Opcode = 0x012E;
            ItemInfo.AddField(0, EPacketFieldType.Raw8Bytes, ItemGUID);

            IInvDic.Add(Slot, ItemInfo);
        }
コード例 #25
0
        public override void OnRead(RiftClient From)
        {
            Log.Info("WorldCanConnect", "Connecting...");
            ISerializablePacket Packet = new ISerializablePacket();

            Packet.Opcode = 0x1E9A;
            Packet.AddField(1, EPacketFieldType.True, false);
            From.SendSerialized(Packet);
        }
コード例 #26
0
 public (uint packetId, byte[] data) PreparePacket(ISerializablePacket packet)
 {
     using (var stream = _memoryStreamMgr.GetStream())
     {
         using (var bw = new BinaryWriter(stream, Encoding.UTF8, true))
             packet.Serialize(bw);
         return(GetPacketId(packet), stream.ToArray());
     }
 }
コード例 #27
0
ファイル: Raw8Bit.cs プロジェクト: Easun/RiftEMU
 public override void ApplyToFieldInfo(FieldInfo Info, ISerializablePacket Packet, Type Field)
 {
     if (Field.Equals(typeof(byte[])))
         Info.SetValue(Packet, (byte[])val);
     else if (Field.Equals(typeof(long)))
     {
         //Array.Reverse((val as byte[]));
         Info.SetValue(Packet, BitConverter.ToInt64((byte[])val, 0));
     }
 }
コード例 #28
0
 public Task SendPacket(ISerializablePacket packet)
 {
     using (var stream = new MemoryStream())
         using (var bw = new BinaryWriter(stream))
         {
             packet.Serialize(bw);
             bw.Flush();
             return(SendPacket(GetPacketId(packet), stream.ToArray()));
         }
 }
コード例 #29
0
        protected void UpdateClientPosition(Character Char, ref ISerializablePacket pck)
        {
            WorldPositionExtra WorldPos = pck as WorldPositionExtra;

            WorldPos.MapId    = 676;
            WorldPos.Position = new List <float> {
                1113.03967f, 920.1114f, 1444.58533f
            };                                                                           // X,Y,Z
            WorldPos.MapName = "guardian_map";
        }
コード例 #30
0
        public Task SendPacket(ISerializablePacket packet, IPlayer except)
        {
            IPacketSink exceptSink = null;

            if (except != null)
            {
                _trackingPlayers.TryGetValue(except, out exceptSink);
            }
            return(_broadcastPacketSink.SendPacket(packet, exceptSink));
        }
コード例 #31
0
    public void SendPacket(ISerializablePacket packet, IPEndPoint iPEndPoint, uint objectId, bool reliable = false)
    {
        if (NetworkManager.Instance.isServer)
        {
            byte[] bytes = Serialize(packet, objectId);

            Debug.Log($"Enviando " + bytes.Length + " Bytes.");

            NetworkManager.Instance.Send(bytes, iPEndPoint);
        }
    }
コード例 #32
0
 public Task SendPacket(ISerializablePacket packet)
 {
     if (Sink != null)
     {
         return(Sink.SendPacket(packet));
     }
     else
     {
         return(BroadcastSink.SendPacket(packet, _except));
     }
 }
コード例 #33
0
        public bool Build(Character Char)
        {
            if (Char == null)
            {
                return(false);
            }

            if (Field1 == null)
            {
                Field1 = new List <ISerializablePacket>();
            }

            GUID   = Char.CharacterId;
            Field4 = 1001;

            ISerializablePacket UnkPck = new ISerializablePacket();

            UnkPck.Opcode = 0x0259;
            UnkPck.AddField(3, EPacketFieldType.Raw4Bytes, (float)50.0f);

            SetCharacterInformation(Char);
            SetCharacterStats(Char);
            SetPosition(676, "guardian_map", new List <float> {
                1113.03967f, 920.1114f, 1444.58533f
            });

            AddPacketToList(0x026B);
            AddPacketToList(0x025A);
            AddPacketToList(0x026E);
            AddPacketToList(0x0272);
            AddPacketToList(0x0289);
            AddPacketToList(0x028A);

            // Another Social Junk ?
            ISerializablePacket UnkPck5 = new ISerializablePacket();

            UnkPck5.Opcode = 0x028F;
            ISerializablePacket UnkPck5Pck = new ISerializablePacket();

            UnkPck5Pck.Opcode = 0x0354;
            UnkPck5Pck.AddField(0, EPacketFieldType.Unsigned7BitEncoded, (long)2);
            UnkPck5.AddField(4, EPacketFieldType.Packet, UnkPck5Pck);
            Field1.Add(UnkPck5);

            AddPacketToList(0x033A);
            AddPacketToList(0x08A2);
            AddPacketToList(0x08FC);
            AddPacketToList(0x0F41);
            AddPacketToList(0x0F45);


            return(true);
        }
コード例 #34
0
        public override void OnRead(RiftClient From)
        {
            if(From.Acct == null || From.Rm == null)
                return;

            string Name = From.Rm.GetObject<CharactersMgr>().GetRandomName();

            ISerializablePacket Packet = new ISerializablePacket();
            Packet.Opcode = (int)Opcodes.LobbyCharacterRandomNameResponse;
            Packet.AddField(1, EPacketFieldType.ByteArray, Name);
            From.SendSerialized(Packet);
        }
コード例 #35
0
    public void SendPacket(ISerializablePacket packet, uint objectId)
    {
        byte[] bytes = Serialize(packet, objectId);

        if (NetworkManager.Instance.isServer)
        {
            NetworkManager.Instance.Broadcast(bytes);
        }
        else
        {
            NetworkManager.Instance.SendToServer(bytes);
        }
    }
コード例 #36
0
ファイル: DicBit.cs プロジェクト: vangan123/rift-sunrise
        public override void ApplyToFieldInfo(FieldInfo Info, ISerializablePacket Packet, Type Field)
        {
            if (Field.Equals(typeof(Dictionary<long, ISerializablePacket>)))
            {
                Dictionary<long, ISerializablePacket> Dic = new Dictionary<long, ISerializablePacket>();

                foreach (KeyValuePair<ISerializableField, ISerializableField> KP in (val as Dictionary<ISerializableField, ISerializableField>))
                {
                    Dic.Add((long)KP.Key.GetLong(), KP.Value.GetPacket());
                }

                Info.SetValue(Packet, Dic);
            }
        }
コード例 #37
0
ファイル: Raw4Bit.cs プロジェクト: dsstest/RiftEMU
        public override void ApplyToFieldInfo(FieldInfo Info, ISerializablePacket Packet, Type Field)
        {
            byte[] Data = val as byte[];
            object Result = Data;

            if(Field.Equals(typeof(UInt32)))
                Result = Marshal.ConvertToUInt32(Data[3], Data[2], Data[1], Data[0]);
            else if(Field.Equals(typeof(Int32)))
                Result = BitConverter.ToInt32(Data, 0);
            else if(Field.Equals(typeof(long)))
                Result = (long)BitConverter.ToUInt32(Data,0);

            Info.SetValue(Packet, Result);
        }
コード例 #38
0
ファイル: WorldEntityUpdate.cs プロジェクト: dsstest/RiftEMU
        public bool Build(Character Char)
        {
            if (Char == null)
                return false;

            if (Field1 == null)
                Field1 = new List<ISerializablePacket>();

            GUID = Char.CharacterId;
            Field4 = 1001;

            ISerializablePacket UnkPck = new ISerializablePacket();
            UnkPck.Opcode = 0x0259;
            UnkPck.AddField(3, EPacketFieldType.Raw4Bytes, (float)50.0f);

            SetCharacterInformation(Char);
            SetCharacterStats(Char);
            SetPosition(676, "guardian_map", new List<float> { 1113.03967f, 920.1114f, 1444.58533f });

            AddPacketToList(0x026B);
            AddPacketToList(0x025A);
            AddPacketToList(0x026E);
            AddPacketToList(0x0272);
            AddPacketToList(0x0289);
            AddPacketToList(0x028A);

            // Another Social Junk ?
            ISerializablePacket UnkPck5 = new ISerializablePacket();
            UnkPck5.Opcode = 0x028F;
            ISerializablePacket UnkPck5Pck = new ISerializablePacket();
            UnkPck5Pck.Opcode = 0x0354;
            UnkPck5Pck.AddField(0, EPacketFieldType.Unsigned7BitEncoded, (long)2);
            UnkPck5.AddField(4, EPacketFieldType.Packet, UnkPck5Pck);
            Field1.Add(UnkPck5);

            AddPacketToList(0x033A);
            AddPacketToList(0x08A2);
            AddPacketToList(0x08FC);
            AddPacketToList(0x0F41);
            AddPacketToList(0x0F45);

            return true;
        }
コード例 #39
0
        public static byte[] FieldToBytes(ISerializablePacket Packet, string FieldName)
        {
            FieldInfo Info = Packet.GetType().GetField(FieldName);
            ISerializableFieldAttribute[] FieldsAttr = Info.GetCustomAttributes(typeof(ISerializableFieldAttribute), true) as ISerializableFieldAttribute[];
            if (FieldsAttr != null && FieldsAttr.Length > 0)
            {
                ISerializableField Field = Activator.CreateInstance(FieldsAttr[0].GetSerializableType()) as ISerializableField;
                Field.Index = FieldsAttr[0].Index;
                Field.val = Info.GetValue(Packet);
                Field.PacketType = PacketProcessor.GetFieldType(Field);

                PacketOutStream Str = new PacketOutStream();
                Field.Serialize(ref Str,true);
                byte[] Result =  Str.ToArray();
                return Result;
            }
            else
                return null;
        }
コード例 #40
0
        public override void OnRead(RiftClient From)
        {
            Log.Success("CreationCache", "Requesting Creation cache request : " + From.Rm.RpcInfo.Description());

            if (From.Acct == null || From.Rm == null)
                return;

            CacheTemplate[] Tmps = From.Rm.GetObject<WorldMgr>().GetTemplates();
            foreach (CacheTemplate Tmp in Tmps)
                From.SendSerialized(WorldMgr.BuildCache(Tmp.CacheID, Tmp.CacheType, Tmp));

            CacheData[] Dts = From.Rm.GetObject<WorldMgr>().GetDatas();
            foreach (CacheData Tmp in Dts)
                From.SendSerialized(WorldMgr.BuildCache(Tmp.CacheID, Tmp.CacheType, Tmp));

            ISerializablePacket Packet = new ISerializablePacket();
            Packet.Opcode = (long)Opcodes.LobbyCharacterCreationCacheResponse;
            From.SendSerialized(Packet);
        }
コード例 #41
0
ファイル: PacketProcessor.cs プロジェクト: Easun/RiftEMU
        public static void BytesToField(ISerializablePacket Packet, byte[] Bytes, string FieldName)
        {
            if (Bytes == null || Bytes.Length <= 0)
                return;

            FieldInfo Info = Packet.GetType().GetField(FieldName);
            ISerializableFieldAttribute[] FieldsAttr = Info.GetCustomAttributes(typeof(ISerializableFieldAttribute), true) as ISerializableFieldAttribute[];
            if (FieldsAttr != null && FieldsAttr.Length > 0)
            {
                ISerializableField Field = Activator.CreateInstance(FieldsAttr[0].GetSerializableType()) as ISerializableField;
                Field.Index = FieldsAttr[0].Index;
                Field.val = Info.GetValue(Packet);
                Field.PacketType = PacketProcessor.GetFieldType(Field);

                PacketInStream Str = new PacketInStream(Bytes, Bytes.Length);
                Field.Deserialize(ref Str);
                Field.ApplyToFieldInfo(Info, Packet, Info.FieldType);
            }
            else
                Info.SetValue(Packet, null);
        }
コード例 #42
0
ファイル: ListBit.cs プロジェクト: vangan123/rift-sunrise
        public override void ApplyToFieldInfo(FieldInfo Info, ISerializablePacket Packet, Type Field)
        {
            if (Field.Equals(typeof(List<uint>)))
            {
                List<uint> Luint = new List<uint>();
                foreach (ISerializableField Value in (List<ISerializableField>)val)
                    Luint.Add(Value.GetUint());
                Info.SetValue(Packet, Luint);
            }
            else if(Field.Equals(typeof(List<ISerializablePacket>)))
            {
                List<ISerializablePacket> Packets = new List<ISerializablePacket>();
                foreach (ISerializableField Value in (List<ISerializableField>)val)
                    Packets.Add(Value.GetPacket());
                Info.SetValue(Packet, Packets);
            }
            else if (Field.Equals(typeof(ISerializablePacket[])))
            {
                List<ISerializablePacket> Packets = new List<ISerializablePacket>();
                foreach (ISerializableField Value in (List<ISerializableField>)val)
                    Packets.Add(Value.GetPacket());
                Info.SetValue(Packet, Packets.ToArray());
            }
            else if (Field.Equals(typeof(List<bool>)))
            {
                List<bool> Bools = new List<bool>();
                foreach (ISerializableField Value in (List<ISerializableField>)val)
                    Bools.Add((bool)Value.val);
                Info.SetValue(Packet, Bools);
            }
            else if (Field.Equals(typeof(List<float>)))
            {
                List<float> floats = new List<float>();
                foreach (ISerializableField Value in (List<ISerializableField>)val)
                    floats.Add(Value.GetFloat());

                Info.SetValue(Packet, floats);
            }
        }
コード例 #43
0
        public override void OnRead(RiftClient From)
        {
            if (From.Acct == null || From.Rm == null)
                return;

            CharactersMgr Mgr = From.Rm.GetObject<CharactersMgr>();
            if (Mgr.GetCharactersCount(From.Acct.Id) >= 6)
            {
                From.Disconnect();
                return;
            }

            ISerializablePacket Response = new ISerializablePacket();
            Response.Opcode = (int)Opcodes.LobbyCharacterCreateResponse;
            if (Mgr.CharacterExist(Name))
                Response.AddField(0, EPacketFieldType.Unsigned7BitEncoded, (long)6);
            else
            {
                Response.AddField(0, EPacketFieldType.Unsigned7BitEncoded, (long)6);

                Character Char = new Character();
                Char.AccountId = From.Acct.Id;
                Char.CharacterName = Name;
                Char.Email = From.Acct.Email;

                Char.Info = new CharacterInfo();
                Char.Info.Class = Class;
                Char.Info.CustomPacket = this.CharacterCustom;
                Char.Info.Level = Mgr.StartingLevel;
                Char.Info.Race = Race;
                Char.Info.Sex = Sex;

                Mgr.AddCharacter(Char);
            }

            From.SendSerialized(Response);
        }
コード例 #44
0
ファイル: PacketProcessor.cs プロジェクト: Easun/RiftEMU
        public static PacketOutStream WritePacket(ISerializablePacket Packet)
        {
            PacketOutStream Stream = new PacketOutStream();

            WritePacket(ref Stream, Packet,true,true,true);

            return Stream;
        }
コード例 #45
0
ファイル: PacketProcessor.cs プロジェクト: Easun/RiftEMU
        public static bool WritePacket(ref PacketOutStream Stream,ISerializablePacket Packet, bool WithSize = true , bool WithTerminator = true, bool WithOpcode = true)
        {
            if (Packet == null)
                return false;

            lock (Packet)
            {
                Packet.ConvertToField();

                PacketOutStream Data = new PacketOutStream();

                if (WithOpcode)
                    Data.WriteEncoded7Bit(Packet.Opcode);

                foreach (ISerializableField Field in Packet.GetFields().Values)
                    WriteField(ref Data, Field);

                if (WithTerminator && Packet.Opcode != (int)Opcodes.ProtocolHandshakeCompression)
                    WriteField(ref Data, null, 0, (int)EPacketFieldType.Terminator);

                if (WithSize)
                    Stream.WriteEncoded7Bit(Data.Length);

                Stream.Write(Data.ToArray());

                Packet.Fields.Clear();
            }

            return true;
        }
コード例 #46
0
        public override void OnRead(RiftClient From)
        {
            Log.Success("Authentification", "Email = " + Email + " SessionTicket = " + SessionTicket);

            long Char = Program.Maps.GetConnecting(Email);

            if (Char == 0)
            {
                Log.Error("Authentification", "Not authentified email : " + Email);
                From.Disconnect();
                return;
            }

            From.Acct = Program.Accounts.GetAccountByUsername(Email);

            if (From.Acct == null)
            {
                Log.Error("Authentification", "Not valid account :" + Email);
                From.Disconnect();
                return;
            }

            From.Character = Program.Characters.GetCharacter(Char);

            if (From.Acct == null)
            {
                Log.Error("Authentification", "Not valid character :" + Char);
                From.Disconnect();
                return;
            }

            WorldAuthenticationResponse Rp = new WorldAuthenticationResponse();
            Rp.AddField(0, EPacketFieldType.True, (bool)true);
            From.SendSerialized(Rp);

            CacheTemplate[] Tmps = Program.World.GetTemplates();
            foreach (CacheTemplate Tmp in Tmps)
                From.SendSerialized(WorldMgr.BuildCache(Tmp.CacheID, Tmp.CacheType, Tmp));

            CacheData[] Dts = Program.World.GetDatas();
            foreach (CacheData Tmp in Dts)
                From.SendSerialized(WorldMgr.BuildCache(Tmp.CacheID, Tmp.CacheType, Tmp));

            WorldCacheUpdated Updated = new WorldCacheUpdated();
            Updated.GUID = Char;
            From.SendSerialized(Updated);

            /////////////////////////////////////////////////////////////////////
            // Send Inventory
            /////////////////////////////////////////////////////////////////////

            WorldEntityUpdate Update = new WorldEntityUpdate();
            Update.AddField(6, EPacketFieldType.Raw8Bytes, (long)Char);
            From.SendSerialized(Update);

            //////////////////////////////////////////////////////////////////////

            ISerializablePacket Packet1 = new ISerializablePacket();
            Packet1.Opcode = 0x03F6;
            Packet1.AddField(0, EPacketFieldType.Raw4Bytes, new byte[4] { 0x20, 0xB1, 0x59, 0x41 });
            Packet1.AddField(1, EPacketFieldType.ByteArray, new byte[] { 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
                                                                             00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
                                                                             00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 });

            byte[] UnkGuid = new byte[8] { 0xCB, 0x34, 0x3D, 0x94, 0x23, 0x04, 0xCC, 0x01 };
            Packet1.AddField(2, EPacketFieldType.Raw8Bytes, UnkGuid);
            From.SendSerialized(Packet1);

            ISerializablePacket Packet2 = new ISerializablePacket();
            Packet2.Opcode = 0x02E9;
            Packet2.AddField(0, EPacketFieldType.List, new List<long>() { 3605869292 });
            From.SendSerialized(Packet2);

            ISerializablePacket Packet3 = new ISerializablePacket();
            Packet3.Opcode = 0x2D7F;
            From.SendSerialized(Packet3);

            /********************************************/

            WorldZoneInfo ZoneInfo = new WorldZoneInfo();
            ZoneInfo.ZoneFileName = "Mathosia1";
            ZoneInfo.Description = Program.World.GetText(290412351);
            ZoneInfo.DisplayName = Program.World.GetText(1647389394);
            From.SendSerialized(ZoneInfo);

            WorldStartingPosition StartPosition = new WorldStartingPosition();
            StartPosition.MapName = "guardian_map";
            From.SendSerialized(StartPosition);

            WorldPositionExtra ExtraPosition = new WorldPositionExtra();
            ExtraPosition.MapName = "guardian_map";

            ISerializablePacket Extra = new ISerializablePacket();
            Extra.Opcode = (long)Opcodes.WorldStartingPositionExtra;
            Extra.AddField(0, EPacketFieldType.Packet, ExtraPosition);
            From.SendSerialized(Extra);
        }
コード例 #47
0
ファイル: ISerializableField.cs プロジェクト: dsstest/RiftEMU
 public abstract void ApplyToFieldInfo(FieldInfo Info,ISerializablePacket Packet, Type Field);
コード例 #48
0
ファイル: PacketBit.cs プロジェクト: vangan123/rift-sunrise
 public override void ApplyToFieldInfo(FieldInfo Info, ISerializablePacket Packet, Type Field)
 {
     if (Field.IsSubclassOf(typeof(ISerializablePacket)))
         Info.SetValue(Packet, val);
 }
コード例 #49
0
 public override void OnRead(RiftClient From)
 {
     Log.Info("WorldCanConnect", "Connecting...");
     ISerializablePacket Packet = new ISerializablePacket();
     Packet.Opcode = 0x1E9A;
     Packet.AddField(1, EPacketFieldType.True, false);
     From.SendSerialized(Packet);
 }
コード例 #50
0
ファイル: WorldMapLoaded.cs プロジェクト: Easun/RiftEMU
        public override void OnRead(RiftClient From)
        {
            Log.Info("WorldMapLoaded", "Map loaded for : " + From.Character.CharacterName);
            long CharacterId = From.Character.CharacterId;

            {
                WorldTemplateUpdate Update = new WorldTemplateUpdate();
                Update.GUID = CharacterId;
                Update.Field1 = new byte[]
                {
                    0xEB,0x04,0x4F,0x1F,0x02,0x5F,0x17,0x07,0x90,0x01,0x07,0xAE,0x05,0x9E,0x02,0x00,0x9F,
                    0x12,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0x12,0x24,
                    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,
                    0x05,0xD8,0x05,0x07,0xC1,0x1E,0x57,0xF5,0x05,0x07,0x07
                };
                From.SendSerialized(Update);
            }

            {
                ISerializablePacket Packet = new ISerializablePacket();
                Packet.Opcode = 0x1973;
                From.SendSerialized(Packet);
            }

            {
                ISerializablePacket Packet = new ISerializablePacket();
                Packet.Opcode = 0x1E7F;
                Packet.AddField(0, EPacketFieldType.False, false);
                Packet.AddField(1, EPacketFieldType.False, false);
                Packet.AddField(2, EPacketFieldType.False, false);

                Packet.AddField(3, EPacketFieldType.List, new List<ISerializablePacket>());

                Packet.AddField(4, EPacketFieldType.Unsigned7BitEncoded, (long)3);
                Packet.AddField(5, EPacketFieldType.Unsigned7BitEncoded, (long)30);

                Packet.AddField(6, EPacketFieldType.False, false);

                Packet.AddField(7, EPacketFieldType.List, new List<long>());
                Packet.AddField(8, EPacketFieldType.List, new List<long>());
                From.SendSerialized(Packet);
            }

            {
                WorldChannelJoinned Channel = new WorldChannelJoinned();
                Channel.ChannelName = "Niveau 1-9";
                Channel.CharacterName = From.Character.CharacterName;
                Channel.Field2 = 5;
                From.SendSerialized(Channel);
            }

            {
                WorldChannelJoinned Channel = new WorldChannelJoinned();
                Channel.ChannelName = "Mathosia";
                Channel.CharacterName = From.Character.CharacterName;
                Channel.Field2 = 2;
                From.SendSerialized(Channel);
            }

            {
                WorldTemplateUpdate Update = new WorldTemplateUpdate();
                Update.GUID = CharacterId;
                Update.Field1 = new byte[]
                {
                    0xEB,0x04,0x4F,0x1F,0x02,0x5F,0x17,0x07,0xE7,0x02,0xBB,0x99,0x01,0x4E,0xA0,0x1F,0x1A,0x02,0x07,0x56,0xA0,0x1F,0x1A,0x02,0x07,0x58,0xA0,0x1F,0x1A,0x02,0x07,0x5E,0xA0,0x1F,0x19,0x07,0x60,0xA0,0x1F,0x19,0x07,0x66,0xA0,0x1F,0x19,0x07,0x70,0xA0,0x1F,0x1A,0x02,0x07,0xEA,0xBA,0xC9,0x65,0xA0,0x1F,0x19,0x07,0xAC,0xBA,0xEE,0x78,0xA0,0x1F,0x1A,0x02,0x07,0xA0,0x8C,0x88,0x9C,0x01,0xA0,0x1F,0x19,0x07,0x90,0xD6,0xBA,0x88,0x02,0xA0,0x1F,0x1A,0x02,0x07,0xD8,0xD2,0x84,0xAA,0x02,0xA0,0x1F,0x1A,0x02,0x07,0x9E,0x83,0x90,0x87,0x03,0xA0,0x1F,0x1A,0x02,0x07,0x8C,0xE7,0xF5,0x8E,0x03,0xA0,0x1F,0x1A,0x02,0x07,0x86,0xDE,0x9D,0xE9,0x03,0xA0,0x1F,0x19,0x07,0xF6,0xD4,0xCE,0xF4,0x03,0xA0,0x1F,0x1A,0x02,0x07,0xE2,0xA8,0xF2,0x8A,0x04,0xA0,0x1F,0x1A,0x02,0x07,0xD2,0x92,0xCB,0xB3,0x05,0xA0,0x1F,0x19,0x07,0xE0,0xFD,0xF3,0x92,0x06,0xA0,0x1F,0x1A,0x02,0x07,0xE6,0xB7,0xF4,0x94,0x06,0xA0,0x1F,0x1A,0x02,0x07,0xAE,0xBA,0xFD,0xC6,0x06,0xA0,0x1F,0x1A,0x02,0x07,0xB6,0xA5,0xF2,0x8C,0x07,0xA0,0x1F,0x19,0x07,0xC2,0xE4,0xA7,0x9A,0x07,0xA0,0x1F,0x1A,0x02,0x07,0xDE,0x9A,0xE4,0xCA,0x07,0xA0,0x1F,0x19,0x07,0xEC,0xF9,0xF1,0xDF,0x07,0xA0,0x1F,0x1A,0x02,0x07,0xA4,0xDE,0xC0,0xB1,0x08,0xA0,0x1F,0x1A,0x02,0x07,0xE8,0xCE,0xFA,0x81,0x09,0xA0,0x1F,0x1A,0x02,0x07,0x94,0xB1,0xA8,0xBB,0x09,0xA0,0x1F,0x1A,0x02,0x07,0x8A,0x95,0x8E,0xC8,0x09,0xA0,0x1F,0x1A,0x02,0x07,0xD8,0xF7,0xF3,0xFD,0x09,0xA0,0x1F,0x1A,0x02,0x07,0xFA,0xF1,0xE0,0xBA,0x0A,0xA0,0x1F,0x1A,0x02,0x07,0xCE,0xDA,0xE7,0xEE,0x0B,0xA0,0x1F,0x19,0x07,0xF6,0xA2,0x94,0xC1,0x0C,0xA0,0x1F,0x1A,0x02,0x07,0xE2,0xD0,0xE6,0xD0,0x0C,0xA0,0x1F,0x1A,0x02,0x07,0x88,0xFD,0xC2,0xD6,0x0D,0xA0,0x1F,0x1A,0x02,0x07,0x8C,0xA8,0xAA,0xF8,0x0D,0xA0,0x1F,0x19,0x07,0x88,0xBF,0x82,0xFE,0x0E,0xA0,0x1F,0x1A,0x02,0x07,0xBA,0xC4,0xB6,0x90,0x0F,0xA0,0x1F,0x1A,0x02,0x07,0xE7,0x03,0xBB,0x05,0x0A,0xAF,0x02,0x01,0x07,0x90,0x01,0x07,0x94,0x05,0xE7,0x05,0xBB,0x21,0x02,0xBF,0x1B,0x24,0xDF,0x92,0xC3,0x45,0x2C,0xC8,0x23,0xCF,0x7D,0x3C,0x82,0x9B,0xBB,0x22,0x97,0x04,0x90,0x1C,0x04,0x9B,0xEC,0x3E,0x73,0x07,0x07,0x04,0xBF,0x1B,0x24,0xEB,0x36,0xDE,0x44,0x2C,0x33,0x45,0x7A,0x77,0x32,0x15,0x3C,0x82,0x9B,0xBB,0x22,0x97,0x04,0x90,0x1C,0x04,0x5F,0x2D,0x02,0x4F,0x07,0x07,0x0A,0xBF,0x1B,0x24,0x87,0xD4,0x3F,0x5B,0x3A,0x02,0x97,0x04,0x90,0x1C,0x04,0x1E,0x3B,0xD5,0x2D,0x07,0x07,0x0E,0xBF,0x1B,0x24,0x62,0x00,0xDB,0x11,0x3C,0x6F,0x69,0x28,0x59,0x97,0x04,0x90,0x1C,0x04,0x7F,0xC2,0xC0,0x7C,0x07,0x07,0x10,0xBF,0x1B,0x24,0x9A,0x41,0xDC,0x01,0x3C,0x6F,0x69,0x28,0x59,0x97,0x04,0x90,0x1C,0x04,0x5E,0x8B,0x6F,0x26,0x07,0x07,0x12,0xBF,0x1B,0x24,0x9E,0xFC,0x62,0x77,0x3C,0x82,0x9B,0xBB,0x22,0x97,0x04,0x90,0x1C,0x04,0xB7,0x94,0xB3,0x29,0x07,0x07,0x16,0xBF,0x1B,0x24,0x48,0xF1,0xD4,0x0D,0x32,0x14,0x3C,0x6F,0x69,0x28,0x59,0x97,0x04,0x90,0x1C,0x04,0x8A,0x09,0x42,0x17,0x07,0x07,0x2E,0xBF,0x1B,0x24,0xE6,0x82,0x84,0x33,0x3C,0xB3,0xCD,0x6F,0x6A,0x97,0x04,0x90,0x1C,0x04,0x53,0x58,0x26,0x30,0x07,0x07,0x9F,0x06,0x57,0xA9,0x0E,0x02,0x03,0x2A,0xE8,0x07,0x41,0x07,0xDF,0x06,0x57,0x94,0x0E,0x07,0xD7,0x07,0xC2,0x05,0x12,0x05,0xDF,0x05,0x93,0x07,0x06,0xC6,0x01,0x14,0x14,0x1A,0x14,0x12,0x00,0x14,0x14,0x14,0x14,0x14,0x02,0x16,0x1A,0x00,0x00,0x00,0x00,0x8C,0x02,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0xCC,0x0B,0xD0,0x0F,0xC8,0x01,0x14,0x04,0x00,0x00,0x14,0x00,0x00,0x00,0xC8,0x01,0xC8,0x01,0x00,0x00,0x06,0x00,0xC8,0x01,0x00,0x00,0x00,0x00,0x00,0xC8,0x01,0x00,0x00,0x00,0x14,0x00,0x14,0x00,0x00,0xD0,0x0F,0x00,0x00,0x00,0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB4,0x01,0x00,0x00,0x00,0xC8,0x01,0xC8,0x01,0xC8,0x01,0xC8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC8,0x01,0x00,0x00,0x00,0xDF,0x06,0x93,0x07,0x06,0xC6,0x01,0x14,0x14,0x1A,0x14,0x12,0x00,0x14,0x14,0x14,0x14,0x14,0x02,0x16,0x1A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0xCC,0x0B,0xD0,0x0F,0xC8,0x01,0x14,0x04,0x00,0x00,0x14,0x00,0x00,0x00,0xC8,0x01,0xC8,0x01,0x00,0x00,0x06,0x00,0xC8,0x01,0x00,0x00,0x00,0x00,0x00,0xC8,0x01,0x00,0x00,0x00,0x14,0x00,0x14,0x00,0x00,0xD0,0x0F,0x00,0x00,0x00,0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB4,0x01,0x00,0x00,0x00,0xC8,0x01,0xC8,0x01,0xC8,0x01,0xC8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC8,0x01,0x00,0x00,0x00,0x07,0xDA,0x01,0x0F,0xE4,0x01,0x82,0x86,0x19,0x66,0x07,0xAE,0x05,0x97,0x04,0xF4,0x05,0x0C,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x07,0x9F,0x1E,0x97,0x02,0xB6,0x0E,0x01,0xDF,0x01,0xD7,0x01,0x90,0x1C,0x07,0x90,0x1C,0x07,0x90,0x1C,0x07,0x07,0xB6,0x0E,0xDF,0x01,0xD7,0x01,0x90,0x1C,0x07,0x90,0x1C,0x07,0x90,0x1C,0x07,0x07,0xB6,0x0E,0xDF,0x01,0xD7,0x01,0x90,0x1C,0x07,0x90,0x1C,0x07,0x90,0x1C,0x07,0x07,0xB6,0x0E,0xDF,0x01,0xD7,0x01,0x90,0x1C,0x07,0x90,0x1C,0x07,0x90,0x1C,0x07,0x07,0x07,0xC1,0x1E,0x57,0xF5,0x05,0x0F,0x1F,0x0A,0x01,0x5F,0x0B,0x84,0x9A,0xCC,0xE1,0x0C,0x07,0x4F,0x1F,0x0A,0x01,0x5F,0x0B,0x1E,0x07,0x07,0x9F,0x07,0x2B,0x06,0x08,0x18,0x04,0x02,0x07
                };
                From.SendSerialized(Update);
            }

            // Character Information
            {
                PacketInStream Entity = new PacketInStream(Program.BuildPlayer, Program.BuildPlayer.Length);
                WorldEntityUpdate Update = PacketProcessor.ReadPacket(ref Entity) as WorldEntityUpdate;
                if(Update.Build(From.Character))
                    From.SendSerialized(Update);
            }

            WorldServerMOTD Motd = new WorldServerMOTD();
            Motd.Text = "Welcome to Strawberry-Pr0jcts RiftEMU for patch 1.2";
            From.SendSerialized(Motd);
        }
コード例 #51
0
ファイル: RiftClient.cs プロジェクト: dsstest/RiftEMU
        public void SendSerialized(ISerializablePacket Packet)
        {
            PacketOutStream Out = PacketProcessor.WritePacket(Packet);

            byte[] ToSend = Out.ToArray();
            SendTCP(ToSend);
            Out.Dispose();
        }