/// <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;
                }
            }