Пример #1
0
        public void PushPopTest()
        {
            var stack = new PageStack();

            Assert.That(stack.Count, Is.EqualTo(0));

            stack.Push(new Page {
                Name = "Page1", Data = null
            });
            Assert.That(stack.Count, Is.EqualTo(1));
            Assert.That(stack.Peek().Name, Is.EqualTo("Page1"));

            stack.Push(new Page {
                Name = "Page2", Data = null
            });
            Assert.That(stack.Count, Is.EqualTo(2));
            Assert.That(stack.Peek().Name, Is.EqualTo("Page2"));

            var page2 = stack.Pop();

            Assert.That(page2.Name, Is.EqualTo("Page2"));
            Assert.That(stack.Count, Is.EqualTo(1));
            Assert.That(stack.Peek().Name, Is.EqualTo("Page1"));

            var page1 = stack.Pop();

            Assert.That(page1.Name, Is.EqualTo("Page1"));
            Assert.That(stack.Count, Is.EqualTo(0));
        }
Пример #2
0
    public static Page Forward(string pageName, object param = null, Admission admision = null)
    {
        if (AdmissionManager.busing)
        {
            return(null);
        }
        Debug.Log("Navigate to: " + pageName);
        var oldPage = PageStack.Find(pageName);

        if (oldPage != null)
        {
            throw new Exception("page: " + pageName + " already in stack, can't navigate, try use BackTo");
        }
        var fromPage = PageStack.Peek();
        var page     = TakeOrCreatePage(pageName);

        page.param = param;
        page.OnParamChanged();
        PageStack.Push(page);
        RepositionMask();
        if (admision != null)
        {
            AdmissionManager.Play(admision, fromPage, page);
        }
        return(page);
    }
Пример #3
0
        public State Reduce(State state, StateAction action)
        {
            if (!(action.Reducer is PageInitReducer))
            {
                return(state);
            }

            var definitionKey = PageConst.StateDefinitionKey;
            var stackKey      = PageConst.StateStackKey;

            var definition = action.GetValue <PageDefinition>();

            if (state.Get(stackKey).IsNull() || state.Get(definitionKey).IsNull())
            {
                var pageStack = new PageStack();
                pageStack.Push(new Page {
                    Name = definition.RootPageName, Data = null
                });

                state.Set(definitionKey, new Any(definition));
                state.Set(stackKey, new Any(pageStack));

                // load permanent scenes
                PageReducerUtility.ChangeScenes(state, definition.PermanentScenes, true);
                state.NotifyValue(SceneConst.StateKey);
            }

            return(state);
        }
Пример #4
0
        private async void CheckServerSettingFile()
        {
            (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);
                return;
            }
        }
Пример #5
0
        private static void NextButton_Callback(Direction direction)
        {
            var current = PageStack.Peek();

            // Check if "next page" happens to be a non existing page.
            // Then prevent from displaying the next page.
            if (current is NoPage)
            {
                return;
            }

            current.Closing(direction); // Close current displayed page.

            var next = current.Next;

            PageStack.Push(next);       // Store next page.
            ShowPage(next, direction);  // Show next page.
        }
Пример #6
0
        public bool Navigate(UserControl page)
        {
            // TODO for better performance => create page (GetPage) after CallOnNavigatedFrom() call (performance). Problem: page in lambda not availalbe then

            var lastPage = CurrentPage;

            PageStack.Push(page);

            if (lastPage != null)
            {
                return(CallOnNavigatedFrom(lastPage, page));
            }
            else
            {
                SetPage(page);
                CallOnNavigatedTo(page);
                return(false);
            }
        }
Пример #7
0
 private void ShowPage(DocumentationPage page)
 {
     LastPage = page.Name;
     PageStack.Push(page);
 }
Пример #8
0
 private void MoveServerSettingPage()
 {
     PageStack.Push(page.GetType());
     page.Frame.Navigate(typeof(ServerSettingPage), PageStack);
 }
Пример #9
0
 private void MoveProductSettingPage()
 {
     PageStack.Push(page.GetType());
     page.Frame.Navigate(typeof(ProductSettingPage), PageStack);
 }
Пример #10
0
        private async void Register(object parameter)
        {
            Registering      = true;
            ResultVisibility = Visibility.Collapsed;
            var passwordBox = parameter as PasswordBox;

            switch (CheckInputData(Email, passwordBox.Password))
            {
            case CheckInputDataResult.PasswordTooShort:
                await CustomDialog.UserRegisterPasswordLengthError();

                Registering = false;
                return;

            case CheckInputDataResult.EmailTooShort:
            case CheckInputDataResult.EmailTooLong:
                await CustomDialog.UserRegisterEmailLengthError();

                Registering = false;
                return;
            }

            (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);
                Registering = false;
                return;
            }

            Communication tcp  = new Communication();
            var           stat = await tcp.ConnectAndTest(ip, port);

            if (stat != Communication.TcpError.NoError)
            {
                await CustomDialog.ServerConnectError();

                tcp.Disconnect();
                Registering = false;
                return;
            }

            var hash = CalcHash.Sha256(passwordBox.Password);
            await tcp.SendMessageAsync(tcp.GetTcpCommand(Communication.TcpCommandNumber.CmdAddUser));

            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.StatRequestEmail:
                    await tcp.SendMessageAsync(Email);

                    break;

                case Communication.TcpStatus.StatFIN:
                    break;

                case Communication.TcpStatus.StatHashConflict:
                    await CustomDialog.UserRegisterHashConflictError();

                    tcp.Disconnect();
                    Registering = false;
                    return;

                default:
                    await CustomDialog.UnknownError();

                    tcp.Disconnect();
                    Registering = false;
                    return;
                }
            } while (comStat != Communication.TcpStatus.StatFIN);

            ResultVisibility     = Visibility.Visible;
            passwordBox.Password = "";
            Email = "";
            await CustomDialog.UserRegisterComplete();

            tcp.Disconnect();
            Registering = false;
        }
Пример #11
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));
        }
Пример #12
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();
        }
Пример #13
0
        public void ReduceTest()
        {
            var reducer = new PagePopReducer();
            var state   = new State();

            state.SetValue <PageStack>(PageConst.StateStackKey, new PageStack());
            state.SetValue <PageDefinition>(PageConst.StateDefinitionKey, new PageDefinition
            {
                PageScenes = new[]
                {
                    new PageScene
                    {
                        Name   = "Page1",
                        Scenes = new[]
                        {
                            "Scene1",
                            "Scene2"
                        },
                    },
                    new PageScene
                    {
                        Name   = "Page2",
                        Scenes = new[]
                        {
                            "Scene1",
                            "Scene3"
                        },
                    }
                }
            });
            state.SetValue <IDictionary <string, bool> >(SceneConst.StateKey, new Dictionary <string, bool>()
            {
                { "Scene1", true },
                { "Scene2", false },
                { "Scene3", false },
            });

            {
                var pageStack = new PageStack();
                pageStack.Push(new Page {
                    Name = "Page1", Data = null
                });
                pageStack.Push(new Page {
                    Name = "Page2", Data = null
                });
                state.SetValue <PageStack>(PageConst.StateStackKey, pageStack);
            }

            // pop1
            {
                var action = new StateAction(reducer, "page", new Any());
                state = reducer.Reduce(state, action);

                var stack = state.GetValue <PageStack>(PageConst.StateStackKey);
                Assert.That(stack.Count, Is.EqualTo(1));
                Assert.That(stack.Peek().Name, Is.EqualTo("Page1"));

                var sceneMap = state.GetValue <IDictionary <string, bool> >(SceneConst.StateKey);
                Assert.That(sceneMap.Count, Is.EqualTo(3));
                Assert.That(sceneMap["Scene1"], Is.True);
                Assert.That(sceneMap["Scene2"], Is.True);
                Assert.That(sceneMap["Scene3"], Is.False);
            }

            // pop is failed if stack has only an element
            {
                var action = new StateAction(reducer, "page", new Any());
                state = reducer.Reduce(state, action);

                var stack = state.GetValue <PageStack>(PageConst.StateStackKey);
                Assert.That(stack.Count, Is.EqualTo(1));
                Assert.That(stack.Peek().Name, Is.EqualTo("Page1"));

                var sceneMap = state.GetValue <IDictionary <string, bool> >(SceneConst.StateKey);
                Assert.That(sceneMap.Count, Is.EqualTo(3));
                Assert.That(sceneMap["Scene1"], Is.True);
                Assert.That(sceneMap["Scene2"], Is.True);
                Assert.That(sceneMap["Scene3"], Is.False);
            }
        }
Пример #14
0
 public static void SetStartPage(Page page)
 {
     PageStack.Push(page);
     ShowPage(page, Direction.None);
 }