protected virtual void HandleGetRoomAccess(IIncommingMessage message) { RoomAccessRequestPacket data = message.Deserialize(new RoomAccessRequestPacket()); // AlbotAlphaKeysModule.handleRoomAccessRequst (message.Peer); RegisteredRoom room; Rooms.TryGetValue(data.RoomId, out room); if (room == null) { message.Respond("Room does not exist", ResponseStatus.Failed); return; } if (!string.IsNullOrEmpty(room.Options.Password) && room.Options.Password != data.Password) { message.Respond("Invalid password", ResponseStatus.Unauthorized); return; } // Send room access request to peer who owns it room.GetAccess(message.Peer, data.Properties, (packet, error) => { if (packet == null) { message.Respond(error, ResponseStatus.Unauthorized); return; } message.Respond(packet, ResponseStatus.Success); }); }
/// <summary> /// Tries to get an access to a room with a given room id, password, /// and some other <paramref name="customOptions"/>, which will be visible to the room (game server) /// </summary> /// <param name="roomId"></param> /// <param name="password"></param> /// <param name="customOptions"></param> /// <param name="callback"></param> /// <param name="connection"></param> public void GetAccess(int roomId, string password, DictionaryOptions customOptions, RoomAccessCallback callback, IClientSocket connection) { if (!connection.IsConnected) { callback.Invoke(null, "Not connected"); return; } var roomAccessRequestPacket = new RoomAccessRequestPacket() { RoomId = roomId, CustomOptions = customOptions, Password = password }; connection.SendMessage((short)MsfMessageCodes.GetRoomAccessRequest, roomAccessRequestPacket, (status, response) => { if (status != ResponseStatus.Success) { callback.Invoke(null, response.AsString("Unknown Error")); return; } var access = response.Deserialize(new RoomAccessPacket()); LastReceivedAccess = access; callback.Invoke(access, null); OnAccessReceivedEvent?.Invoke(access); }); }
/// <summary> /// Tries to get an access to a room with a given room id, password, /// and some other properties, which will be visible to the room (game server) /// </summary> public void GetAccess(int roomId, RoomAccessCallback callback, string password, Dictionary <string, string> properties, IClientSocket connection) { if (!connection.IsConnected) { callback.Invoke(null, "Not connected"); return; } var packet = new RoomAccessRequestPacket() { RoomId = roomId, Properties = properties, Password = password }; connection.SendMessage((short)MsfOpCodes.GetRoomAccess, packet, (status, response) => { if (status != ResponseStatus.Success) { callback.Invoke(null, response.AsString("Unknown Error")); return; } var access = response.Deserialize(new RoomAccessPacket()); LastReceivedAccess = access; callback.Invoke(access, null); if (AccessReceived != null) { AccessReceived.Invoke(access); } if (RoomConnector.Instance != null) { RoomConnector.Connect(access); } }); }