コード例 #1
0
        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));
        }
コード例 #2
0
        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();
        }