Esempio n. 1
0
    // Update is called once per frame
    void Update()
    {
        if (GameInfo.operation == 2 && GameInfo.addStatus == 1)
        {
            GameInfo.cs.serverType = ServerType.GameServer;
            GameInfo.operation     = 0;
            GameInfo.addStatus     = 0;
            // SendAddRoomOne addRoomOne = SendAddRoomOne.CreateBuilder().SetRoomID(roomID).SetOpenid(GameInfo.OpenID).Build();

            // byte[] body = addRoomOne.ToByteArray();
            SendAddRoomOne addRoomOne = new SendAddRoomOne();
            addRoomOne.RoomID  = roomID;
            addRoomOne.openid  = GameInfo.OpenID;
            addRoomOne.GroupID = (int)GameInfo.GroupID;
            byte[] body = ProtobufUtility.GetByteFromProtoBuf(addRoomOne);
            byte[] data = CreateHead.CreateMessage(CreateHead.CSXYNUM + 7089, body.Length, 0, body);
            GameInfo.cs.Send(data);
        }
        if (GameInfo.returnAddRoom != null)
        {
            if (GameInfo.returnAddRoom.state == 10000)
            {
                GameInfo.room_id = roomID;
                //   isClosed = true;
                GameObject.Find("Main Camera").GetComponent <Manager_Hall>().isClosed = true;
                //加入房间成功
                // FICCreatRoom.MJplayers.Add(GameInfo.dir, GameInfo.returnAddRoom.UserinfoList[GameInfo.returnAddRoom.UserinfoCount - 1]);
                foreach (var item in GameInfo.returnAddRoom.userinfo)
                {
                    if (item.openid.Equals(GameInfo.OpenID))
                    {
                        GameInfo.FW = item.user_FW;
                    }
                    if (GameInfo.MJplayers.ContainsKey(item.user_FW))
                    {
                        GameInfo.MJplayers[item.user_FW] = item;
                    }
                    else
                    {
                        GameInfo.MJplayers.Add(item.user_FW, item);
                    }

                    GameInfo.MJplayersWhoQuit[item.openid] = item.user_FW;
                }
                //GameInfo.sceneID = "Scene_Game";
                // SceneManager.LoadScene("LoadingHall");
                //SceneManager.LoadScene("Scene_Game");
                GameInfo.returnAddRoom = null;
            }
            else if (GameInfo.returnAddRoom.state == 10001)
            {
                GameInfo.returnAddRoom = null;
                FICWaringPanel._instance.Show("房间不存在!");
            }
            else if (GameInfo.returnAddRoom.state == 10002)
            {
                GameInfo.returnAddRoom = null;
                //房间人数已满
                FICWaringPanel._instance.Show("房间人数已满!");
            }
        }
        if (GameInfo.returnRoomAdd != null)
        {
            if (GameInfo.returnRoomAdd.Start == 1)
            {
                GameObject.Find("Main Camera").GetComponent <Manager_Hall>().isClosed = true;
                GameInfo.gameName      = "GYMJ";
                GameInfo.sceneID       = "Game_GYMJ";
                GameInfo.isScoketClose = false;
                SceneManager.LoadScene("LoadingHall");
                GameInfo.returnRoomAdd = null;
            }
            else if (GameInfo.returnRoomAdd.Start == 2)
            {
                FICWaringPanel._instance.Show("房间人数已满!");
            }
            else if (GameInfo.returnRoomAdd.Start == 3)
            {
                FICWaringPanel._instance.Show("房间不存在!");
            }

            GameInfo.returnRoomAdd = null;
        }
    }
Esempio n. 2
0
        /// <summary>
        /// 加入房间判断,先加入房间
        /// </summary>
        /// <param name="session"></param>
        /// <param name="requestInfo"></param>
        public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo)
        {
            if (!Gongyong.userlist.Any(w => w.session.SessionID.Equals(session.SessionID)))
            {
                session.Logger.Debug("AddRoomOne : 非法连接");
                session.Close();
                return;
            }
            var      getdata  = SendAddRoomOne.ParseFrom(requestInfo.Body);
            var      senddata = ReturnRoomAdd.CreateBuilder();
            UserInfo user     = Gongyong.userlist.Find(u => u.openid == getdata.Openid);

            if (user == null)
            {
                return;
            }
            Room r = Gongyong.roomlist.Find(u => u.RoomID == getdata.RoomID);

            session.Logger.Debug("申请加入房间" + getdata.Openid);

            if (r == null)
            {
                senddata.SetStart(3);//3:房间不存在
            }
            //else if (r.listOpenid.Any(w => w.Equals(getdata.Openid)))
            //{
            //    senddata.SetStart(1);//1:加入成功 如果本来就在房间内则不占一个位置
            //}
            else if (r.listOpenid.Count + 1 == r.room_peo)
            {
                senddata.SetStart(2);//2:人数已满
            }
            else
            {
                senddata.SetStart(1);//1:加入成功
                r.listOpenid.Add(getdata.Openid);

                try
                {
                    //将牌桌信息保存
                    RedisUtility.Set <RedisGameModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERGAME, user.openid, user.unionid),
                                                      new RedisGameModel {
                        RoomID = r.RoomID, ServerName = GameInformationBase.serverName, Openid = user.openid, Unionid = user.unionid
                    });
                }
                catch (Exception ex)//用户加入房间时有可能redis 异常导致服务器内加入成功但是消息并未发送。
                {
                    session.Logger.Error(ex);
                    r.listOpenid.Remove(getdata.Openid);
                    return;
                }
                //session.Logger.Debug(getdata.Openid + " start : " + senddata.Start);
                //byte[] arr = senddata.Build().ToByteArray();

                //session.TrySend(new ArraySegment<byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 7090, arr.Length, requestInfo.MessageNum, arr)));
            }
            session.Logger.Debug(getdata.Openid + " start : " + senddata.Start);
            byte[] arr = senddata.Build().ToByteArray();

            session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 7090, arr.Length, requestInfo.MessageNum, arr)));
        }