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 void S_30秒_刷新网格列表()
        {
            Console.WriteLine("网格数----------------------" + o_网格列表.Count);
            int           z当前时间 = C_Toot.S_Get时间搓int();
            List <string> z清除列表 = new List <string>();

            foreach (var n in o_网格列表)
            {
                if (n.Value.o_通信器 == null || n.Value.o_通信器.o_通信对象 == null)
                {
                    z清除列表.Add(n.Key);
                }
                if (z当前时间 - n.Value.o_在线时间 > 62)
                {
                    Console.WriteLine("清除网格__" + n.Value.o_通信器.o_IP端口.O_String + "___时间差:" + (z当前时间 - n.Value.o_在线时间));
                    z清除列表.Add(n.Key);
                }
            }
            for (int i = 0; i < z清除列表.Count; i++)
            {
                o_网格列表.Remove(z清除列表[i]);
            }
            Dictionary <string, C_Tcp服务器> z在线玩家列表 = o_网格列表.Where(n => n.Key != n.Value.o_通信器.o_IP端口.O_IP).ToDictionary(n => n.Key, n => n.Value);

            foreach (var n in z在线玩家列表)
            {
                o_网格列表.Remove(n.Key);
                o_网格列表[n.Value.o_通信器.o_IP端口.O_IP] = n.Value;
            }
            S_群发服务器地址(true);
        }
Esempio n. 3
0
        public static void S_清楚过时的待机事件()
        {
            int         z当前时间 = C_Toot.S_Get时间搓int();
            List <m_IP> z清楚列表 = new List <m_IP>();

            foreach (var n in o_待机事件集合)
            {
                if (n.Value.Count > 0)
                {
                    for (int i = 0; i < n.Value.Count; i++)
                    {
                        if (z当前时间 - n.Value[i].o_在线时间 > 3)
                        {
                            n.Value[i].S_发送死亡消息(n.Key);
                            n.Value.RemoveAt(i);
                        }
                    }
                }
                else
                {
                    z清楚列表.Add(n.Key);
                }
            }
            for (int i = 0; i < z清楚列表.Count; i++)
            {
                o_待机事件集合.Remove(z清楚列表[i]);
            }
        }
Esempio n. 4
0
        //public override C_TcpClient.C_逻辑端 S_接口_初始化(C_TcpClient nn) {
        //    if (o_通信器 != null) {
        //        C_Serv客户端 mm = new C_Serv客户端();
        //        return mm.S_接口_初始化(nn);
        //    } else {
        //        o_通信器 = nn;
        //        return this;
        //    }
        //}
        public override void S_接口_消息处理(ushort z消息类型, string msg, byte[] zData)
        {
            //base.S_接口_消息处理(z消息类型, msg, zData);
            switch (z消息类型)
            {
            case 1:    //------------初次登陆-回应-------- z玩家地址-------
                //string ss = Encoding.UTF8.GetString(zData, 1, zData.Length - 1);
                Console.WriteLine("发送——初次登陆-回应----" + msg);
                string[] sss = msg.Split('&');
                C_LinkServer.ooo.o_Udp.S_发送消息(1, o_通信器.o_IP端口.O_IP, sss[1]);    //zIP地址-------------
                C_待机事件器.S_解除待机(new m_IP(sss[1]), 1, true);
                break;

            case 3:                                                                         //------------注册-回应------------ 1 &玩家地址  -------
                sss = msg.Split('&');
                C_LinkServer.ooo.o_Udp.S_发送消息(3, o_通信器.o_IP端口.O_IP + "&" + sss[0], sss[1]); //zIP地址  &1-------------
                break;

            case 10:
                #region MyRegion-------收到的Server--心跳消息---------------------------
                if (C_LinkServer.ooo.o_服务器列表.Contains(this) == false)
                {
                    C_LinkServer.ooo.o_服务器列表.Add(this);
                }
                Console.WriteLine("服务器_心跳__" + o_通信器.o_IP端口.O_String + "__________________用户数量:_" + msg);
                o_用户数量 = int.Parse(msg);
                o_在线时间 = C_Toot.S_Get时间搓int();
                #endregion
                break;
            }
        }
Esempio n. 5
0
        public C_待机事件器(byte[] zData, IPEndPoint z地址, bool z是否Udp)
        {
            o_Data  = zData;
            o_在线时间  = C_Toot.S_Get时间搓int();
            o_是否Udp = z是否Udp;
            m_IP o_地址 = new m_IP(z地址.ToString());

            if (o_待机事件集合.ContainsKey(o_地址) == false)
            {
                o_待机事件集合[o_地址] = new List <C_待机事件器>();
            }
            o_待机事件集合[o_地址].Add(this);
        }
Esempio n. 6
0
        static void S_60秒事件()
        {
            //Console.WriteLine("S_60秒事件---------");
            List <C_Serv客户端> z清除列表 = new List <C_Serv客户端>();

            foreach (var n in ooo.o_服务器列表)
            {
                if (C_Toot.S_Get时间搓int() - n.o_在线时间 > 70)
                {
                    z清除列表.Add(n);
                }
            }
            for (int i = 0; i < z清除列表.Count; i++)
            {
                ooo.o_服务器列表.Remove(z清除列表[i]);
            }
        }//离线服务器清除-------------
 public override void S_接口_消息处理(ushort z消息类型, string msg, byte[] zData)
 {
     switch (z消息类型)
     {
     case 20:                                                //z搜到服务器发来的心跳---z数据用户数量--z等待匹配数量--z在线玩家数量-----
         if (o_网格列表.ContainsKey(o_通信器.o_IP端口.O_IP) == false) //------z首次链接--------------
         {
             o_网格列表.Add(o_通信器.o_IP端口.O_IP, this);
             o_通信器.S_发送消息(20, S_群发服务器地址(false) + "@" + (o_网格列表.Count - 1));
             Console.WriteLine("TTT______网格链接成功_____________________");
         }
         Console.WriteLine("收到心跳_____" + o_通信器.o_IP端口.O_String + "___________" + msg);
         string[] sss = msg.Split('&');
         o_用户数量    = int.Parse(sss[0]);
         o_匹配的用户数量 = int.Parse(sss[1]);
         o_在线玩家数量  = int.Parse(sss[2]);
         o_在线时间    = C_Toot.S_Get时间搓int();
         break;
     }
 }
        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) + "");
            }
        }
        //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;
            }
        }