private async Task BeginBuyProducts(string hash) { Connecting = true; (bool res, string ip, string port) = await CustomIO.GetIpAndPort(); if (res == false) { // 一応ここでもチェックする await CustomDialog.ServerSettingLoadError(); PageStack.Push(page.GetType()); page.Frame.Navigate(typeof(ServerSettingPage), PageStack); Connecting = false; PasswordInputPanelVisibility = Visibility.Collapsed; return; } Communication tcp = new Communication(); var stat = await tcp.ConnectAndTest(ip, port); if (stat != Communication.TcpError.NoError) { await CustomDialog.ServerConnectError(); tcp.Disconnect(); Connecting = false; PasswordInputPanelVisibility = Visibility.Collapsed; return; } await tcp.SendMessageAsync(tcp.GetTcpCommand(Communication.TcpCommandNumber.CmdBuyProduct)); Communication.TcpStatus comStat; var products = CreateStack(); ProductInfo p = new ProductInfo("", 0); do { var resMsg = await tcp.ReceiveMessageAsync(); comStat = tcp.GetStatus(resMsg); switch (comStat) { case Communication.TcpStatus.StatRequestHash: await tcp.SendMessageAsync(hash); break; case Communication.TcpStatus.StatRequestBuyProductName: if (products.Count == 0) { await tcp.SendMessageAsync(tcp.GetTcpCommand(Communication.TcpCommandNumber.CmdClientFIN)); break; } p = products.Pop(); await tcp.SendMessageAsync(p.Name); break; case Communication.TcpStatus.StatRequestBuyProductAmount: if (p.Name == "") { await CustomDialog.UnknownError(); tcp.Disconnect(); Connecting = false; PasswordInputPanelVisibility = Visibility.Collapsed; } await tcp.SendMessageAsync(p.Amount.ToString()); if (products.Count == 0) { await tcp.SendMessageAsync(tcp.GetTcpCommand(Communication.TcpCommandNumber.CmdClientFIN)); } break; case Communication.TcpStatus.StatFIN: break; case Communication.TcpStatus.StatNoEnoughMoney: await CustomDialog.NoEnoughMoney(); tcp.Disconnect(); Connecting = false; PasswordInputPanelVisibility = Visibility.Collapsed; PageStack.Push(page.GetType()); page.Frame.Navigate(typeof(MoneyChargePage), PageStack); return; case Communication.TcpStatus.StatNoUser: await CustomDialog.NoUserError(); tcp.Disconnect(); Connecting = false; PasswordInputPanelVisibility = Visibility.Collapsed; return; default: await CustomDialog.UnknownError(); tcp.Disconnect(); Connecting = false; PasswordInputPanelVisibility = Visibility.Collapsed; return; } } while (comStat != Communication.TcpStatus.StatFIN); Connecting = false; PasswordInputPanelVisibility = Visibility.Collapsed; await CustomDialog.PurchaseComplete(); page.Frame.Navigate(typeof(MainPage)); }
private async Task BeginChargeMoney(string hash) { Connecting = true; (bool res, string ip, string port) = await CustomIO.GetIpAndPort(); if (res == false) { // 一応ここでもチェックする await CustomDialog.ServerSettingLoadError(); PageStack.Push(page.GetType()); page.Frame.Navigate(typeof(ServerSettingPage), PageStack); amountOfCharge = 0; Connecting = false; PasswordInputPanelVisibility = Visibility.Collapsed; return; } Communication tcp = new Communication(); var stat = await tcp.ConnectAndTest(ip, port); if (stat != Communication.TcpError.NoError) { await CustomDialog.ServerConnectError(); tcp.Disconnect(); amountOfCharge = 0; Connecting = false; PasswordInputPanelVisibility = Visibility.Collapsed; return; } await tcp.SendMessageAsync(tcp.GetTcpCommand(Communication.TcpCommandNumber.CmdChargeMoney)); Communication.TcpStatus comStat; do { var resMsg = await tcp.ReceiveMessageAsync(); comStat = tcp.GetStatus(resMsg); switch (comStat) { case Communication.TcpStatus.StatRequestHash: await tcp.SendMessageAsync(hash); break; case Communication.TcpStatus.StatRequestAmountOfMoney: await tcp.SendMessageAsync(amountOfCharge.ToString()); break; case Communication.TcpStatus.StatFIN: break; case Communication.TcpStatus.StatNoUser: await CustomDialog.NoUserError(); tcp.Disconnect(); amountOfCharge = 0; Connecting = false; PasswordInputPanelVisibility = Visibility.Collapsed; return; default: await CustomDialog.UnknownError(); tcp.Disconnect(); amountOfCharge = 0; Connecting = false; PasswordInputPanelVisibility = Visibility.Collapsed; return; } } while (comStat != Communication.TcpStatus.StatFIN); amountOfCharge = 0; Connecting = false; PasswordInputPanelVisibility = Visibility.Collapsed; await CustomDialog.ChargeComplete(); }