Пример #1
0
        private void HandleReceived_Connection(NecConnection connection, NecPacket packet)
        {
            if (!_connectionHandlers.ContainsKey(packet.id))
            {
                _Logger.LogUnknownIncomingPacket(connection, packet, _serverType);
                return;
            }

            IConnectionHandler connectionHandler = _connectionHandlers[packet.id];

            if (connectionHandler.expectedSize != NO_EXPECTED_SIZE && packet.data.Size < connectionHandler.expectedSize)
            {
                _Logger.Error(connection,
                              $"[{_serverType}] Ignoring Packed (Id:{packet.id}) is smaller ({packet.data.Size}) than expected ({connectionHandler.expectedSize})");
                return;
            }

            _Logger.LogIncomingPacket(connection, packet, _serverType);
            packet.data.SetPositionStart();
            try
            {
                connectionHandler.Handle(connection, packet);
            }
            catch (Exception ex)
            {
                _Logger.Exception(connection, ex);
            }
        }
        private void HandleReceived(ITcpSocket socket, byte[] data)
        {
            if (!socket.IsAlive)
            {
                return;
            }

            NecClient client;

            lock (_lock)
            {
                if (!_clients.ContainsKey(socket))
                {
                    _logger.Error(socket, $"[{_identity}] Client does not exist in lookup");
                    return;
                }

                client = _clients[socket];
            }

            List <NecPacket> packets = client.Receive(data);

            foreach (NecPacket packet in packets)
            {
                if (_handlers.ContainsKey(packet.Id))
                {
                    IHandler handler = _handlers[packet.Id];
                    if (handler.ExpectedSize != NoExpectedSize && packet.Data.Size < handler.ExpectedSize)
                    {
                        _logger.Error(client,
                                      $"[{_identity}] Ignoring Packed (Id:{packet.Id}) is smaller ({packet.Data.Size}) than expected ({handler.ExpectedSize})");
                        continue;
                    }

                    _logger.LogIncomingPacket(client, packet, _identity);
                    packet.Data.SetPositionStart();
                    try
                    {
                        handler.Handle(client, packet);
                    }
                    catch (Exception ex)
                    {
                        _logger.Exception(client, ex);
                    }
                }
                else
                {
                    _logger.LogUnknownIncomingPacket(client, packet, _identity);
                }
            }
        }
Пример #3
0
        public List <NecPacket> Receive(byte[] data)
        {
            List <NecPacket> packets;

            try
            {
                packets = PacketFactory.Read(data, this);
            }
            catch (Exception ex)
            {
                _logger.Exception(this, ex);
                packets = new List <NecPacket>();
            }

            return(packets);
        }
        public override void Handle(NecClient client, NecPacket packet)
        {
            ItemZoneType zoneType    = (ItemZoneType)packet.data.ReadInt32();
            byte         container   = packet.data.ReadByte();
            int          itemsToSort = packet.data.ReadInt32();

            _Logger.Debug($"zoneType [{zoneType}] container [{container}] itemCount [{itemsToSort}]");

            short[] fromSlots  = new short[itemsToSort];
            short[] toSlots    = new short[itemsToSort];
            short[] quantities = new short[itemsToSort];
            for (int i = 0; i < itemsToSort; i++)
            {
                fromSlots[i]  = packet.data.ReadInt16();
                toSlots[i]    = packet.data.ReadInt16();
                quantities[i] = packet.data.ReadInt16();

                _Logger.Debug($"fromSlot short [{fromSlots[i]}] toSlot short [{toSlots[i]}] amount [{quantities[i]}]");
            }


            ItemService itemService = new ItemService(client.character);
            int         error       = 0;

            try
            {
                for (int i = 0; i < itemsToSort; i++)
                {
                    ItemLocation fromLoc  = new ItemLocation(zoneType, container, fromSlots[i]);
                    ItemLocation toLoc    = new ItemLocation(zoneType, container, toSlots[i]);
                    byte         quantity = (byte)quantities[i];

                    MoveResult            moveResult = itemService.Move(fromLoc, toLoc, quantity);
                    List <PacketResponse> responses  = itemService.GetMoveResponses(client, moveResult);
                    router.Send(client, responses);
                }
            }
            catch (ItemException e)
            {
                error = (int)e.type;
            }
            catch (Exception e1)
            {
                error = (int)ItemExceptionType.Generic;
                _Logger.Exception(client, e1);
            }

            IBuffer res = BufferProvider.Provide();

            res.WriteInt32(error);
            router.Send(client, (ushort)AreaPacketId.recv_item_sort_r, res, ServerType.Area);
        }
 protected override void Exception(Exception ex)
 {
     _Logger.Exception(ex);
 }