protected override void OnMessageReceivedFromClient(MessageReceivedEventArgs e)
        {
            if (_isFinished)
            {
                return;
            }

            PrivMsgMessage privMsg = e.Message as PrivMsgMessage;

            if (privMsg != null)
            {
                if (_identity == null)
                {
                    // step 1
                    try
                    {
                        _identity = _twitterOAuth.RequestAccessToken(authToken, privMsg.Content.Trim());
                    }
                    catch (WebException we)
                    {
                        SendMessage("アプリケーションのアクセスは許可されませんでした。再接続してやり直してください。");
                        return;
                    }
                    SendMessage(String.Format("ユーザー {0} (ID:{1})として認証されました。", _identity.ScreenName, _identity.UserId));
                    SendMessage("IRCクライアントに設定するためのパスワードを入力してください。");
                }
                else
                {
                    // step 2
                    String password = privMsg.Content.Trim();
                    try
                    {
#if HOSTING
                        var config = Config.LoadConfig(_identity.UserId.ToString());
#else
                        var config = Config.LoadConfig(_identity.ScreenName.ToString());
#endif
                        config.OAuthAccessToken      = _identity.Token;
                        config.OAuthTokenSecret      = _identity.TokenSecret;
                        config.OAuthUserPasswordHash = Utility.GetMesssageDigest(password);
#if HOSTING
                        Config.SaveConfig(_identity.UserId.ToString(), config);
                        SendMessage(
                            String.Format(
                                "OAuth用のパスワードを設定しました。IRCクライアントの接続設定のユーザID(ログイン名)に {0} を、パスワードに設定したパスワードを指定して再接続してください。",
                                _identity.UserId));
#else
                        Config.SaveConfig(_identity.ScreenName.ToString(), config);
                        SendMessage("OAuth用のパスワードを設定しました。IRCクライアントの接続設定のパスワードに設定したパスワードを指定して再接続してください。");
#endif
                    }
                    catch (IOException ie)
                    {
                        SendMessage("設定ファイルにアクセスする際にエラーが発生しました。(" + ie.Message + ")");
                        return;
                    }

                    Session session = _server.GetSession(_identity.UserId.ToString()) as Session;
                    if (session != null)
                    {
                        session.LoadConfig(); // すでにセッションがある場合には設定を再読込
                    }

                    _isFinished = true;
                }
            }
        }