public IEnumerator <ITask> DirectLoginHandler(DirectLogin login)
        {
            if (trace)
            {
                LogInfo("DirectLogin Received");
            }

            try
            {
                TerkUserPrx terkUserPrx = directCommunicator.connectToPeer(login.Body.PeerIdentifier);
                if (trace)
                {
                    LogInfo("Connect complete!");
                }
                QwerkPrx qwerkPrx = QwerkPrxHelper.uncheckedCast(terkUserPrx);
                this.qwerkController = new QwerkController(login.Body.PeerIdentifier, qwerkPrx, directCommunicator);
            }
            catch (Exception e)
            {
                string failure = "Failed to connect to Qwerk '" + login.Body.PeerIdentifier + "': " + e;
                LogInfo(failure);
                login.ResponsePort.Post(generateFault(failure));
                yield break;
            }

            login.ResponsePort.Post(DefaultUpdateResponseType.Instance);
            yield break;
        }
        public IEnumerator <ITask> RelayLoginHandler(RelayLogin login)
        {
            if (trace)
            {
                LogInfo("RelayLogin Received");
            }

            // login and register with the relay
            try
            {
                UserSessionPrx userSessionPrx = relayCommunicator.loginAndRegister(login.Body.TerkLogin, login.Body.TerkPassword);
                // connect to the qwerk
                try
                {
                    this.qwerkController = relayCommunicator.connectToQwerk(userSessionPrx, login.Body.QwerkLogin);
                }
                catch (PeerException e)
                {
                    string failure = "Failed to connect to Qwerk " + login.Body.QwerkLogin + ": " + e;
                    LogInfo(failure);
                    login.ResponsePort.Post(generateFault(failure));
                    yield break;
                }
            }
            catch (Exception e)
            {
                string failure = "Failed to register with the relay: " + e;
                LogInfo(failure);
                login.ResponsePort.Post(generateFault(failure));
                yield break;
            }
            login.ResponsePort.Post(DefaultUpdateResponseType.Instance);
            yield break;
        }