예제 #1
0
        public void OnNetworkMessageEvent(object sender, NetworkMessageEventArgs e)
        {
            MessageHandler handlerInfo = sender as MessageHandler;

            //get types
            Type proxy_type = handlerInfo.proxy_object.GetType();

            //get method refl
            MethodInfo method = proxy_type.GetMethod("Invoke", new Type[] {typeof(Delegate), typeof(object[])});
            
            //define parameters
            object[] parameters = new object[] 
            { 
                new NetworkMessageEventHandler(OnNetworkMessage),
                new object[] {sender, e}
            };

            BindingFlags flag = BindingFlags.Public | BindingFlags.Instance;
            Control control = handlerInfo.proxy_object as Control;

            while (!control.IsHandleCreated)
            {
                ;
            } 
        
            if (control.IsHandleCreated)
            {
                object returnValue = method.Invoke(handlerInfo.proxy_object, flag, Type.DefaultBinder, parameters, null);
            }
            else 
            {
                Debug.Print("Object handle not created!");
            }
        }
예제 #2
0
 /// <summary>
 /// 请求房间列表回调
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 public void getRoomListCallBack(object sender, NetworkMessageEventArgs e)
 {
     Protocol.S2CGetRoomListRsp response = NetworkEvent.parseMessage<Protocol.S2CGetRoomListRsp>(e.message);
     List<Protocol.S2CGetRoomListRsp.RoomInfo> roomList = response.room_list;
     foreach (Protocol.S2CGetRoomListRsp.RoomInfo room in roomList)
     {
         ListViewItem lvi = listView1.Items.Add(new ListViewItem(room.room_id.ToString()));
         lvi.SubItems.Add(room.room_name);
         lvi.SubItems.Add(room.player_count.ToString());
     }
 }
예제 #3
0
 /// <summary>
 /// 进入房间请求回调
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 public void enterRoomCallBack(object sender, NetworkMessageEventArgs e)
 {
     Protocol.S2CEnterRoomRsp response = NetworkEvent.parseMessage<Protocol.S2CEnterRoomRsp>(e.message);
     if (response.result == false)
     {
         MessageBox.Show("房间已满。");
     }
     else
     {
         MessageBox.Show("进入房间成功。");
     }
 }
예제 #4
0
 public void userRegisterCallback(object sender, NetworkMessageEventArgs e)
 {
     Protocol.S2CRegisterRsp response = NetworkEvent.parseMessage<Protocol.S2CRegisterRsp>(e.message);
     if (response.register_result == false)
     {
         MessageBox.Show(this, Encoding.Default.GetString(response.failed_reason), "注册失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
     else
     {
         MessageBox.Show(this, "注册成功,现在你可以体验精彩的游戏了。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
         GlobalObject.LoginWindowInstance.txtUsername.Text = txtEmail.Text;
         GlobalObject.LoginWindowInstance.txtPassword.Text = txtPassword.Text;
         this.Close();
     }
 }
예제 #5
0
 /// <summary>
 /// 创建房间请求回调
 /// </summary>
 /// <param name="stream"></param>
 public void roomCreateCallBack(object sender, NetworkMessageEventArgs e)
 {
     Protocol.S2CRoomCreateRsp response = NetworkEvent.parseMessage<Protocol.S2CRoomCreateRsp>(e.message);
     if (response.room_create_result == true)
     {
         GlobalObject.MainWindowInstance.Show();
         this.Close();
     }
     else
     {
         MessageBox.Show(this, Encoding.Default.GetString(response.failed_reason), "创建房间失败。", MessageBoxButtons.OK, MessageBoxIcon.Error);
         btnCreate.Enabled = true;
         btnCancle.Enabled = true;
     }
 }
예제 #6
0
 /// <summary>
 /// 登录返回
 /// </summary>
 /// <param name="stream"></param>
 public void userLoginCallback(object sender, NetworkMessageEventArgs e)
 {
     Protocol.S2CLoginRsp response = NetworkEvent.parseMessage<Protocol.S2CLoginRsp>(e.message);
     if (response.login_result == true)
     {
         saveXml();
         LoginData.email = PlayerProfile.email = txtUsername.Text;
         GlobalObject.MainWindowInstance = new GameMainWindow();
         GlobalObject.MainWindowInstance.Show();
         this.Hide();//XXX: 若要关闭当前窗口,需要注意下头closed逻辑
     }
     else
     {
         MessageBox.Show(this, Encoding.Default.GetString(response.failed_reason), "登录失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
 }
예제 #7
0
        /// <summary>
        /// 服务器返回个人资料
        /// </summary>
        /// <param name="stream"></param>
        public void getPlayerProfileCallback(object sender, NetworkMessageEventArgs e)
        {
            Protocol.S2CGetPlayerProfileRsp response = NetworkEvent.parseMessage<Protocol.S2CGetPlayerProfileRsp>(e.message);
            PlayerProfile.guid = response.guid;
            PlayerProfile.nickname = Encoding.UTF8.GetString(response.nickname);
            PlayerProfile.gender = response.gender;
            PlayerProfile.last_login = response.last_login;
            PlayerProfile.gold = response.gold;

            lblNickname.Text = PlayerProfile.nickname == null ? "-" : PlayerProfile.nickname;
            tlblEmail.Text = PlayerProfile.email == null ? "<无>" : "<" + PlayerProfile.email + ">";

            if (PlayerProfile.last_login > 0)
            {
                DateTime dt = new DateTime(1970, 1, 1);
                dt = dt.AddSeconds(PlayerProfile.last_login);
                ltxtLastLogin.Text = dt.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss");
            }
            else
            {
                ltxtLastLogin.Text = "从未";
            }
            ltxtGold.Text = PlayerProfile.gold.ToString();
        }
예제 #8
0
파일: Chat.cs 프로젝트: carriercomm/ZeusMud
        private void chatMessageCallback(object sender, NetworkMessageEventArgs e)
        {
            Protocol.S2CChatMessageNotify notify = NetworkEvent.parseMessage<Protocol.S2CChatMessageNotify>(e.message);

            //如果是私聊
            if (notify.chat_type == (int)MessageChannel.ChannelPrivate)
            {
                writeLine(
                    (MessageChannel)notify.chat_type,
                    Encoding.UTF8.GetString(notify.chat_sender_nickname),
                    notify.chat_sender_guid,
                    Encoding.UTF8.GetString(notify.chat_content));
            }
            else
            {
                writeLine(
                    (MessageChannel)notify.chat_type,
                    Encoding.UTF8.GetString(notify.chat_sender_nickname),
                    notify.chat_sender_guid,
                    Encoding.UTF8.GetString(notify.chat_content));
            }
        }
예제 #9
0
 /// <summary>
 /// 添加房间提示回调
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 public void newRoomAddCallBack(object sender, NetworkMessageEventArgs e)
 {
     Protocol.S2CNewRoomAddNotify response = NetworkEvent.parseMessage<Protocol.S2CNewRoomAddNotify>(e.message);
     ListViewItem lvi = listView1.Items.Insert((int)response.room_id - 1, response.room_id.ToString());
     lvi.SubItems.Add(response.room_name);
     lvi.SubItems.Add("1");
     if (response.@public)
     {
         lvi.SubItems.Add("公开");
     }
     else
     {
         lvi.SubItems.Add("不公开");
     }
 }
예제 #10
0
 /// <summary>
 /// 房间信息修改提示回调
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 public void roomInfoChangeNotifyCallBack(object sender, NetworkMessageEventArgs e)
 {
     Protocol.S2CSRoomInfoChangeNotify response = NetworkEvent.parseMessage<Protocol.S2CSRoomInfoChangeNotify>(e.message);
     if (response.room_id <= listView1.Items.Count)
     {
         //room id 的索引是从1开始
         ListViewItem lvi = listView1.Items[(int)response.room_id - 1];
         if (response.room_name != null)
         {
             lvi.SubItems[1].Text = response.room_name;
         }
         if (response.players_count != 0)
         {
             lvi.SubItems[2].Text = response.players_count.ToString();
         }
         if (response.@public)
         {
             lvi.SubItems[3].Text = "公开";
         }
         else
         {
             lvi.SubItems[3].Text = "不公开";
         }
     }
 }