public static void CommandHandler(string command, string json, Socket socket = null) { switch (command) { case string a when a.Contains("GetServers"): GetServersService getServers = new GetServersService(); getServers.GetServers(socket, command); break; case string b when b.Contains("Login"): LoginService loginService = new LoginService(); loginService.LoginAsync(socket, command, json); break; case string b when b.Contains("GetInventory"): GetInventoryService getInventory = new GetInventoryService(); getInventory.InventoryAsync(socket, command, json, false); break; case string b when b.Contains("GetEquipmentInventory"): GetInventoryService getEquipmentInventory = new GetInventoryService(); getEquipmentInventory.InventoryAsync(socket, command, json, true); break; case string b when b.Contains("WearCommand"): WearCommandService wearCommandService = new WearCommandService(); wearCommandService.WearCommand(socket, command, json); break; } }
private async Task <string> WearCommandResult(string userData, Socket socket) { var itemRequestResult = JsonConvert.DeserializeObject <ItemRequestResultModel>(userData); var collection = DbConnect.db_link.GetCollection <BsonDocument>("characters"); var builder = Builders <BsonDocument> .Filter; var filter = builder.Eq("_id", ObjectId.Parse(itemRequestResult.characterId)); var character = await collection.Find(filter).FirstOrDefaultAsync(); collection = DbConnect.db_link.GetCollection <BsonDocument>("characterinventoryitemschemas"); filter = builder.Eq("_id", ObjectId.Parse(itemRequestResult.itemId)) & builder.Eq("characterId", itemRequestResult.characterId); // шмотка действительно есть ли у персонажа var itemFromPlayer = await collection.Find(filter).FirstOrDefaultAsync(); var parsedJsonItemFromPlayer = DbConnect.JsonParser(itemFromPlayer, false); var parsedJsonCharacter = DbConnect.JsonParser(character, true); var item = JsonConvert.DeserializeObject <ItemModel>(parsedJsonItemFromPlayer); var baseCharacter = JsonConvert.DeserializeObject <BaseCharacterModel>(parsedJsonCharacter); // если в бд есть запись if (itemFromPlayer != null) { if (item.baseItem.itemLvl <= baseCharacter.characterLvl) { if (item.baseItem.characterClassId == baseCharacter.characterClassId) { // TODO переделать под запрос с 45 строкой filter = builder.Eq("itemEquipmentPlace", item.baseItem.itemType) & builder.Eq("characterId", baseCharacter._id); var itemEquiped = await collection.Find(filter).FirstOrDefaultAsync(); if (itemEquiped != null) { var updateEquipedItem = Builders <BsonDocument> .Update.Unset("itemEquipmentPlace"); var resultUpdateEquipedItem = await collection.UpdateOneAsync(filter, updateEquipedItem); } var updateItemFromPlayer = Builders <BsonDocument> .Update.Set("itemEquipmentPlace", item.baseItem.itemType); var resultUpdateItemFromPlayer = await collection.UpdateOneAsync(filter, updateItemFromPlayer); GetInventoryService getInventory = new GetInventoryService(); //должны отдать новый слепок героя return(await getInventory.InventoryResult("{\"_id\" : \"" + baseCharacter._id + "\"}", false)); } else { return("{\"result\":\"ERROR\",\"description\":\"#ItemWearErrorClass\"}"); } } else { return("{\"result\":\"ERROR\",\"description\":\"#ItemWearErrorLevel\"}"); } } else { return("{\"result\":\"ERROR\",\"description\":\"#InvalidData\"}"); } }