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); } } }
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); }