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;
            }
        }