public void GetRoomList(int wid, string openid, int hotelId) { AjaxResult ajaxResult; try { GetRoomListResponse responseData = null; IAsyncResult asyncResult = new BusEntry("WeixinPF.Hotel.Plugins").MyBus.Send("WeixinPF.Hotel.Plugins.Service", new GetRoomListRequest() { HotelId = hotelId }) .Register(response => { CompletionResult result = response.AsyncState as CompletionResult; if (result != null) { responseData = result.Messages[0] as GetRoomListResponse; } }, this); WaitHandle asyncWaitHandle = asyncResult.AsyncWaitHandle; asyncWaitHandle.WaitOne(WaitSeconds); ajaxResult = asyncResult.IsCompleted ? AjaxResult.Succeed(responseData.Rooms) : AjaxResult.Fail("获取房间列表失败。"); } catch { ajaxResult = AjaxResult.Fail("获取房间列表失败。"); } this.WriteJson(ajaxResult); }
public void GenerateRoomList(GetRoomListResponse resp) { int childCount = resp.roomCount; ResetChild(childCount); List <SimpleRoomInfo> roomInfoList = resp.roomInfo; int index = 0; foreach (SimpleRoomInfo info in roomInfoList) { setRoomData(info, index); index++; } }
public override async Task <GetRoomListResponse> GetRoomList(GetRoomListRequest request, ServerCallContext context) { var response = new GetRoomListResponse(); foreach (var room in await _rooms.GetAsync()) { response.Rooms.Add(new Protos.Room { Id = room.Id, Name = room.Name }); } return(response); }
private void ProcessMessage(IPEndPoint endPoint, byte[] buffer, int offset, int length, MmPeer peer) { //probably bad kind of using var operationCode = MessageBase.GetOperationCode(buffer, offset); _logger.Debug($"Message received. Operation code: {operationCode}"); peer = PeerCollection.Get(endPoint); if (peer == null) { _logger.Warning($"GamePeerListener.OnReceivePacketFromClient error: can not find peer for endpoint {endPoint.Address}:{endPoint.Port}"); return; } //listener handles only auth message, others are sent to roomManager switch (operationCode) { case ShamanOperationCode.Connect: _messageSender.Send(new ConnectedEvent(), peer); break; case ShamanOperationCode.Ping: //ping processing break; case ShamanOperationCode.Disconnect: OnClientDisconnect(endPoint, new SimpleDisconnectInfo(ShamanDisconnectReason.PeerLeave)); break; case ShamanOperationCode.Authorization: var authMessage = Serializer.DeserializeAs <AuthorizationRequest>(buffer, offset, length); if (!Config.IsAuthOn) { //if success - send auth success peer.IsAuthorizing = false; peer.IsAuthorized = true; //this sessionID will be got from backend, after we send authToken, which will come in player properties peer.SetSessionId(authMessage.SessionId); _messageSender.Send(new AuthorizationResponse(), peer); } else { //TODO authorizing logic throw new NotImplementedException(); } break; default: if (!peer.IsAuthorized && Config.IsAuthOn) { _messageSender.Send(new AuthorizationResponse() { ResultCode = ResultCode.NotAuthorized }, peer); return; } else { if (!peer.IsAuthorized) { _messageSender.Send(new AuthorizationResponse(), peer); } } switch (operationCode) { case ShamanOperationCode.PingRequest: _messageSender.Send(new PingResponse(), peer); break; case ShamanOperationCode.CreateRoomFromClient: var createRequest = Serializer.DeserializeAs <CreateRoomFromClientRequest>(buffer, offset, length); TaskScheduler.ScheduleOnceOnNow(async() => { var createResult = await _matchMakingGroupsManager.CreateRoom(peer.GetSessionId(), createRequest.MatchMakingProperties); //parse create result and create response var createResponse = new CreateRoomFromClientResponse(GetJoinInfo(createResult)); if (createResult.Result == RoomOperationResult.OK) { _logger.Info($"Room {createResult.RoomId} created"); } _messageSender.Send(createResponse, peer); }); break; case ShamanOperationCode.DirectJoin: var joinRequest = Serializer.DeserializeAs <DirectJoinRequest>(buffer, offset, length); TaskScheduler.ScheduleOnceOnNow(async() => { //join existing room var joinResult = await _roomManager.JoinRoom(joinRequest.RoomId, new Dictionary <Guid, Dictionary <byte, object> > { { peer.GetSessionId(), joinRequest.MatchMakingProperties } }, joinRequest.MatchMakingWeight, joinRequest.MatchMakingWeight); //parse join result and create response var joinResponse = new DirectJoinResponse(GetJoinInfo(joinResult)); if (joinResult.Result == RoomOperationResult.OK) { _logger.Info($"Player direct joined room {joinResult.RoomId}"); } _messageSender.Send(joinResponse, peer); }); break; case ShamanOperationCode.GetRoomList: var request = Serializer.DeserializeAs <GetRoomListRequest>(buffer, offset, length); var rooms = _matchMakingGroupsManager.GetRooms(request.MatchMakingProperties) .Select(r => new RoomInfo(r.Id, r.TotalWeightNeeded, r.CurrentWeight, r.Properties, r.State)) .ToList(); var getRoomsResponse = new GetRoomListResponse(); getRoomsResponse.Rooms = rooms; _messageSender.Send(getRoomsResponse, peer); break; case ShamanOperationCode.EnterMatchMaking: var enterMessage = Serializer.DeserializeAs <EnterMatchMakingRequest>(buffer, offset, length); if (enterMessage == null) { throw new Exception("Can not deserialize EnterMatchMakingRequest. Result is null"); } var properties = enterMessage.MatchMakingProperties; var requiredProperties = _matchMaker.GetRequiredProperties(); foreach (var property in requiredProperties) { if (!properties.ContainsKey(property)) { _logger.Error($"Player {peer.GetPeerId()} tried to enter matchmaking without property {property}"); _messageSender.Send(new EnterMatchMakingResponse(MatchMakingErrorCode.RequiredPlayerPropertyIsNotSet), peer); return; } } //add player _matchMaker.AddPlayer(peer, enterMessage.MatchMakingProperties, enterMessage.MatchMakingWeight); _messageSender.Send(new EnterMatchMakingResponse(), peer); break; case ShamanOperationCode.LeaveMatchMaking: //remove player _matchMaker.RemovePlayer(peer.GetPeerId()); //send response _messageSender.Send(new LeaveMatchMakingResponse(), peer); break; default: _messageSender.Send(new ErrorResponse(ResultCode.UnknownOperation), peer); return; } break; } }