public override void Handle(NecClient client, NecPacket packet)
        {
            ItemZoneType zone = (ItemZoneType)packet.data.ReadByte();
            byte         bag  = packet.data.ReadByte();
            short        slot = packet.data.ReadInt16();
            //9 bytes left TODO investigate, probably one is identify price which is irrelevant, check price server side

            ItemLocation location    = new ItemLocation(zone, bag, slot);
            ItemService  itemService = new ItemService(client.character);
            ItemInstance identifiedItem;
            int          error = 0;

            try
            {
                identifiedItem = itemService.GetIdentifiedItem(location);
                RecvItemInstance recvItemInstance = new RecvItemInstance(client, identifiedItem);
                router.Send(recvItemInstance);

                identifiedItem.currentDurability = identifiedItem.maximumDurability;
                RecvItemUpdateDurability recvItemUpdateDurability = new RecvItemUpdateDurability(client, identifiedItem);
                router.Send(recvItemUpdateDurability);
            }
            catch (ItemException e)
            {
                error = (int)e.type;
            }

            RecvShopIdentify recvShopIdentify = new RecvShopIdentify(client, error);

            router.Send(recvShopIdentify);
        }
        public override void Handle(NecClient client, NecPacket packet)
        {
            List<ItemLocation> itemLocations = new List<ItemLocation>();
            int repairCount = packet.data.ReadInt32();
            for (int i = 0; i < repairCount; i++)
            {
                ItemZoneType zone = (ItemZoneType)packet.data.ReadByte();
                byte bag = packet.data.ReadByte();
                short slot = packet.data.ReadInt16();

                ItemLocation location = new ItemLocation(zone, bag, slot);
                itemLocations.Add(location);
            }

            ulong repairFee = packet.data.ReadUInt64();

            ItemService itemService = new ItemService(client.character);
            int error = 0;
            try
            {
                ulong currentGold = itemService.SubtractGold(repairFee); //TODO ignore the "repair fee" and check server side
                RecvSelfMoneyNotify recvSelfMoneyNotify = new RecvSelfMoneyNotify(client, currentGold);
                router.Send(recvSelfMoneyNotify);

                List<ItemInstance> repairedItems = itemService.Repair(itemLocations);
                foreach (ItemInstance repairedItem in repairedItems)
                {
                    repairedItem.currentDurability = repairedItem.maximumDurability;
                    RecvItemUpdateDurability recvItemUpdateDurability = new RecvItemUpdateDurability(client, repairedItem);
                    router.Send(recvItemUpdateDurability);
                }
            }
            catch (ItemException e)
            {
                error = (int)e.type;
            }

            RecvShopRepair recvShopRepair = new RecvShopRepair(client, error);
            router.Send(recvShopRepair);
        }