static void S_创建竞技房间(List <C_玩家> z列表1, List <C_玩家> z列表2)
        {
            Console.WriteLine("__________S_创建竞技房间___________________");
            int z人员数量 = 2;

            z列表1 = z列表1.S_随机排序();
            z列表2 = z列表2.S_随机排序();
            List <C_玩家> z新列表 = new List <C_玩家>();

            for (int i = 0; i < z人员数量; i++)
            {
                z新列表.Add(z列表1[i]);
                z新列表.Add(z列表2[i]);
            }
            z列表1.Clear();
            z列表2.Clear();
            C_游戏房间 mm = new C_游戏房间(z新列表);
            string ss = mm.o_房间号.ToString("0000000000") + "@";

            for (int i = 0; i < z新列表.Count; i++)
            {
                ss += z新列表[i].o_ID + "&";
            }
            ss = ss.Remove(ss.Length - 1);
            for (int i = 0; i < z新列表.Count; i++)
            {
                try {
                    z新列表[i].o_Tcp通信.o_通信器.S_发送消息(505, ss + "@" + i);//房间号 @玩家ID&玩家ID... @z自身位置
                } catch {
                    //发送出错-----------
                }
            }
        }
 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;
            }
        }