public async UniTaskVoid HandleRequestMoveItemToStorage(RequestHandlerData requestHandler, RequestMoveItemToStorageMessage request, RequestProceedResultDelegate <ResponseMoveItemToStorageMessage> result) { #if UNITY_STANDALONE && !CLIENT_BUILD StorageId storageId = new StorageId(request.storageType, request.storageOwnerId); IPlayerCharacterData playerCharacter; if (!GameInstance.ServerUserHandlers.TryGetPlayerCharacter(requestHandler.ConnectionId, out playerCharacter)) { result.Invoke(AckResponseCode.Error, new ResponseMoveItemToStorageMessage() { message = UITextKeys.UI_ERROR_NOT_LOGGED_IN, }); return; } if (!GameInstance.ServerStorageHandlers.CanAccessStorage(playerCharacter, storageId)) { result.Invoke(AckResponseCode.Error, new ResponseMoveItemToStorageMessage() { message = UITextKeys.UI_ERROR_CANNOT_ACCESS_STORAGE, }); return; } Storage storage = GameInstance.ServerStorageHandlers.GetStorage(storageId, out _); MoveItemToStorageReq req = new MoveItemToStorageReq(); req.StorageType = request.storageType; req.StorageOwnerId = request.storageOwnerId; req.CharacterId = playerCharacter.Id; req.WeightLimit = storage.weightLimit; req.SlotLimit = storage.slotLimit; req.InventoryItemIndex = request.inventoryItemIndex; req.InventoryItemAmount = request.inventoryItemAmount; req.StorageItemIndex = request.storageItemIndex; MoveItemToStorageResp resp = await DbServiceClient.MoveItemToStorageAsync(req); UITextKeys message = (UITextKeys)resp.Error; if (message != UITextKeys.NONE) { result.Invoke(AckResponseCode.Error, new ResponseMoveItemToStorageMessage() { message = message, }); return; } playerCharacter.NonEquipItems = resp.InventoryItemItems; GameInstance.ServerStorageHandlers.SetStorageItems(storageId, resp.StorageCharacterItems); GameInstance.ServerStorageHandlers.NotifyStorageItemsUpdated(request.storageType, request.storageOwnerId); // Success result.Invoke(AckResponseCode.Success, new ResponseMoveItemToStorageMessage()); #endif }
public async UniTaskVoid HandleRequestMoveItemToStorage(RequestHandlerData requestHandler, RequestMoveItemToStorageMessage request, RequestProceedResultDelegate <ResponseMoveItemToStorageMessage> result) { #if UNITY_STANDALONE && !CLIENT_BUILD StorageId storageId = new StorageId(request.storageType, request.storageOwnerId); IPlayerCharacterData playerCharacter; if (!GameInstance.ServerUserHandlers.TryGetPlayerCharacter(requestHandler.ConnectionId, out playerCharacter)) { result.InvokeError(new ResponseMoveItemToStorageMessage() { message = UITextKeys.UI_ERROR_NOT_LOGGED_IN, }); return; } if (!storageUsers.Add(playerCharacter.Id)) { result.InvokeError(new ResponseMoveItemToStorageMessage() { message = UITextKeys.UI_ERROR_CONTENT_NOT_AVAILABLE, }); return; } if (!GameInstance.ServerStorageHandlers.CanAccessStorage(playerCharacter, storageId)) { storageUsers.Remove(playerCharacter.Id); result.InvokeError(new ResponseMoveItemToStorageMessage() { message = UITextKeys.UI_ERROR_CANNOT_ACCESS_STORAGE, }); return; } Storage storage = GameInstance.ServerStorageHandlers.GetStorage(storageId, out _); AsyncResponseData <MoveItemToStorageResp> resp = await DbServiceClient.MoveItemToStorageAsync(new MoveItemToStorageReq() { StorageType = request.storageType, StorageOwnerId = request.storageOwnerId, CharacterId = playerCharacter.Id, WeightLimit = storage.weightLimit, SlotLimit = storage.slotLimit, InventoryItemIndex = request.inventoryItemIndex, InventoryItemAmount = request.inventoryItemAmount, StorageItemIndex = request.storageItemIndex, Inventory = new List <CharacterItem>(playerCharacter.NonEquipItems), }); if (!resp.IsSuccess) { result.InvokeError(new ResponseMoveItemToStorageMessage() { message = UITextKeys.UI_ERROR_INTERNAL_SERVER_ERROR, }); return; } UITextKeys message = resp.Response.Error; if (message != UITextKeys.NONE) { storageUsers.Remove(playerCharacter.Id); result.InvokeError(new ResponseMoveItemToStorageMessage() { message = message, }); return; } playerCharacter.NonEquipItems = resp.Response.InventoryItemItems; GameInstance.ServerStorageHandlers.SetStorageItems(storageId, resp.Response.StorageCharacterItems); GameInstance.ServerStorageHandlers.NotifyStorageItemsUpdated(request.storageType, request.storageOwnerId); // Success storageUsers.Remove(playerCharacter.Id); result.InvokeSuccess(new ResponseMoveItemToStorageMessage()); #endif }