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