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)); }
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); }
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); }
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; } }
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. }
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); } }
private void ShowPage(DocumentationPage page) { LastPage = page.Name; PageStack.Push(page); }
private void MoveServerSettingPage() { PageStack.Push(page.GetType()); page.Frame.Navigate(typeof(ServerSettingPage), PageStack); }
private void MoveProductSettingPage() { PageStack.Push(page.GetType()); page.Frame.Navigate(typeof(ProductSettingPage), PageStack); }
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; }
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(); }
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); } }
public static void SetStartPage(Page page) { PageStack.Push(page); ShowPage(page, Direction.None); }