using System;
using System.Windows.Forms;
using Sfs2X.Core;
using Sfs2X.Requests;

public partial class LobbyForm : Form
{
    /// 
    /// コンストラクタ
    /// 
    public LobbyForm() {
        InitializeComponent();
    }

    /// 
    /// ロードイベント
    /// 
    /// 
    /// 
    private void LobbyForm_Load(object sender, EventArgs e) {
        Program.smartFox.AddEventListener(SFSEvent.CONNECTION, OnConnection);
        Program.smartFox.AddEventListener(SFSEvent.CONNECTION_LOST, OnConnectionLost);
        Program.smartFox.AddEventListener(SFSEvent.LOGIN, OnLogin);
        Program.smartFox.AddEventListener(SFSEvent.LOGIN_ERROR, OnLoginError);
        Program.smartFox.AddEventListener(SFSEvent.LOGOUT, OnLogout);
    }

    /// 
    /// イベントタイマー
    /// 
    /// 
    /// 
    private void EventTimer_Tick(object sender, EventArgs e) {
        Program.smartFox.ProcessEvents();
    }

    /// 
    /// コネクションイベント
    /// 
    /// 
    public void OnConnection(BaseEvent evt) {
        bool success = (bool)evt.Params["success"];
        if (success) {
            Log("SmartFoxServer との接続に成功しました。");
            LoginButton.Enabled = true;
        } else {
            Log("SmartFoxServer との接続に失敗しました。");
            Log("MSG: " + evt.Params["errorMessage"]);
            LoginButton.Enabled = false;
        }
    }

    /// 
    /// コネクションロストイベント
    /// 
    /// 
    public void OnConnectionLost(BaseEvent evt) {
        Log("SmartFoxServer から切断されました。");
        Log("MSG: " + evt.Params["reason"]);
        LoginButton.Enabled = false;
    }

    /// 
    /// ログイン成功イベント
    /// 
    /// 
    public void OnLogin(BaseEvent evt) {
        Log("ログインしました。");
        // ジョイン処理
        Program.ReadRoomListAndJoin();
        // 画面切り替え
        Program.ShowForm(new RoomForm());
    }

    /// 
    /// ログイン失敗イベント
    /// 
    /// 
    public void OnLoginError(BaseEvent evt) {
        Log("MSG: " + evt.Params["errorMessage"]);
    }

    /// 
    /// ログアウトイベント
    /// 
    /// 
    void OnLogout(BaseEvent evt) {
        Log("ログアウトしました。");
    }

    /// 
    /// SFSデバッグメッセージ
    /// 
    /// 
    public void OnDebugMessage(BaseEvent evt) {
        Log("DEBUG: " + evt.Params["message"]);
    }

    /// 
    /// ログメッセージ処理
    /// 
    /// 
    private void Log(string log) {
        LogListBox.Items.Add(log);
    }

    /// 
    /// ログイン処理
    /// 
    /// 
    /// 
    private void LoginButton_Click(object sender, EventArgs e) {
        // ログイン要求を送信
        LoginRequest request = new LoginRequest(UsernameTextBox.Text, PasswordTextBox.Text, ZoneTextBox.Text);
        Program.smartFox.Send(request);
    }
}
inserted by FC2 system