/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~登录~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /// <summary> /// 登陆测试 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnLoginPageClick(object sender, EventArgs e) { if (m_tabLogin_Start.Text == "停止") { m_tabLogin_Start.Enabled = false; ClientNetManager.Instance.CloseAll(); m_tabLogin_Start.Text = "开始"; m_tabLogin_Start.Enabled = true; EnableTabPage(true, m_tabLogin); EnableLoginTabPage(true); EventController.TriggerEvent(ClientEventID.SWITCH_PRESSURE, ePressureType.Login, false); } else { sPressureLoginInfo info = new sPressureLoginInfo(); info.ip = this.m_tabLogin_IP.Text; info.port = ushort.Parse(this.m_tabLogin_Port.Text); info.client_count = ushort.Parse(this.m_tabLogin_ClientCount.Text); info.dis_conn_time = float.Parse(this.m_tabLogin_DisconTime.Text); ServerConfig.net_info.login_server_ip = info.ip; ServerConfig.net_info.login_server_port = info.port; ServerConfig.net_info.login_client_count = info.client_count; m_tabLogin_Start.Enabled = false; EnableTabPage(false, m_tabLogin); EnableLoginTabPage(false); m_pressure_type = ePressureType.Login; m_tabLogin_Start.Text = "停止"; EventController.TriggerEvent(ClientEventID.SWITCH_PRESSURE, ePressureType.Login, true, info); ClientNetManager.Instance.StartConnect(info.ip, info.port, info.client_count, 8); m_tabLogin_Start.Enabled = true; } }
private void OnPingNet(PacketBase packet) { eServerType server_type = eServerType.NONE; uint packet_id = 0; //发送包id long tick = 0; //发送时间,记录延迟 long offset_time = 0; uint flags = 0; if (packet is gs2c.PingNet) { gs2c.PingNet msg = packet as gs2c.PingNet; server_type = eServerType.GATE; packet_id = msg.packet_id; tick = msg.tick; offset_time = Time.time - tick; flags = msg.flags; Log.Debug("收到gs包:" + msg.packet_id + " 时间:" + Time.time + " 延迟:" + (Time.time - msg.tick)); } else if (packet is ss2c.PingNet) { ss2c.PingNet msg = packet as ss2c.PingNet; packet_id = msg.packet_id; tick = msg.tick; offset_time = Time.time - tick; flags = msg.flags; if (Utils.HasFlag(msg.flags, (uint)eServerType.GLOBAL)) { server_type = eServerType.GLOBAL; } else { server_type = eServerType.SERVER; } Log.Debug("收到ss包:" + msg.packet_id + " 时间:" + Time.time + " 延迟:" + (Time.time - msg.tick)); } else if (packet is fs2c.PingNet) { fs2c.PingNet msg = packet as fs2c.PingNet; server_type = eServerType.FIGHT; packet_id = msg.packet_id; tick = msg.tick; offset_time = Time.time - tick; flags = msg.flags; Log.Debug("收到fs包:" + msg.packet_id + " 时间:" + Time.time + " 延迟:" + (Time.time - msg.tick)); } else if (packet is ws2c.PingNet) { ws2c.PingNet msg = packet as ws2c.PingNet; server_type = eServerType.WORLD; packet_id = msg.packet_id; tick = msg.tick; offset_time = Time.time - tick; flags = msg.flags; Log.Debug("收到ws包:" + msg.packet_id + " 时间:" + Time.time + " 延迟:" + (Time.time - msg.tick)); } if (server_type != eServerType.NONE) { EventController.TriggerEvent(ClientEventID.SERVER_PING, server_type, packet_id, tick, offset_time, flags); } }
/// <summary> /// 上线 /// </summary> public void OnEnter() { EventController.TriggerEvent(EventID.PLAYER_ENTER_GAME, m_char_idx); m_is_online = true; m_last_access_time = Time.second_time; }
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~事件~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ private void OnAcceptConnect(long conn_idx) { m_sockets.Add(conn_idx); c2gs.EncryptInfo msg = PacketPools.Get(c2gs.msg.ENCRYPT) as c2gs.EncryptInfo; msg.version = 1; this.Send(conn_idx, msg); EventController.TriggerEvent(ClientEventID.NET_CONNECTED_OPEN, conn_idx); }
public override void OnEnter() { base.OnEnter(); m_player_bag.Setup(); EventController.TriggerEvent(EventID.PLAYER_ENTER_GAME, m_obj_idx); }
private void OnConnectClose(long conn_idx) { if (m_cur_conn_idx == conn_idx) { m_cur_conn_idx = 0; } EventController.TriggerEvent(ClientEventID.NET_CONNECTED_CLOSE, conn_idx); }
private void OnConnectClose(long conn_idx) { lock (m_sync_lock) { m_sockets.Remove(conn_idx); } EventController.TriggerEvent(ClientEventID.NET_CONNECTED_CLOSE, conn_idx); }
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~事件~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ private void OnAcceptConnect(long conn_idx) { m_cur_conn_idx = conn_idx; c2gs.EncryptInfo msg = PacketPools.Get(c2gs.msg.ENCRYPT) as c2gs.EncryptInfo; msg.version = GlobalID.GetVersion(); this.Send(msg); EventController.TriggerEvent(ClientEventID.NET_CONNECTED_OPEN, m_cur_conn_idx); }
private static bool CheckLogin() { if (!ClientNetManager.Instance.is_connected) { EventController.TriggerEvent(ClientEventID.SHOW_STATUS, eFormStatusType.Log, "请先登录"); return(false); } return(true); }
public override void OnLeave() { EventController.TriggerEvent(EventID.PLAYER_LEAVE_GAME, m_obj_idx); m_unit_attr.SetAttribInteger(eUnitModType.UMT_time_last_logout, Time.second_time, true, false, false, false, false); this.Save(); base.OnLeave(); }
private void OnConnAppLeave(ConnAppProc app_server) { Log.Info("断开与服务器的连接 type:" + app_server.srv_info.srv_type.ToString() + " sid:" + app_server.srv_info.srv_uid); if (app_server.srv_info.srv_type == eServerType.WORLD) { m_world_conn_idx = 0; EventController.TriggerEvent(EventID.NET_DISCONNECT_WORLD_SRV); } }
private void OnConnAppEnter(ConnAppProc app_server) { Log.Info("连接上服务器 type:" + app_server.srv_info.srv_type.ToString() + " sid:" + app_server.srv_info.srv_uid); switch (app_server.srv_info.srv_type) { case eServerType.WORLD: EventController.TriggerEvent(EventID.NET_CONNECTED_WORLD_SRV); //成功连接到世界服 break; } }
/// <summary> /// 上线 /// </summary> public void OnEnter() { m_last_active_time = Time.timeSinceStartup; m_is_send_check_online = false; //告诉客户端当前服务器时间 ws2c.ServerTime rep_msg = PacketPools.Get(ws2c.msg.SERVER_TIME) as ws2c.ServerTime; rep_msg.server_time = GameTimeManager.Instance.server_time; ServerNetManager.Instance.SendProxy(m_client_uid, rep_msg); EventController.TriggerEvent(EventID.PLAYER_ENTER_GAME, m_char_idx); }
private void OnConnAppLeave(ConnAppProc app_server) { Log.Info("断开与服务器的连接 type:" + app_server.srv_info.srv_type.ToString() + " sid:" + app_server.srv_info.srv_uid); app_server.srv_info.srv_status = eConnAppStatus.CLOSED; switch (app_server.srv_info.srv_type) { case eServerType.WORLD: m_world_conn_idx = 0; EventController.TriggerEvent(EventID.NET_DISCONNECT_WORLD_SRV); break; } }
private void OnConnAppEnter(ConnAppProc app_server) { Log.Info("连接上服务器 type:" + app_server.srv_info.srv_type.ToString() + " sid:" + app_server.srv_info.srv_uid); if (app_server.srv_info.srv_type == eServerType.WORLD) { EventController.TriggerEvent(EventID.NET_CONNECTED_WORLD_SRV);//成功连接到世界服 //启动DB DBManager.Instance.Start(ServerConfig.net_info.db_list); InitNextCharIdx(); } }
/// <summary> /// 下线 /// </summary> public void OnLeave() { if (m_is_online) { //保存数据 this.Save(); EventController.TriggerEvent(EventID.PLAYER_LEAVE_GAME, m_char_idx); m_is_online = false; m_last_access_time = Time.second_time; } }
/// <summary> /// 创建角色 /// </summary> private void OnCreateCharacter(PacketBase packet) { gs2c.CreateCharacter msg = packet as gs2c.CreateCharacter; if (msg.result != eCreateCharResult.E_SUCCESS) { EventController.TriggerEvent(ClientEventID.SHOW_MESSAGE, "创建角色错误:" + msg.result, "错误"); } else { EventController.TriggerEvent(ClientEventID.SHOW_MESSAGE, "创建成功:" + msg.char_idx, "信息"); ServerMsgSend.SendCharacterList(); } }
/// <summary> /// 登陆 /// </summary> private void OnClientLogin(PacketBase packet) { gs2c.ClientLogin msg = packet as gs2c.ClientLogin; if (msg.login_result == eLoginResult.E_SUCCESS) { EventController.TriggerEvent(ClientEventID.SHOW_STATUS, eFormStatusType.Account, "登录账号:" + ServerConfig.net_info.user_name); EventController.TriggerEvent(ClientEventID.SHOW_STATUS, eFormStatusType.Log, "登录成功"); ServerMsgSend.SendCharacterList(); } else { EventController.TriggerEvent(ClientEventID.SHOW_MESSAGE, "登录错误:" + msg.login_result, "错误"); EventController.TriggerEvent(ClientEventID.SHOW_STATUS, eFormStatusType.Log, "登录失败"); } }
/// <summary> /// 整点触发 /// </summary> private void OnHourTimer(int timer_id, string param) { int h = DateTime.Now.Hour;//获取当前时间的小时部分 if (h == m_cur_hour) {//有可能还差一点 this.InitHourTimer(); return; } else {//到时间了 EventController.TriggerEvent(EventID.INTEGRAL_HOUR_TIMER, h); this.InitHourTimer(); Log.Info("当前时间:" + DateTime.Now.Hour + " " + DateTime.Now.Minute + " " + DateTime.Now.Second); } }
/// <summary> /// 角色列表 /// </summary> private void OnCharacterList(PacketBase packet) { ss2c.EnumCharacter msg = packet as ss2c.EnumCharacter; LoginDataMgr.Instance.AddCharacterList(msg.list); if (msg.list.Count == 0 || msg.list.Count > 1) { EventController.TriggerEvent(ClientEventID.OPEN_FORM, eFormType.CreateUser); } else { CharacterLogin char_info = msg.list[0]; EventController.TriggerEvent(ClientEventID.SHOW_STATUS, eFormStatusType.User, "当前角色:" + char_info.char_name); ServerMsgSend.SendEnterGame(char_info.char_idx); } }
private void OnConnAppEnter(ConnAppProc app_server) { if (m_srv_servers.ContainsKey(app_server.srv_info.srv_uid)) { Log.Warning("已经存在服务器 sid:" + app_server.srv_info.srv_uid); return; } Log.Info("连接上服务器 type:" + app_server.srv_info.srv_type.ToString() + " sid:" + app_server.srv_info.srv_uid); m_srv_servers.Add(app_server.srv_info.srv_uid, app_server); switch (app_server.srv_info.srv_type) { case eServerType.WORLD: //之所以放在连接世界服后再连接全局服,是可以告诉全局服ss所在大区id Connect2GlobalServer(ServerConfig.net_info.gl_ip, ServerConfig.net_info.gl_port); EventController.TriggerEvent(EventID.NET_CONNECTED_WORLD_SRV); //成功连接到世界服 break; } }
private void OnConnAppEnter(ConnAppProc app_server) { if (m_srv_servers.ContainsKey(app_server.srv_info.srv_uid)) { Log.Warning("已经存在服务器 sid:" + app_server.srv_info.srv_uid); return; } Log.Info("连接上服务器 type:" + app_server.srv_info.srv_type.ToString() + " sid:" + app_server.srv_info.srv_uid); m_srv_servers.Add(app_server.srv_info.srv_uid, app_server); switch (app_server.srv_info.srv_type) { case eServerType.WORLD: EventController.TriggerEvent(EventID.NET_CONNECTED_WORLD_SRV); //成功连接到世界服 break; case eServerType.GATE: break; } }
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~创建角色~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /// <summary> /// 登陆测试 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnLoginPageClick(object sender, EventArgs e) { this.SetCreateProgress(0, 1); if (m_tabLogin_Start.Text == "停止") { m_tabLogin_Start.Text = "开始"; m_tabLogin_Start.Enabled = true; EnableTabPage(true, m_tabUser); EnableLoginTabPage(true); EventController.TriggerEvent(ClientEventID.SWITCH_PRESSURE, ePressureType.CreateUser, false); } else { sCreateUserInfo info = new sCreateUserInfo(); info.ip = this.m_tabUser_IP.Text; info.port = ushort.Parse(this.m_tabUser_Port.Text); info.db_name = this.m_tabUser_DB.Text; info.start_id = long.Parse(this.m_tabUser_StartId.Text); info.start_account = long.Parse(this.m_tabUser_StartAccount.Text); info.end_account = long.Parse(this.m_tabUser_EndAccount.Text); if (info.start_id < 0) { MessageBox.Show("请设置有效的角色起始id", "错误", MessageBoxButtons.OK); return; } if (info.end_account <= info.start_account || info.start_account < 0) { MessageBox.Show("请设置有效的账号范围", "错误", MessageBoxButtons.OK); return; } m_tabLogin_Start.Enabled = false; EnableTabPage(false, m_tabUser); EnableLoginTabPage(false); m_pressure_type = ePressureType.CreateUser; m_tabLogin_Start.Text = "停止"; EventController.TriggerEvent(ClientEventID.SWITCH_PRESSURE, ePressureType.CreateUser, true, info); m_tabLogin_Start.Enabled = true; } }
private void OnConnAppLeave(ConnAppProc app_server) { Log.Info("断开与服务器的连接 type:" + app_server.srv_info.srv_type.ToString() + " sid:" + app_server.srv_info.srv_uid); app_server.srv_info.srv_status = eConnAppStatus.CLOSED; switch (app_server.srv_info.srv_type) { case eServerType.WORLD: m_world_conn_idx = 0; EventController.TriggerEvent(EventID.NET_DISCONNECT_WORLD_SRV); break; case eServerType.GLOBAL: m_global_conn_idx = 0; break; case eServerType.FIGHT: //如果战斗服退出,当前战斗服的玩家自动连接其他战斗服 EventController.TriggerEvent(EventID.NET_DISCONNECT_FIGHT_SRV, app_server.srv_info.srv_uid); break; } m_srv_servers.Remove(app_server.srv_info.srv_uid); }
/// <summary> /// 场景切换 /// </summary> private void OnEnterScene(PacketBase packet) { ss2c.EnterScene msg = packet as ss2c.EnterScene; UnitManager.Instance.RemoveAll(); //玩家信息 PlayerInfoForClient char_info = PlayerDataMgr.Instance.main_player_info; PlayerAOIInfo player_info = CommonObjectPools.Spawn <PlayerAOIInfo>(); player_info.char_name = char_info.char_name; player_info.char_type = char_info.char_type; player_info.pos_x = msg.pos.x; player_info.pos_y = msg.pos.y; player_info.flags = char_info.flags; player_info.model_idx = char_info.model_idx; player_info.job = char_info.job; player_info.level = char_info.level; player_info.exp = char_info.exp; player_info.energy = char_info.energy; player_info.gold = char_info.gold; player_info.coin = char_info.coin; player_info.hp = char_info.hp; player_info.hp_max = char_info.hp_max; player_info.hurt = char_info.hurt; player_info.range = char_info.range; player_info.run_speed = char_info.run_speed; player_info.vip_grade = char_info.vip_grade; player_info.vip_flags = char_info.vip_flags; //创建玩家对象 Player player = new Player(); player.obj_idx = char_info.char_idx; player.Setup(); player.LoadData(player_info); UnitManager.Instance.AddUnit(player); EventController.TriggerEvent(ClientEventID.SHOW_STATUS, eFormStatusType.Scene, "当前场景:" + msg.scene_type); EventController.TriggerEvent(ClientEventID.SHOW_STATUS, eFormStatusType.Log, "进入场景:" + msg.scene_type); }
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~移动~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ private void OnMovePageClick(object sender, EventArgs e) { if (m_tabMove_Start.Text == "停止") { m_tabMove_Start.Enabled = false; ClientNetManager.Instance.CloseAll(); m_tabMove_Start.Text = "开始"; m_tabMove_Start.Enabled = true; EnableTabPage(true, m_tabMove); EnableMoveTabPage(true); EventController.TriggerEvent(ClientEventID.SWITCH_PRESSURE, ePressureType.Move, false); } else { sPressureMoveInfo info = new sPressureMoveInfo(); info.ip = this.m_tabMove_IP.Text; info.port = ushort.Parse(this.m_tabMove_Port.Text); info.client_count = ushort.Parse(this.m_tabMove_ClientCount.Text); info.move_time = float.Parse(this.m_tabMove_MoveTime.Text); info.start_account = long.Parse(this.m_tabMove_StartAccount.Text); ServerConfig.net_info.move_server_ip = info.ip; ServerConfig.net_info.move_server_port = info.port; ServerConfig.net_info.move_client_count = info.client_count; ServerConfig.net_info.move_start_account = info.start_account; m_tabMove_Start.Enabled = false; EnableTabPage(false, m_tabMove); EnableMoveTabPage(false); m_pressure_type = ePressureType.Move; m_tabMove_Start.Text = "停止"; EventController.TriggerEvent(ClientEventID.SWITCH_PRESSURE, ePressureType.Move, true, info); ClientNetManager.Instance.StartConnect(info.ip, info.port, info.client_count, 10); m_tabMove_Start.Enabled = true; } }
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~网络~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /// <summary> /// 网络压力 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnNetPageClick(object sender, EventArgs e) { if (m_tabNet_Start.Text == "停止") { m_tabNet_Start.Enabled = false; ClientNetManager.Instance.CloseAll(); m_tabNet_Start.Text = "开始"; m_tabNet_Start.Enabled = true; EnableTabPage(true, m_tabNet); EnableNetTabPage(true); EventController.TriggerEvent(ClientEventID.SWITCH_PRESSURE, ePressureType.Net, false); } else { sPressureNetInfo info = new sPressureNetInfo(); info.ip = this.m_tabNet_IP.Text; info.port = ushort.Parse(this.m_tabNet_Port.Text); info.client_count = ushort.Parse(this.m_tabNet_ClientCount.Text); info.send_count_per_second = ushort.Parse(this.m_tabNet_SendCountPerSecond.Text); info.send_size_per_packet = ushort.Parse(this.m_tabNet_SendSizePerSecond.Text); ServerConfig.net_info.net_server_ip = info.ip; ServerConfig.net_info.net_server_port = info.port; ServerConfig.net_info.net_client_count = info.client_count; m_tabNet_Start.Enabled = false; EnableTabPage(false, m_tabNet); EnableNetTabPage(false); m_pressure_type = ePressureType.Net; m_tabNet_Start.Text = "停止"; EventController.TriggerEvent(ClientEventID.SWITCH_PRESSURE, ePressureType.Net, true, info); ClientNetManager.Instance.StartConnect(info.ip, info.port, info.client_count, 5); m_tabNet_Start.Enabled = true; } }
private void CreateOneUser(long account_idx, long char_idx) { if (!m_active || account_idx > m_pressure_info.end_account) { return; } CreateCharacterInfo create_info = new CreateCharacterInfo(); create_info.spid = 0; create_info.ws_id = 0; create_info.ss_id = 0; create_info.fs_id = 0; create_info.char_idx = char_idx; create_info.char_name = "test" + account_idx; create_info.char_type = (byte)(MathUtils.Rand_Sign() == 1 ? eSexType.BOY : eSexType.GIRL); SQLCharHandle.CreateCharacter(account_idx, create_info, (res) => { if (create_info.char_idx != res) { Log.Error("创建角色失败,账号:" + account_idx + ", error:" + res.ToString()); } EventController.TriggerEvent(ClientEventID.CREATE_PROGRESS, (int)(account_idx - m_pressure_info.start_account), (int)(m_pressure_info.end_account - m_pressure_info.start_account)); if (account_idx + 1 > m_pressure_info.end_account) { EventController.TriggerEvent(ClientEventID.CREATE_COMPLETE); this.Stop(); } else { this.CreateOneUser(account_idx + 1, char_idx + 1); } } ); }
/// <summary> /// 下线 /// </summary> public void OnLeave() { EventController.TriggerEvent(EventID.PLAYER_LEAVE_GAME, m_char_idx); }
private void OnMessageReveived(long conn_idx, ushort header, ByteArray data) { m_recv_msg_count++; m_recv_msg_size += data.Available + NetID.PacketHeadSize + 2; EventController.TriggerEvent(ClientEventID.RECV_DATA, conn_idx, header, data); }