/// <summary> /// Use the payment system to award this account with this number of coins. /// </summary> /// <param name="serverStateMachine"></param> /// <param name="serverAccount"></param> /// <param name="totalCoins"></param> private void ProcessCoinPayment(ServerAccount serverAccount, int totalCoins, EscrowType escrowType, Guid sessionId) { NameValueCollection args = new NameValueCollection(); args.Add("userId", serverAccount.PaymentItemUserId); args.Add("amount", totalCoins.ToString()); args.Add("ipAddress", serverAccount.IpAddress); PaymentItemsProcessClientMessage clientMessage = new PaymentItemsProcessClientMessage(); PaymentCommand cmd = clientMessage.AddVirtualCoinForUser(args); mServerStateMachine.PaymentItemsManager.ProcessPaymentCommand(cmd, delegate(string response) { XmlDocument xmlResponse = new XmlDocument(); xmlResponse.LoadXml(response); //send message to client Message processCoinPaymentMessage = new Message(); List <object> processCoinPaymentMessageData = new List <object>(); processCoinPaymentMessageData.Add(escrowType); processCoinPaymentMessageData.Add(totalCoins); processCoinPaymentMessage.EscrowMessage(processCoinPaymentMessageData); processCoinPaymentMessage.Callback = (int)MessageSubType.ProcessEscrowTransaction; SendMessageToClient(processCoinPaymentMessage, sessionId); }); }
private void SetLevelComplete(Message message, Guid sessionId) { mLogger.Debug("SetLevelComplete: " + message.ToString()); if (message.Data.Count < 4) { mLogger.Error("Dropping Message (" + message + "), expected Data to be Count == 3, actual was " + message.Data.Count); return; } int totalXP = CheckType.TryAssignType <int>(message.Data[1]); int XPEarnedOnThisLevel = CheckType.TryAssignType <int>(message.Data[2]); bool leveledUp = CheckType.TryAssignType <bool>(message.Data[3]); ServerAccount serverAccount = mServerStateMachine.SessionManager.GetServerAccountFromSessionId(sessionId); // Save experience to the database FashionMinigameServiceAPI.SetGameData(serverAccount, GameDataKeys.PLAYER_EXPERIENCE_KEY, totalXP.ToString(), VerifySuccess); // Reward coins for experience int coinsEarned = Rewards.GetCoinsFromExperience(XPEarnedOnThisLevel); NameValueCollection args = new NameValueCollection(); args.Add("userId", mServerStateMachine.PaymentItemsManager.GetPaymentItemsUserId(sessionId)); args.Add("amount", coinsEarned.ToString()); args.Add("ipAddress", mServerStateMachine.ServerMessageProcessor.ServerReflector.GetClientIPAddress(sessionId)); PaymentItemsProcessClientMessage clientMessage = new PaymentItemsProcessClientMessage(); PaymentCommand cmd = clientMessage.AddVirtualCoinForUser(args); mServerStateMachine.PaymentItemsManager.ProcessPaymentCommand(cmd, delegate(string response) { XmlDocument xmlResponse = new XmlDocument(); xmlResponse.LoadXml(response); mLogger.Debug("SetLevelComplete success: " + response); XmlElement vcoinNode = (XmlElement)xmlResponse.SelectSingleNode("//accounts/account[@currencyName='VCOIN']"); // Convert to double, cast to int and then back to string to strip off decimal points string totalCoins = String.Empty; if (vcoinNode != null) { totalCoins = ((int)Double.Parse(vcoinNode.GetAttribute("balance"))).ToString(); } Hangout.Shared.Action resultMessage = delegate() { // Return a message to the user with the results of SetLevelComplete List <object> data = new List <object>(); data.Add(message.Data[0]); // callback id data.Add(coinsEarned.ToString()); data.Add(totalCoins); Message responseMessage = new Message(MessageType.FashionMinigame, data); SendMessageToClient(responseMessage, sessionId); }; }); // Award friends a fraction of earned coins for working in this show int friendEscrowCoins = Rewards.GetFriendCoins(XPEarnedOnThisLevel, serverAccount.EntourageSize); if (friendEscrowCoins > 0) { EscrowManager.GiveFashionMinigameHiredFriendsCoins(serverAccount, friendEscrowCoins); } if (leveledUp) { mEnergyManager.UserLeveledUp(serverAccount); } }