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!"); } }
/// <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()); } }
/// <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("进入房间成功。"); } }
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(); } }
/// <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; } }
/// <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); } }
/// <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(); }
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)); } }
/// <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("不公开"); } }
/// <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 = "不公开"; } } }