示例#1
0
        private void CreatNewSocket(ReturnServerIP returnServerIP, Socket sc, string openID)
        {
            sc.Close();
            IPAddress ipaddress;
            EndPoint  point;

            sc        = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            ipaddress = IPAddress.Parse(returnServerIP.Ip);
            point     = new IPEndPoint(ipaddress, int.Parse(returnServerIP.Port));
            sc.Connect(point);
            SendAddServer sendAddServer = SendAddServer.CreateBuilder()
                                          .SetOpenid(openID)
                                          .SetUnionid(openID)
                                          .Build();

            byte[] body = sendAddServer.ToByteArray();
            byte[] data = CreateHead.CreateMessage(CreateHead.CSXYNUM + 1011, body.Length, 0, body);
            sc.Send(data);
        }
示例#2
0
        /// <summary>
        /// 根据服务器名称获取并发送给客户端 ip和端口
        /// </summary>
        /// <param name="serverName">服务器名称</param>
        /// <param name="messageNum">收到的消息号</param>
        /// <param name="session"></param>
        /// <param name="status">状态 1为正常切换服务器,2为有牌局为结束</param>
        /// <returns></returns>
        public static bool GetServerIP(string serverName, int messageNum, GameSession session, int status, UserInfo userinfo)
        {
            XmlDocument       doc      = new XmlDocument();
            XmlReaderSettings settings = new XmlReaderSettings();

            settings.IgnoreComments = true;//忽略文档里面的注释
            string ip   = string.Empty;
            string port = string.Empty;

            using (var reader = XmlReader.Create(@"ServerNameList.xml", settings))
            {
                doc.Load(reader);
                XmlNode nodeList = doc.SelectSingleNode("servers");
                foreach (XmlNode item in nodeList.ChildNodes)
                {
                    XmlElement xe = (XmlElement)item;
                    if (xe.GetAttribute("name").Equals(serverName))
                    {
                        ip   = xe.ChildNodes[0].InnerText;
                        port = xe.ChildNodes[1].InnerText;
                    }
                }
            }
            if (string.IsNullOrEmpty(ip) || string.IsNullOrEmpty(port))
            {
                session.Logger.Error(string.Format("服务器配置文件不存在 {0} 服务器", serverName));
                XmlNode nodeList = doc.SelectSingleNode("servers");
                foreach (XmlNode item in nodeList.ChildNodes)
                {
                    XmlElement xe = (XmlElement)item;
                    if (xe.GetAttribute("name").Equals(GameInformationBase.DEFAULTGAMESERVERNAME))
                    {
                        ip   = xe.ChildNodes[0].InnerText;
                        port = xe.ChildNodes[1].InnerText;
                    }
                }
                GetClient().KeyDelete(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERGAME, userinfo.openid, userinfo.unionid));
            }
            ReturnServerIP.Builder serverIP = ReturnServerIP.CreateBuilder();
            serverIP.SetIp(ip).SetPort(port).SetStatus(status);
            byte[] serverIPData = serverIP.Build().ToByteArray();
            return(session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1010, serverIPData.Length, messageNum, serverIPData))));
        }
示例#3
0
        /// <summary>
        /// 根据消息号分发给不同的方法
        /// </summary>
        /// <param name="news"></param>
        public void MethodsByNew(int news, byte[] body, string openid, Socket sc, int operation = 1, int roomid = 0)
        {
            switch (news)
            {
            case CreateHead.CSXYNUM + 1010:
                var returnServerIP = ReturnServerIP.ParseFrom(body);
                CreatNewSocket(returnServerIP, sc, openid);
                //GameInfo.returnServerIP = returnServerIP;
                //Debug.Log(CreateHead.CSXYNUM + 1010 + "务器返回IP和端口" + returnServerIP.ToString()); OutLog.log(CreateHead.CSXYNUM + 1010 + returnServerIP.ToString());
                break;

            case CreateHead.CSXYNUM + 1012:
                SendCreatRoomMessage(sc, openid, 1, 0, 1, 1, 1, 4, 8, "0,0", 1, 1);
                //var returnAddServer = ReturnAddServer.ParseFrom(body);
                //GameInfo.returnAddServer = returnAddServer;
                //Debug.Log(CreateHead.CSXYNUM + 1012 + "连接上服务器后,服务器返回状态" + returnAddServer.ToString()); OutLog.log(CreateHead.CSXYNUM + 1012 + returnAddServer.ToString());
                break;

            case 11002:    //服务器返回登录信息

                OnCreatRoomClick(sc, openid, operation, roomid);
                //   GameInfo.returnlogin = ReturnLogin.ParseFrom(body);
                //Debug.Log("11002:" + GameInfo.returnlogin.Loginstat);
                //OutLog.log("11002:" + GameInfo.returnlogin.Loginstat);
                break;

            case 12002:    //服务器返回房间信息
                //  GameInfo.returnCreatRoom = ReturnCreateRoom.ParseFrom(body);
                //  Debug.Log("12002:" + "返回房间信息");// + GameInfo.returnCreatRoom.ToString());
                //   OutLog.log("12002:");// + GameInfo.returnCreatRoom.ToString());
                break;

            case 12004:    //服务器返回加入信息
                //  GameInfo.returnAddRoom = ReturnAddRoom.ParseFrom(body);
                //Debug.Log("12004:" + GameInfo.returnAddRoom.ToString());
                //  OutLog.log("12004:" + GameInfo.returnAddRoom.ToString());
                break;

            case 12005:    //服务器主动推送加入玩家信息
                //var returnUserInfo = ReturnUserInfo.ParseFrom(body);
                //GameInfo.returnUserInfo = returnUserInfo;
                //Debug.Log("12005:" + "服务端主动推送加入玩家信息" + returnUserInfo.ToString()); OutLog.log("12005:" + returnUserInfo.ToString());
                break;

            case 12006:    //服务器返回主动推送游戏开始信息
                //var returnStartGame = ReturnStartGame.ParseFrom(body);
                //GameInfo.returnStartGame = returnStartGame;
                //Debug.Log("12006:" + "服务端推送游戏开始信息" + returnStartGame.ToString()); OutLog.log("12006:" + returnStartGame.ToString());
                break;

            case 12008:    //服务器返回开始游戏
                //var returnStart = ReturnStart.ParseFrom(body);
                //GameInfo.returnStart = returnStart;
                //Debug.Log("12008:" + "开始游戏" + returnStart.ToString()); OutLog.log("12008:" + returnStart.ToString());
                break;

            case 12010:    //服务器返回开始游戏
                //var returnTTorTH = ReturnTTATH.ParseFrom(body);
                //GameInfo.returnTTOrTH = returnTTorTH;
                //Debug.Log("12010:" + "返回打出叫牌的集合" + returnTTorTH.ToString()); OutLog.log("12010:" + returnTTorTH.ToString());
                break;

            case 13009:    //返回出牌信息,出牌方,出牌的花色
                //var returnMsg = ReturnMsg.ParseFrom(body);
                //GameInfo.returnMsg = returnMsg;
                //Debug.Log("13009:" + "下发打出牌的消息" + returnMsg.ToString()); OutLog.log("13009:" + returnMsg.ToString());
                break;

            case 13008:    //返回碰杠胡摸 四个信息和 方位
                //var returnAll = ReturnAll.ParseFrom(body);
                //GameInfo.returnAll = returnAll;
                //Debug.Log("13008:" + "下发碰杠胡消息" + returnAll.ToString()); OutLog.log("13008:" + returnAll.ToString());
                break;

            case CreateHead.CSXYNUM + 3003:    //返回摸牌
                //var returnMP = ReturnMP.ParseFrom(body);
                //GameInfo.returnMP = returnMP;
                //Debug.Log(CreateHead.CSXYNUM + 3003 + "返回摸牌 " + returnMP.ToString()); OutLog.log(CreateHead.CSXYNUM + 3003 + returnMP.ToString());
                break;

            case CreateHead.CSXYNUM + 4002:    //返回下发碰杠胡消息
                //var returnPeng = ReturnPeng.ParseFrom(body);
                //GameInfo.returnPeng = returnPeng;
                //Debug.Log(CreateHead.CSXYNUM + 4002 + "下发碰杠胡后消息" + returnPeng.ToString()); OutLog.log(CreateHead.CSXYNUM + 4002 + returnPeng.ToString());
                break;

            case CreateHead.CSXYNUM + 5002:    //返回听牌方位
                //var returnBTMsg = ReturnBTMsg.ParseFrom(body);
                //GameInfo.returnBTMSG = returnBTMsg;
                //Debug.Log(CreateHead.CSXYNUM + 5002 + "返回听牌方位" + returnBTMsg.ToString()); OutLog.log(CreateHead.CSXYNUM + 5002 + returnBTMsg.ToString());
                break;

            case CreateHead.CSXYNUM + 5013:    //返回听牌方位
                //var returnTT = ReturnTT.ParseFrom(body);
                //GameInfo.returnTT = returnTT;
                //Debug.Log(CreateHead.CSXYNUM + 5013 + "返回天听方位(所有人)" + returnTT.ToString()); OutLog.log(CreateHead.CSXYNUM + 5013 + returnTT.ToString());
                break;

            case CreateHead.CSXYNUM + 6001:    //返回是否、
                //var returnRecon = ReturnRecon.ParseFrom(body);
                //GameInfo.returnRecon = returnRecon;
                //Debug.Log(CreateHead.CSXYNUM + 6001 + "判断是否断线重连" + returnRecon.ToString()); OutLog.log(CreateHead.CSXYNUM + 6001 + returnRecon.ToString());
                break;

            case CreateHead.CSXYNUM + 7001:    //返回断线前消息
                //var returnConnData = ReturnConnData.ParseFrom(body);
                //GameInfo.returnConnData = returnConnData;
                //Debug.Log(CreateHead.CSXYNUM + 7001 + "返回断线前信息" + returnConnData.ToString()); OutLog.log(CreateHead.CSXYNUM + 7001 + returnConnData.ToString());
                break;

            case CreateHead.CSXYNUM + 7002:    //返回重新发牌信息
                //var returnMsgList = ReturnMsgList.ParseFrom(body);
                //GameInfo.returnMsgList = returnMsgList;
                //Debug.Log(CreateHead.CSXYNUM + 7002 + "返回重发信息" + returnMsgList.ToString()); OutLog.log(CreateHead.CSXYNUM + 7002 + returnMsgList.ToString());
                break;

            case CreateHead.CSXYNUM + 7004:    //返回活跃用户
                //while (true)
                //{
                //    if (GameInfo.returnHyUser == null)
                //    {
                //        var returnHyUser = ReturnHyUser.ParseFrom(body);
                //        GameInfo.returnHyUser = returnHyUser;
                //        Debug.Log(CreateHead.CSXYNUM + 7004 + "返回活跃用户" + returnHyUser.ToString()); OutLog.log(CreateHead.CSXYNUM + 7004 + returnHyUser.ToString());
                //        break;
                //    }
                //    else
                //    {
                //        Thread.Sleep(200);
                //    }
                //}
                break;

            case CreateHead.CSXYNUM + 7005:    //返回翻鸡牌
                //var returnFJ = ReturnFJ.ParseFrom(body);
                //GameInfo.returnFJ = returnFJ;
                //Debug.Log(CreateHead.CSXYNUM + 7005 + "返回翻鸡牌" + returnFJ.ToString()); OutLog.log(CreateHead.CSXYNUM + 7005 + returnFJ.ToString());
                break;

            case CreateHead.CSXYNUM + 2009:    //返回打出叫牌的集合
                //var returnTP = ReturnTP.ParseFrom(body);
                //GameInfo.returnTP = returnTP;
                //Debug.Log(CreateHead.CSXYNUM + 2009 + "返回打出叫牌的集合" + returnTP.ToString()); OutLog.log(CreateHead.CSXYNUM + 2009 + returnTP.ToString());
                break;

            case CreateHead.CSXYNUM + 7009:    //返回结算信息(全体)
                //var returnJS = ReturnJS.ParseFrom(body);
                //GameInfo.returnJS = returnJS;
                //Debug.Log(CreateHead.CSXYNUM + 7009 + "返回结算信息(全体)" + returnJS.ToString()); OutLog.log(CreateHead.CSXYNUM + 7009 + returnJS.ToString());
                break;

            case CreateHead.CSXYNUM + 5004:    //返回请求解散房间信息(所有人接收,客户端自主判断是否显示)
                //var returnJSMsg = ReturnJSMsg.ParseFrom(body);
                //GameInfo.returnJSMsg = ReturnJSMsg.ParseFrom(body);
                //Debug.Log(CreateHead.CSXYNUM + 5004 + "返回请求解散房间信息" + returnJSMsg.ToString()); OutLog.log(CreateHead.CSXYNUM + 5004 + returnJSMsg.ToString());
                break;

            case CreateHead.CSXYNUM + 5006:    //返回单个用户同意解散房间信息
                //var returnJSByOnew = ReturnJSByOnew.ParseFrom(body);
                //GameInfo.returnJSByOnew = returnJSByOnew;
                //Debug.Log(CreateHead.CSXYNUM + 5006 + "返回单个用户同意信息" + returnJSByOnew.ToString()); OutLog.log(CreateHead.CSXYNUM + 5006 + returnJSByOnew.ToString());
                break;

            case CreateHead.CSXYNUM + 5007:    //返回集体消息是否解散房间
                //var returnALLIdea = ReturnAllIdea.ParseFrom(body);
                //GameInfo.returnALLIdea = returnALLIdea;
                //Debug.Log(CreateHead.CSXYNUM + 5007 + "返回集体消息是否解散房间" + returnALLIdea.ToString()); OutLog.log(CreateHead.CSXYNUM + 5007 + returnALLIdea.ToString());
                break;

            case CreateHead.CSXYNUM + 5009:    //服务端返回退出玩家
                //var returnRemoveUser = ReturnRemoveUser.ParseFrom(body);
                //GameInfo.returnRemoveUser = returnRemoveUser;
                //Debug.Log(CreateHead.CSXYNUM + 5009 + "服务端返回退出玩家" + returnRemoveUser.ToString()); OutLog.log(CreateHead.CSXYNUM + 5009 + returnRemoveUser.ToString());
                break;

            case CreateHead.CSXYNUM + 7003:    //返回房间信息
                //var returnRoomMsg = ReturnRoomMsg.ParseFrom(body);
                //GameInfo.returnRoomMsg = returnRoomMsg;
                //Debug.Log(CreateHead.CSXYNUM + 7003 + "返回房间信息" + returnRoomMsg.ToString()); OutLog.log(CreateHead.CSXYNUM + 7003 + returnRoomMsg.ToString());
                break;

            case CreateHead.CSXYNUM + 7008:    //玩家手牌集合
                //var returnUserSPai = ReturnUserSPai.ParseFrom(body);
                //GameInfo.returnUserSPai = returnUserSPai;
                //Debug.Log(CreateHead.CSXYNUM + 7008 + "玩家手牌集合" + returnUserSPai.ToString()); OutLog.log(CreateHead.CSXYNUM + 7008 + returnUserSPai.ToString());
                break;

            case CreateHead.CSXYNUM + 5012:    //服务器下发定缺信息
                //var returnAYM = ReturnAYM.ParseFrom(body);
                //GameInfo.returnAYM = returnAYM;
                //Debug.Log(CreateHead.CSXYNUM + 5012 + "返回缺牌信息" + returnAYM.ToString()); OutLog.log(CreateHead.CSXYNUM + 5012 + returnAYM.ToString());
                break;

            case CreateHead.CSXYNUM + 5015:    //返回胡牌(替换原3008的胡
                //var returnHByType = ReturnHByType.ParseFrom(body);
                //GameInfo.returnHByType = returnHByType;
                //Debug.Log(CreateHead.CSXYNUM + 5015 + "返回胡牌" + returnHByType.ToString()); OutLog.log(CreateHead.CSXYNUM + 5015 + returnHByType.ToString());
                break;

            case CreateHead.CSXYNUM + 7006:    //返回剩余牌堆数目
                //var returnPaiCount = ReturnPaiCount.ParseFrom(body);
                //GameInfo.returnPaiCount = returnPaiCount;
                //Debug.Log(CreateHead.CSXYNUM + 7006 + "返回剩余牌堆数" + returnPaiCount.ToString()); OutLog.log(CreateHead.CSXYNUM + 7006 + returnPaiCount.ToString());
                break;

            case CreateHead.CSXYNUM + 1:    //心跳
                //GameInfo.UserHearbeat = 0;
                break;

            case CreateHead.CSXYNUM + 5014:
                //var returnDJS = ReturnDJS.ParseFrom(body);
                //GameInfo.returnDJS = returnDJS;
                //Debug.Log(CreateHead.CSXYNUM + 5014 + "大结算信息" + returnDJS.ToString()); OutLog.log(CreateHead.CSXYNUM + 5014 + returnDJS.ToString());
                break;

            case CreateHead.CSXYNUM + 5018:
                //var returnZR = ReturnZR.ParseFrom(body);
                //GameInfo.returnZR = returnZR;
                //Debug.Log(CreateHead.CSXYNUM + 5018 + "下发责任鸡消息" + returnZR.ToString()); OutLog.log(CreateHead.CSXYNUM + 5018 + returnZR.ToString());
                break;

            case CreateHead.CSXYNUM + 5020:
                //var returnZhuang = ReturnZhuang.ParseFrom(body);
                //GameInfo.returnZhuang = returnZhuang;
                //Debug.Log(CreateHead.CSXYNUM + 5020 + "返回庄" + returnZhuang.ToString()); OutLog.log(CreateHead.CSXYNUM + 5020 + returnZhuang.ToString());
                break;

            case CreateHead.CSXYNUM + 5021:
                //var returnHType = ReturnHType.ParseFrom(body);
                //GameInfo.returnHType = returnHType;
                //Debug.Log(CreateHead.CSXYNUM + 5021 + "返回胡信息" + returnHType.ToString()); OutLog.log(CreateHead.CSXYNUM + 5021 + returnHType.ToString());
                break;

            case CreateHead.CSXYNUM + 5022:
                //var returnGang = ReturnGang.ParseFrom(body);
                //GameInfo.returnGang = returnGang;
                //Debug.Log(CreateHead.CSXYNUM + 5022 + "返回杠消息" + returnGang.ToString()); OutLog.log(CreateHead.CSXYNUM + 5022 + returnGang.ToString());
                break;

            case CreateHead.CSXYNUM + 7090:
                //var returnRoomAdd = ReturnRoomAdd.ParseFrom(body);
                //GameInfo.returnRoomAdd = returnRoomAdd;
                //Debug.Log(CreateHead.CSXYNUM + 7090 + "返回加入房间状态" + returnRoomAdd.ToString()); OutLog.log(CreateHead.CSXYNUM + 7090 + returnRoomAdd.ToString());
                break;

            case CreateHead.CSXYNUM + 7091:
                //var returnDis = ReturnDis.ParseFrom(body);
                //GameInfo.returnDis = returnDis;
                //Debug.Log(CreateHead.CSXYNUM + 7091 + "返回用户距离" + returnDis.ToString()); OutLog.log(CreateHead.CSXYNUM + 7091 + returnDis.ToString());
                break;

            case CreateHead.CSXYNUM + 7092:
                //   QueRenKaishi(sc, openid);
                //var returnIsJ = ReturnIsJ.ParseFrom(body);
                //GameInfo.returnIsJ = returnIsJ;
                //Debug.Log(CreateHead.CSXYNUM + 7092 + "返回是否有相近用户" + returnIsJ.ToString()); OutLog.log(CreateHead.CSXYNUM + 7092 + returnIsJ.ToString());
                break;

            case CreateHead.CSXYNUM + 7093:
                //var returnIPSame = ReturnIPSame.ParseFrom(body);
                //GameInfo.returnIPSame = returnIPSame;
                //Debug.Log(CreateHead.CSXYNUM + 7093 + "返回是否有相同IP" + returnIPSame.ToString()); OutLog.log(CreateHead.CSXYNUM + 7093 + returnIPSame.ToString());
                break;

            case CreateHead.CSXYNUM + 8001:
                //var returnAnnouncement = ReturnAnnouncement.ParseFrom(body);
                //GameInfo.returnAnnouncement = returnAnnouncement;
                //Debug.Log(CreateHead.CSXYNUM + 8001 + "返回公告信息" + returnAnnouncement.ToString()); OutLog.log(CreateHead.CSXYNUM + 8001 + returnAnnouncement.ToString());
                break;

            case CreateHead.CSXYNUM + 8003:
                //var returnVoice = ReturnVoice.ParseFrom(body);
                //GameInfo.returnVoice = returnVoice;
                //Debug.Log(CreateHead.CSXYNUM + 8003 + "返回语音信息" + returnVoice.ToString()); OutLog.log(CreateHead.CSXYNUM + 8003 + returnVoice.ToString());
                break;

            case CreateHead.CSXYNUM + 8004:
                //var returnConnectionStatus = ReturnConnectionStatus.ParseFrom(body);
                //GameInfo.returnConnectionStatus = returnConnectionStatus;
                //Debug.Log(CreateHead.CSXYNUM + 8004 + "返回连接状态" + returnConnectionStatus.ToString()); OutLog.log(CreateHead.CSXYNUM + 8004 + returnConnectionStatus.ToString());
                break;

            case CreateHead.CSXYNUM + +9002:
                //var returnUserRecord = ReturnUserRecord.ParseFrom(body);
                //GameInfo.returnUserRecord = returnUserRecord;
                //Debug.Log(CreateHead.CSXYNUM + 9002 + "返回用户战绩列表" + returnUserRecord.ToString()); OutLog.log(CreateHead.CSXYNUM + 9002 + returnUserRecord.ToString());
                break;

            case CreateHead.CSXYNUM + +9004:
                //var returnGetUserGamePlayback = ReturnGetUserGamePlayback.ParseFrom(body);
                //GameInfo.returnGetUserGamePlayback = returnGetUserGamePlayback;
                //Debug.Log(CreateHead.CSXYNUM + 9004 + "根据牌桌信息ID返回多局牌集合" + returnGetUserGamePlayback.ToString()); OutLog.log(CreateHead.CSXYNUM + 9004 + returnGetUserGamePlayback.ToString());
                break;

            case CreateHead.CSXYNUM + +7095:
                //var returnIsJ5Seconds = ReturnIsJ5Seconds.ParseFrom(body);
                //GameInfo.returnIsJ5Seconds = returnIsJ5Seconds;
                //Debug.Log(CreateHead.CSXYNUM + 7095 + "每五秒返回是否有相近用户" + returnIsJ5Seconds.ToString()); OutLog.log(CreateHead.CSXYNUM + 7095 + returnIsJ5Seconds.ToString());
                break;

            case CreateHead.CSXYNUM + +7096:
                //var returnIPSame5Seconds = ReturnIPSame5Seconds.ParseFrom(body);
                //GameInfo.returnIPSame5Seconds = returnIPSame5Seconds;
                //Debug.Log(CreateHead.CSXYNUM + 7096 + "每五秒返回是否y有相同IP" + returnIPSame5Seconds.ToString()); OutLog.log(CreateHead.CSXYNUM + 7096 + returnIPSame5Seconds.ToString());
                break;

            case CreateHead.CSXYNUM + +7097:
                //var returnCloseGPS = ReturnCloseGPS.ParseFrom(body);
                //GameInfo.returnCloseGPS = returnCloseGPS;
                //Debug.Log(CreateHead.CSXYNUM + 7097 + "返回是否开启GPS" + returnCloseGPS.ToString()); OutLog.log(CreateHead.CSXYNUM + 7097 + returnCloseGPS.ToString());
                break;
            }
        }