Пример #1
0
 static public BattleNetUser Parse(string content)
 {
     try
     {
         BattleNetUser rst = new BattleNetUser();
         rst.Name  = content.Split(new char[] { ',' })[0];
         rst.Score = int.Parse(content.Split(new char[] { ',' })[1]);
         return(rst);
     }
     catch
     {
         return(null);
     }
 }
        void ProcessMessage(string msg)
        {
            string[] paras = msg.Split(new string[] { MESSAGE_SPLIT_TAG }, StringSplitOptions.None);
            if (paras.Length == 0)
            {
                return;
            }
            string MessageHead = paras[0];

            switch (MessageHead)
            {
            case "LOGIN":
                if (loginCallback != null)
                {
                    _dispatcher.BeginInvoke(() =>
                    {
                        loginCallback(bool.Parse(paras[1]));
                    });
                }
                break;

            case "GET_ONLINE_USERS":
                if (onlineUsersCallback != null)
                {
                    List <BattleNetUser> rst = new List <BattleNetUser>();
                    for (int i = 1; i < paras.Length; ++i)
                    {
                        BattleNetUser user = BattleNetUser.Parse(paras[i]);
                        if (user != null)
                        {
                            rst.Add(user);
                        }
                    }
                    _dispatcher.BeginInvoke(() =>
                    {
                        onlineUsersCallback(rst);
                    });
                }
                break;

            case "GET_USER":
                if (getUserCallback != null)
                {
                    BattleNetUser u = BattleNetUser.Parse(paras[1]);
                    _dispatcher.BeginInvoke(() =>
                    {
                        getUserCallback(u);
                    });
                }
                break;

            case "GET_BATTLE_LOG":
                break;

            case "JOIN_CHANNEL":
                if (joinChannelCallback != null)
                {
                    _dispatcher.BeginInvoke(() =>
                    {
                        joinChannelCallback(bool.Parse(paras[1]));
                    });
                }
                break;

            case "CHAT":
            {
                ChatEventArgs ev = new ChatEventArgs();
                ev.User    = BattleNetUser.Parse(paras[1]);
                ev.Channel = paras[2];
                ev.Message = paras[3];
                _dispatcher.BeginInvoke(() =>
                    {
                        this.OnNewChatNotify(this, ev);
                    });
                break;
            }

            case "GET_SAVES":
            {
                List <string> rst = new List <string>();
                for (int i = 1; i < paras.Length; ++i)
                {
                    rst.Add(paras[i]);
                }
                _dispatcher.BeginInvoke(() =>
                    {
                        this.getSavesCallback(rst);
                    });
                break;
            }

            case "SAVE":
            {
                _dispatcher.BeginInvoke(() =>
                    {
                        saveCallback(bool.Parse(paras[1]));
                    });
                break;
            }

            case "BATTLE_RESULT":
            {
                _dispatcher.BeginInvoke(() =>
                    {
                        commitBattleResultCallback(bool.Parse(paras[1]));
                    });
                break;
            }

            default:
                break;
            }
        }