public static void S_30秒_清楚临时玩家() { List <long> z清楚列表 = new List <long>(); int z当前时间 = C_Toot.S_Get时间搓int(); foreach (var n in o_临时玩家列表) { if (o_玩家总列表.ContainsKey(n) == true) { C_玩家 nn = o_玩家总列表[n]; if (nn.o_Tcp通信 != null) { if (z当前时间 - o_玩家总列表[n].o_Tcp通信.o_在线时间 > 40) { z清楚列表.Add(n); } } else { z清楚列表.Add(n); } } } o_临时玩家列表.Clear(); for (int i = 0; i < z清楚列表.Count; i++) { o_玩家总列表.Remove(z清楚列表[i]); Console.WriteLine("玩家__" + z清楚列表[i] + "______被清除_______"); } }
public static Dictionary <int, C_游戏房间> o_房间集合 = new Dictionary <int, C_游戏房间>(); //房间号-房间- public C_游戏房间(List <C_玩家> z玩家列表) { Random ran = new Random(); do { long ll = DateTime.Now.S_Get时间搓(); o_房间号 = (int)ll - ran.Next(1000000000);//房间号--10长度数字--- } while (C_游戏房间.o_房间集合.ContainsKey(o_房间号) == true); o_玩家列表 = z玩家列表; o_是否刷新 = true; for (int i = 0; i < z玩家列表.Count; i++) { z玩家列表[i].o_游戏房间 = this; if (z玩家列表[i].o_Tcp通信 != null && z玩家列表[i].o_Tcp通信.o_通信器 != null) { o_玩家Serv = z玩家列表[i]; } } C_游戏房间.o_房间集合.Add(o_房间号, this); Console.WriteLine(o_房间号 + "_____房间创建完成-----"); }
public void S_刷新玩家服务器() { int z时间差 = C_Toot.S_Get时间搓int() - o_玩家Serv.o_Tcp通信.o_在线时间; if (z时间差 > 10) { Console.WriteLine(o_房间号 + "___" + C_Toot.S_Get时间搓int() + "____时间______" + o_玩家Serv.o_Tcp通信.o_在线时间 + "_____" + z时间差 + "_____" + o_是否刷新); o_玩家列表 = o_玩家列表.OrderByDescending(n => n.o_Tcp通信.o_在线时间).ToList(); if (o_玩家列表[0] != o_玩家Serv) { o_玩家Serv = o_玩家列表[0]; } else if (o_玩家列表[1].o_Tcp通信.o_通信器 != null) { o_玩家Serv = o_玩家列表[1]; } else { return; } Console.WriteLine("房间_" + o_房间号 + "__更新玩家服务器位置_" + o_玩家列表.IndexOf(o_玩家Serv)); S_发送房间消息(660, o_玩家列表.IndexOf(o_玩家Serv) + ""); } }
static void S_匹配组(List <C_玩家> z列表1, List <C_玩家> z列表2) { Console.WriteLine("开始匹配________S_匹配组____"); int z人员数量 = 2; while (z列表2.Count < z人员数量) { if (o_单人匹配列表.Count == 0) { break; } if (z列表1.Count < z人员数量) { z列表1.Add(o_单人匹配列表[0]); o_单人匹配列表.RemoveAt(0); if (o_单人匹配列表.Count == 0) { break; } } z列表2.Add(o_单人匹配列表[0]); o_单人匹配列表.RemoveAt(0); } Console.WriteLine("z列表1.Count___" + z列表1.Count + "________z列表2.Count__" + z列表2.Count); //List<C_玩家> z电脑玩家列表 = new List<C_玩家>(); Random ran = new Random(); //while (z电脑玩家列表.Count <10) { // int z英雄编号 = ran.Next(C_玩家.O_电脑玩家列表.Count); // C_玩家 nn= C_玩家.O_电脑玩家列表[z英雄编号]; // if (C_玩家.O_电脑玩家列表.Contains(nn) == false) { // z电脑玩家列表.Add(nn); // } //} //for (int i = z列表1.Count; i < z人员数量; i++) { // z列表1.Add(z电脑玩家列表[0]); // z电脑玩家列表.RemoveAt(0); //} //for (int i = z列表2.Count; i < z人员数量; i++) { // z列表2.Add(z电脑玩家列表[0]); // z电脑玩家列表.RemoveAt(0); //} while (z列表2.Count < z人员数量) { int z英雄编号 = ran.Next(C_玩家.O_电脑玩家列表.Count); C_玩家 nn = C_玩家.O_电脑玩家列表[z英雄编号]; if (z列表1.Contains(nn) == false && z列表2.Contains(nn) == false) { if (z列表1.Count < z人员数量) { z列表1.Add(nn); } else { z列表2.Add(nn); } } } Console.WriteLine("整理完成______z列表1.Count___" + z列表1.Count + "________z列表2.Count__" + z列表2.Count); Random random = new Random(); int z随机数 = random.Next(10); if (z随机数 < 5) { S_创建竞技房间(z列表1, z列表2); } else { S_创建竞技房间(z列表2, z列表1); } }
static void S_30秒事件() { C_玩家.S_30秒_清楚临时玩家(); C_游戏房间.S_30秒_匹配刷新(); }
//public override C_TcpClient.C_逻辑端 S_接口_初始化(C_TcpClient nn) { // if (o_通信器 != null) { // C_Tcp客户端 mm = new C_Tcp客户端(); // return mm.S_接口_初始化(nn); // } else { // o_通信器 = nn; // return this; // } //} public override void S_接口_消息处理(ushort z消息类型, string zMsg, byte[] zData) { if (z消息类型 > 50 && o_雇主 == null) { Console.WriteLine(z消息类型 + "___Tcp非法登录________________" + zMsg); return; } string ss; switch (z消息类型) { case 1: //z玩家ID &玩家地址--- #region MyRegion----初次登陆-----------收到的域名Server消息----------------- string[] sss = zMsg.Split('&'); long zID = long.Parse(sss[0]); if (C_玩家.o_玩家总列表.ContainsKey(zID) == true) { o_通信器.S_发送消息(1, sss[1]); //玩家地址------- Console.WriteLine("玩家探测登陆________存在_____" + C_玩家.o_玩家总列表.Count); } else { Console.WriteLine("玩家探测登陆______用户不存在_______" + C_玩家.o_玩家总列表.Count); } #endregion break; case 3: //z玩家ID &姓名 &密码 &玩家地址--------- #region MyRegion-------玩家注册--------收到的域名Server消息------------------- sss = zMsg.Split('&'); zID = long.Parse(sss[0]); if (C_玩家.o_玩家总列表.ContainsKey(zID) == false) { C_玩家 nn = C_Server.ooo.o_数据库.S_用户注册(zID, sss[1], sss[2]); o_通信器.S_发送消息(3, "1&" + sss[3]); //1 &玩家地址------- } else { o_通信器.S_发送消息(3, "-1&" + sss[3]); //-1 &玩家地址------- } Console.WriteLine("玩家注册_____________"); #endregion break; case 10: #region MyRegion------收到的域名Server消息-----心跳回应------------- //Console.WriteLine("收到心跳包: " + zMsg); o_通信器.S_发送消息(10, "0"); o_在线时间 = C_Toot.S_Get时间搓int(); #endregion break; case 50: //z玩家ID &z密码--------------- #region MyRegion---------------玩家精确登陆---------- Console.WriteLine("玩家精确登陆----------- " + zMsg); sss = zMsg.Split('&'); zID = long.Parse(sss[0]); if (C_玩家.o_玩家总列表.ContainsKey(zID) == true) { o_雇主 = C_玩家.o_玩家总列表[zID]; if (o_雇主.o_库名.Length > 4) //是否是正规玩家------ { ss = C_Server.ooo.o_数据库.S_用户登陆(zID, sss[1]); o_通信器.S_发送消息(50, ss); //&用户名/-5==密码错误/-10==用户不存在 } else { o_通信器.S_发送消息(50, "-10"); //&用户名/-5==密码错误/-10==用户不存在 } o_雇主.o_Tcp通信 = this; Console.WriteLine("玩家________存在_____"); } else { o_通信器.S_发送消息(50, "-10"); //&用户名/-5==密码错误/-10==用户不存在 if (C_玩家.o_临时玩家列表.Contains(zID) == false) { C_玩家 nn = new C_玩家("1", zID, true); o_雇主 = nn; nn.o_Tcp通信 = this; Console.WriteLine("玩家______不存在_____创建临时玩家_______________________"); } else //重复登录-------------------- { o_雇主 = C_玩家.o_玩家总列表[zID]; o_雇主.o_Tcp通信 = this; Console.WriteLine("玩家______不存在_____临时玩家存在__________________"); } } o_在线时间 = C_Toot.S_Get时间搓int(); #endregion break; case 500: //----单人匹配----------------------- o_通信器.S_发送消息(500, "0"); //进入匹配界面----------- if (C_游戏房间.o_单人匹配列表.Contains(o_雇主) == false) { C_游戏房间.o_单人匹配列表.Add(o_雇主); } break; case 501: //zID &zID ........ #region MyRegion------组队请求5v5匹配-------- //zID &zID ........ sss = zMsg.Split('&'); List <C_玩家> z列表 = new List <C_玩家>(); for (int i = 0; i < sss.Length; i++) { try { zID = int.Parse(sss[i]); if (C_玩家.o_玩家总列表.ContainsKey(zID) == true) { C_玩家 nn = C_玩家.o_玩家总列表[zID]; nn.o_Tcp通信.o_通信器.S_发送消息(500, "0"); //进入匹配界面----- z列表.Add(nn); } else { } } catch (Exception ex) { Console.WriteLine("组队匹配__玩家ID不正确________" + ex.Message); return; } } C_游戏房间.o_团队匹配列表.Add(z列表); #endregion break; case 503: //取消匹配等待------------------- #region MyRegion--------取消匹配等待------------------- if (C_游戏房间.o_单人匹配列表.Contains(o_雇主)) { C_游戏房间.o_单人匹配列表.Remove(o_雇主); o_通信器.S_发送消息(503, "00"); } else { for (int i = 0; i < C_游戏房间.o_团队匹配列表.Count; i++) { if (C_游戏房间.o_团队匹配列表[i].Contains(o_雇主)) { List <C_玩家> z列表0 = C_游戏房间.o_团队匹配列表[i]; for (int x = 0; x < z列表0.Count; x++) { z列表0[x].o_Tcp通信.o_通信器.S_发送消息(503, "00"); } C_游戏房间.o_团队匹配列表.Remove(z列表0); break; } } } #endregion break; case 510: //z请求玩家加入队伍---------//z房主ID,z房主头像,z房主姓名,z请求ID #region MyRegion---z请求玩家加入队伍--------- //z房主ID,z房主头像,z房主姓名,z请求ID sss = zMsg.Split('&'); zID = long.Parse(sss[3]); if (C_玩家.o_玩家总列表.ContainsKey(zID) == true) { C_玩家.o_玩家总列表[zID].o_Tcp通信.o_通信器.S_发送消息(510, zMsg); } #endregion break; case 512: //z玩家同意加入队伍--------//z房主ID,zID,z头像,z姓名 #region MyRegion-------z玩家同意加入队伍-------- //z房主ID,zID,z头像,z姓名 sss = zMsg.Split('&'); zID = long.Parse(sss[0]); if (C_玩家.o_玩家总列表.ContainsKey(zID) == true) { C_玩家.o_玩家总列表[zID].o_Tcp通信.o_通信器.S_发送消息(512, zMsg); } #endregion break; case 514: //z收到队伍消息--------//z位置,z消息 @ zID,z头像,z姓名@zID,z头像,z姓名@ ..... #region MyRegion---z收到队伍消息----- //z位置,z消息 @ zID,z头像,z姓名@zID,z头像,z姓名@ ..... sss = zMsg.Split('@'); for (int i = 1; i < sss.Length; i++) //消息群发-------------- { string[] sss2 = sss[i].Split('&'); zID = int.Parse(sss2[0]); if (C_玩家.o_玩家总列表.ContainsKey(zID) == true) { C_玩家.o_玩家总列表[zID].o_Tcp通信.o_通信器.S_发送消息(514, zMsg); } } #endregion break; case 516: //退出队伍-------------//z位置,z原因索引 @ zID,z头像,z姓名@zID,z头像,z姓名@ ..... #region MyRegion----退出队伍---- //z位置,z原因索引 @ zID,z头像,z姓名@zID,z头像,z姓名@ ..... sss = zMsg.Split('@'); for (int i = 1; i < sss.Length; i++) //消息群发-------------- { string[] sss2 = sss[i].Split('&'); zID = int.Parse(sss2[0]); if (C_玩家.o_玩家总列表.ContainsKey(zID) == true) { C_玩家.o_玩家总列表[zID].o_Tcp通信.o_通信器.S_发送消息(516, zMsg); } } #endregion break; case 518: //队伍被解散------------- #region MyRegion---队伍被解散------------- sss = zMsg.Split('&'); for (int i = 0; i < sss.Length; i++) //消息群发-------------- { zID = int.Parse(sss[i]); if (C_玩家.o_玩家总列表.ContainsKey(zID) == true) { C_玩家.o_玩家总列表[zID].o_Tcp通信.o_通信器.S_发送消息(518, zMsg); } } #endregion break; case 526: //解散房间----------------- #region MyRegion-------解散房间---房间号---- int z房间号 = int.Parse(zMsg); if (C_游戏房间.o_房间集合.ContainsKey(z房间号) == true) { Console.WriteLine("解散房间__" + zMsg); C_游戏房间 mm = C_游戏房间.o_房间集合[z房间号]; for (int i = 0; i < mm.o_玩家列表.Count; i++) { if (mm.o_玩家列表[i].o_Tcp通信.o_通信器 != null) { o_通信器.S_发送消息(526, zMsg); mm.o_玩家列表[i].o_游戏房间 = null; } } C_游戏房间.o_房间集合.Remove(z房间号); } else { Console.WriteLine("房间__" + zMsg + "_____不存在,无法解散"); } #endregion break; case 610: S_游戏房间_群发(z消息类型, zMsg, zData); break; case 630: S_游戏房间_群发(z消息类型, zMsg, zData); break; case 631: S_游戏房间_群发(z消息类型, zMsg, zData); break; case 633: S_游戏房间_群发(z消息类型, zMsg, zData); break; case 660: S_游戏房间_群发(z消息类型, zMsg, zData); break; case 810: //添加好友------------------ #region MyRegion------添加好友---------- sss = zMsg.Split('&'); zID = int.Parse(sss[0]); if (C_玩家.o_玩家总列表.ContainsKey(zID) == true) { C_玩家.o_玩家总列表[zID].o_Tcp通信.o_通信器.S_发送消息(811, zMsg); o_通信器.S_发送消息(810, sss[0] + "&1"); } else { o_通信器.S_发送消息(810, sss[0] + "&0"); } #endregion break; case 813: //z收到好友消息--------z发送者ID,z接收者ID,z表情编号,z消息内容------ #region MyRegion----z收到好友消息--------z发送者ID,z接收者ID,z表情编号,z消息内容------ sss = zMsg.Split('&'); zID = int.Parse(sss[1]); if (C_玩家.o_玩家总列表.ContainsKey(zID) == true) { C_玩家.o_玩家总列表[zID].o_Tcp通信.o_通信器.S_发送消息(813, zMsg); } else { o_通信器.S_发送消息(815, sss[0] + "&0"); //好友不在线--- } #endregion break; case 815: //z好友是否在线------z好友ID,z是否在心@ ...------------ #region MyRegion--z好友是否在线------z好友ID,z是否在心@ ...------------ sss = zMsg.Split('&'); ss = ""; for (int i = 0; i < sss.Length; i++) { zID = int.Parse(sss[i]); if (C_玩家.o_玩家总列表.ContainsKey(zID) == true) { ss += sss[i] + "&1@"; //在线-- } else { ss += sss[i] + "&0@"; //不在线-- } } if (ss.Length > 3) { ss = ss.Remove(ss.Length - 1, 1); } o_通信器.S_发送消息(815, ss); #endregion break; } }