/// <summary> /// State machine entry point for beginning request /// </summary> public bool RequestStart(Request request) { System.Diagnostics.Debug.WriteLine("Request Start:" + request.ToString() + " State:" + requestState.ToString()); if (false == App.networkService.IsNetworkAvailable()) { return false; } switch (request) { case Request.login: if (null != t) t.Dispose(); t = new Timer(RequestTimerCallback, t, startTime, periodTime); requestState = RequestState.loggingIn; break; case Request.logout: break; case Request.getToken: requestState = RequestState.gettingToken; break; case Request.getUsers: requestState = RequestState.gettingUsers; break; case Request.getHosts: if (RequestState.idle != requestState && RequestState.gettingHosts != requestState && RequestState.gettingHost != requestState) return false; // Todo: Do we really need this check? if (null != t) t.Dispose(); t = new Timer(RequestTimerCallback, t, startTime, periodTime); requestState = RequestState.gettingHosts; break; case Request.getHost: requestState = RequestState.gettingHost; break; case Request.getFeedback: requestState = RequestState.gettingFeedback; break; case Request.sendFeedback: break; case Request.getMessages: // Stay in idle state so we don't trigger RefreshHost except at end of chain // requestState = RequestState.gettingMessages; break; case Request.sendMessage: break; case Request.replyMessage: break; case Request.getMessageCount: break; case Request.getMessageThread: requestState = RequestState.gettingMessageThread; break; case Request.markThreadRead: break; default: break; } return true; }
/// <summary> /// State machine entry point for completed request /// </summary> public void RequestComplete(Request request) { // Reset the timer if (null != t) { t.Change(periodTime, periodTime); } System.Diagnostics.Debug.WriteLine("RequestComplete:" + request.ToString() + " State:" + requestState.ToString()); switch (request) { case Request.login: if (RequestState.loggingIn == requestState) { // Chain requests GetToken(); } break; case Request.logout: Deployment.Current.Dispatcher.BeginInvoke(() => { App.webService.logoutCompleteCallback(WebResources.LoginNew, "", ""); }); break; case Request.getToken: Deployment.Current.Dispatcher.BeginInvoke(() => { App.webService.loginCompleteCallback(); }); if (RequestState.gettingToken == requestState) { // Chain requests requestState = RequestState.gettingHosts; App.nearby.viewportCache.getHosts(); // Todo: Fake names for screen shots } break; case Request.getUsers: requestState = RequestState.idle; break; case Request.getHosts: // Last in a chain of requests requestState = RequestState.idle; break; case Request.getHost: if (RequestState.gettingHost == requestState) { // Chain requests requestState = RequestState.gettingFeedback; GetFeedback(App.nearby.host.profile.user_Result.uid); } break; case Request.getFeedback: if (RequestState.gettingFeedback == requestState) { // Chain requests requestState = RequestState.gettingMessages; GetMessages(false); } break; case Request.sendFeedback: Deployment.Current.Dispatcher.BeginInvoke(() => { App.webService.sendFeedbackSuccessCallback(); }); break; case Request.getMessages: // Last in a chain of requests if (RequestState.gettingMessages == requestState) { App.pinned.refreshHost(); } requestState = RequestState.idle; break; case Request.sendMessage: Deployment.Current.Dispatcher.BeginInvoke(() => { App.webService.sendMessageSuccessCallback(); }); break; case Request.replyMessage: Deployment.Current.Dispatcher.BeginInvoke(() => { App.webService.sendMessageSuccessCallback(); }); break; case Request.getMessageCount: break; case Request.getMessageThread: if (RequestState.gettingMessageThread == requestState) { markThreadRead(); } break; case Request.markThreadRead: break; default: break; } }