123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736 |
- /*******************************************************************************
- Copyright © 2015-2022 PICO Technology Co., Ltd.All rights reserved.
- NOTICE:All information contained herein is, and remains the property of
- PICO Technology Co., Ltd. The intellectual and technical concepts
- contained herein are proprietary to PICO Technology Co., Ltd. and may be
- covered by patents, patents in process, and are protected by trade secret or
- copyright law. Dissemination of this information or reproduction of this
- material is strictly forbidden unless prior written permission is obtained from
- PICO Technology Co., Ltd.
- *******************************************************************************/
- using System;
- using System.Collections.Generic;
- using Pico.Platform.Models;
- using UnityEngine;
- namespace Pico.Platform
- {
- /**
- * \ingroup Platform
- */
- public static class RoomService
- {
- /// <summary>Gets the room options for create a private room. You can use it when you use \ref RoomService.CreateAndJoinPrivate2.</summary>
- /// <param name="dataStore">The key/value pairs to add.</param>
- /// <returns>The room options for create a private room.</returns>
- public static RoomOptions GetCreatePrivateRoomOptions(Dictionary<string, string> dataStore)
- {
- RoomOptions options = new RoomOptions();
- foreach (var data in dataStore)
- {
- options.SetDataStore(data.Key, data.Value);
- }
- return options;
- }
- /// <summary>Gets the room options for joining or creating a named room. You can use it when you use \ref RoomService.JoinOrCreateNamedRoom.</summary>
- /// <param name="dataStore">The key/value pairs to add.</param>
- /// <param name="name">The name of the named room.</param>
- /// <param name="password">The password of the named room.</param>
- /// <returns>The room options for joining or creating a named room.</returns>
- public static RoomOptions GetJoinOrCreateNamedRoomOptions(Dictionary<string, string> dataStore, string name, string password)
- {
- RoomOptions options = new RoomOptions();
- foreach (var data in dataStore)
- {
- options.SetDataStore(data.Key, data.Value);
- }
- options.SetRoomName(name);
- options.SetPassword(password);
- return options;
- }
- /// <summary>Gets the list of named rooms created for the app.</summary>
- /// <param name="pageIndex">Defines which page of entries to return. The index for the first page is `0`.</param>
- /// <param name="pageSize">The number of entries returned on each page. Value range: [5,20].</param>
- /// <returns>The request ID of this async function.
- ///
- /// A message of type `MessageType.Room_GetNamedRooms` will be generated in response.
- /// First call `Message.IsError()` to check if any error has occurred.
- /// If no error has occurred, the message will contain a payload of type `RoomList`.
- /// Extract the payload from the message handle with `Message.Data`.
- /// </returns>
- public static Task<RoomList> GetNamedRooms(int pageIndex, int pageSize)
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<RoomList>(CLIB.ppf_Room_GetNamedRooms(pageIndex, pageSize));
- }
- /// <summary>Join or create a named room.</summary>
- /// <param name="joinPolicy">The join policy of the room. Currently only support 'RoomJoinPolicy Everyone'.</param>
- /// <param name="createIfNotExist">Determines whether to create a new room if the named room does not exist:
- /// * `true`: create
- /// * `false`: do not create
- /// </param>
- /// <param name="maxUsers">The maximum number of users allowed in the room, including the creator.</param>
- /// <param name="options">Additional room configuration for this request.</param>
- /// <returns>The request ID of this async function.
- ///
- /// A message of type `MessageType.Room_JoinNamed` will be generated in response.
- /// First call `Message.IsError()` to check if any error has occurred.
- /// If no error has occurred, the message will contain a payload of type `Room`.
- /// Extract the payload from the message handle with `Message.Data`.
- /// </returns>
- public static Task<Room> JoinOrCreateNamedRoom(RoomJoinPolicy joinPolicy, bool createIfNotExist, uint maxUsers, RoomOptions options)
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<Room>(CLIB.ppf_Room_JoinNamed(joinPolicy, createIfNotExist, maxUsers, options.GetHandle()));
- }
- /// <summary>Launches the invitation flow to let the current user invite friends to a specified room.
- /// This launches the system default invite UI where all of the user's friends are displayed.
- /// This is intended to be a shortcut for developers not wanting to build their own invite-friends UI.
- /// </summary>
- /// <param name="roomID">The ID of the room.</param>
- /// <returns>The request ID of this async function.
- /// A message of type `MessageType.Room_LaunchInvitableUserFlow` will be generated in response.
- /// Call `message.IsError()` to check if any error has occurred.
- /// </returns>
- public static Task LaunchInvitableUserFlow(UInt64 roomID)
- {
- if (!CoreService.IsInitialized())
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task(CLIB.ppf_Room_LaunchInvitableUserFlow(roomID));
- }
- /// <summary>Updates the data store of the current room (the caller should be the room owner).
- /// @note Room data stores only allow string values. The maximum key length is 32 bytes and the maximum value length is 64 bytes.
- /// If you provide illegal values, this method will return an error.</summary>
- /// <param name="roomId">The ID of the room that you currently own (call `Room.OwnerOptional` to check).</param>
- /// <param name="data">The key/value pairs to add or update. Null value will clear a given key.</param>
- /// <returns>The request ID of this async function.
- /// | Error Code| Error Message |
- /// |---|---|
- /// |3006004|change datastore failed: need room owner|
- ///
- /// A message of type `MessageType.Room_UpdateDataStore` will be generated in response.
- /// First call `Message.IsError()` to check if any error has occurred.
- /// If no error has occurred, the message will contain a payload of type `Room`.
- /// Extract the payload from the message handle with `Message.Data`.
- /// </returns>
- public static Task<Room> UpdateDataStore(UInt64 roomId, Dictionary<string, string> data)
- {
- KVPairArray kvarray = new KVPairArray((uint) data.Count);
- uint n = 0;
- foreach (var d in data)
- {
- var item = kvarray.GetElement(n);
- item.SetKey(d.Key);
- item.SetStringValue(d.Value);
- n++;
- }
- return new Task<Room>(CLIB.ppf_Room_UpdateDataStore(roomId, kvarray.GetHandle(), kvarray.Size));
- }
- /// <summary>Creates a new private room and joins it.
- /// @note This type of room can be obtained by querying the room where
- /// a friend is, so it is suitable for playing with friends.</summary>
- ///
- /// <param name="policy">Specifies who can join the room:
- /// * `0`: nobody
- /// * `1`: everybody
- /// * `2`: friends of members
- /// * `3`: friends of the room owner
- /// * `4`: invited users
- /// * `5`: unknown
- /// </param>
- /// <param name="maxUsers">The maximum number of members allowed in the room, including the room creator.</param>
- /// <param name="roomOptions">Room configuration for this request.</param>
- /// <returns>Request information of type Task, including the request id, and its response message will contain data of type `Room`.
- /// | Error Code| Error Message |
- /// |---|---|
- /// |3006101|room create: unknown error|
- /// |3006114|setting of 'room max user' is too large|
- ///
- /// A message of type `MessageType.Room_CreateAndJoinPrivate2` will be generated in response.
- /// First call `message.IsError()` to check if any error has occurred.
- /// If no error has occurred, the message will contain a payload of type `Room`.
- /// Extract the payload from the message handle with `message.Data`.
- /// </returns>
- public static Task<Room> CreateAndJoinPrivate2(RoomJoinPolicy policy, uint maxUsers, RoomOptions roomOptions)
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<Room>(CLIB.ppf_Room_CreateAndJoinPrivate2(policy, maxUsers, roomOptions.GetHandle()));
- }
- /// <summary>Gets the information about a specified room.</summary>
- /// <param name="roomId">The ID of the room to get information for.</param>
- /// <returns>Request information of type `Task`, including the request id, and its response message will contain data of type `Room`.
- /// | Error Code| Error Message |
- /// |---|---|
- /// |3006103|invalid room|
- /// |3006301|server error: unknown|
- ///
- /// A message of type `MessageType.Room_Get` will be generated in response.
- /// First call `message.IsError()` to check if any error has occurred.
- /// If no error has occurred, the message will contain a payload of type `Room`.
- /// Extract the payload from the message handle with `message.Data`.
- /// </returns>
- public static Task<Room> Get(UInt64 roomId)
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<Room>(CLIB.ppf_Room_Get(roomId));
- }
- /// <summary>Gets the data of the room you are currently in.</summary>
- /// <returns>Request information of type `Task`, including the request id, and its response message will contain data of type `Room`.
- /// |Error Code| Error Message |
- /// |---|---|
- /// |3006104|not in room|
- ///
- /// A message of type `MessageType.Room_GetCurrent` will be generated in response.
- /// First call `message.IsError()` to check if any error has occurred.
- /// If no error has occurred, the message will contain a payload with of type `Room`.
- /// Extract the payload from the message handle with `message.Data`.
- /// </returns>
- public static Task<Room> GetCurrent()
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<Room>(CLIB.ppf_Room_GetCurrent());
- }
- /// <summary>Gets the current room of the specified user.
- /// @note The user's privacy settings may not allow you to access their room.
- /// </summary>
- ///
- /// <param name="userId">The ID of the user.</param>
- /// <returns>Request information of type `Task`, including the request id, and its response message will contain data of type `Room`.
- /// | Error Code| Error Message |
- /// |---|---|
- /// |3006104|not in room|
- /// |3006009|tgt player is not in game now|
- /// |3006301|server error: unknown|
- ///
- /// A message of type `MessageType.Room_GetCurrentForUser` will be generated in response.
- /// First call `message.IsError()` to check if any error has occurred.
- /// If no error has occurred, the message will contain a payload of type `Room`.
- /// Extract the payload from the message handle with `message.Data`.
- /// </returns>
- public static Task<Room> GetCurrentForUser(string userId)
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<Room>(CLIB.ppf_Room_GetCurrentForUser(userId));
- }
- /// <summary>Gets a list of members the user can invite to the room.
- /// These members are drawn from the user's friends list and recently
- /// encountered list, and filtered based on relevance and interests.
- /// @note: Only applicable to private rooms and named rooms.
- /// </summary>
- ///
- /// <param name="roomOptions">Additional configuration for this request.
- /// If you pass `null`, the response will return code `0`.</param>
- /// <returns>Request information of type `Task`, including the request id, and its response message will contain data of type `UserList`.
- ///
- /// A message of type `MessageType.Room_GetInvitableUsers2` will be generated in response.
- /// First call `message.IsError()` to check if any error has occurred.
- /// If no error has occurred, the message will contain a payload of type `UserList`.
- /// Extract the payload from the message handle with `message.Data`.
- /// </returns>
- public static Task<UserList> GetInvitableUsers2(RoomOptions roomOptions = null)
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- if (roomOptions == null)
- {
- return new Task<UserList>(CLIB.ppf_Room_GetInvitableUsers2(IntPtr.Zero));
- }
- else
- {
- return new Task<UserList>(CLIB.ppf_Room_GetInvitableUsers2(roomOptions.GetHandle()));
- }
- }
- /// <summary>Gets the list of moderated rooms created for the application.</summary>
- ///
- /// <param name="index">Start page index.</param>
- /// <param name="size">Page entry number in response (should range from `5` to `20`).</param>
- /// <returns>Request information of type `Task`, including the request id, and its response message will contain data of type `RoomList`.
- /// | Error Code| Error Message |
- /// |---|---|
- /// |3006301|server error: unknown|
- ///
- /// A message of type `MessageType.Room_GetModeratedRooms` will be generated in response.
- /// First call `message.IsError()` to check if any error has occurred.
- /// If no error has occurred, the message will contain a payload of type `RoomList`, the room info does not contain the `UserList` info.
- /// Extract the payload from the message handle with `message.Data`.
- /// </returns>
- public static Task<RoomList> GetModeratedRooms(int index, int size)
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<RoomList>(CLIB.ppf_Room_GetModeratedRooms(index, size));
- }
- /// <summary>Invites a user to the current room.
- /// @note The user invited will receive a notification of type `MessageType.Notification_Room_InviteReceived`.
- /// </summary>
- ///
- /// <param name="roomId">The ID of the room.</param>
- /// <param name="token">The user's invitation token, which is returned by `RoomService.GetInvitableUsers2()`.</param>
- /// <returns>Request information of type `Task`, including the request id, and its response message will contain data of type `Room`.
- ///
- /// A message of type `MessageType.Room_InviteUser` will be generated in response.
- /// First call `message.IsError()` to check if any error has occurred.
- /// If no error has occurred, the message will contain a payload of type `Room`.
- /// Extract the payload from the message handle with `message.Data`.
- /// </returns>
- public static Task<Room> InviteUser(UInt64 roomId, string token)
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<Room>(CLIB.ppf_Room_InviteUser(roomId, token));
- }
- /// <summary>Joins the target room and meanwhile leaves the current room.</summary>
- ///
- /// <param name="roomId">The ID of the room to join.</param>
- /// <param name="options">(Optional) Additional room configuration for this request.</param>
- /// <returns>Request information of type `Task`, including the request id, and its response message will contain data of type `Room`.
- /// | Error Code| Error Message |
- /// |---|---|
- /// |3006401|logic state checking failed|
- /// |3006103|invalid room|
- /// |3006102|duplicate join room(regarded as normal entry)|
- /// |3006106|exceed max room player number|
- /// |3006105|illegal enter request(Players outside the legal list enter)|
- /// |3006108|room is locked|
- ///
- /// A message of type `MessageType.Room_Join2` will be generated in response.
- /// First call `message.IsError()` to check if any error has occurred.
- /// If no error has occurred, the message will contain a payload of type `Room`.
- /// Extract the payload from the message handle with `message.Data`.
- /// </returns>
- public static Task<Room> Join2(UInt64 roomId, RoomOptions options)
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<Room>(CLIB.ppf_Room_Join2(roomId, options.GetHandle()));
- }
- /// <summary>Kicks a user out of a room. For use by homeowners only.</summary>
- ///
- /// <param name="roomId">The ID of the room.</param>
- /// <param name="userId">The ID of the user to be kicked (cannot be yourself).</param>
- /// <param name="kickDuration">The Length of the ban (in seconds).</param>
- /// <returns>Request information of type `Task`, including the request id, and its response message will contain data of type `Room`.
- /// | Error Code| Error Message |
- /// |---|---|
- /// |3006006|kick user failed: need room owner|
- /// |3006007|kick user failed: tgt user is not in the room|
- /// |3006008|kick user failed: can not kick self|
- ///
- /// A message of type `MessageType.Room_KickUser` will be generated in response.
- /// First call `message.IsError()` to check if any error has occurred.
- /// If no error has occurred, the message will contain a payload of type `Room`.
- /// Extract the payload from the message handle with `message.Data`.
- /// </returns>
- public static Task<Room> KickUser(UInt64 roomId, string userId, int kickDuration)
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<Room>(CLIB.ppf_Room_KickUser(roomId, userId, kickDuration));
- }
- /// <summary>Leaves the current room.
- /// @note The room you are now in will be returned if the request succeeds.</summary>
- ///
- /// <param name="roomId">The ID of the room.</param>
- /// <returns>Request information of type `Task`, including the request id, and its response message will contain data of type `Room`.
- /// | Error Code| Error Message |
- /// |---|---|
- /// |3006401|logic state checking failed(e.g. not in the room)|
- /// |3006301|server error: unknown|
- ///
- /// A message of type `MessageType.Room_Leave` will be generated in response.
- /// First call `message.IsError()` to check if any error has occurred.
- /// If no error has occurred, the message will contain a payload of type `Room`.
- /// Extract the payload from the message handle with `message.Data`.
- /// </returns>
- public static Task<Room> Leave(UInt64 roomId)
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<Room>(CLIB.ppf_Room_Leave(roomId));
- }
- /// <summary>Sets the description of a room. For use by homeowners only.</summary>
- ///
- /// <param name="roomId">The ID of the room to set description for.</param>
- /// <param name="description">The new description of the room.</param>
- /// <returns>Request information of type `Task`, including the request id, and its response message will contain data of type `Room`.
- /// | Error Code| Error Message |
- /// |---|---|
- /// |3006005|set description failed: need room owner|
- ///
- /// A message of type `MessageType.Room_SetDescription` will be generated in response.
- /// First call `message.IsError()` to check if any error has occurred.
- /// If no error has occurred, the message will contain a payload of type `Room`.
- /// Extract the payload from the message handle with `message.Data`.
- /// </returns>
- public static Task<Room> SetDescription(UInt64 roomId, string description)
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<Room>(CLIB.ppf_Room_SetDescription(roomId, description));
- }
- /// <summary>Locks/unlocks the membership of a room (the caller should be the room owner) to allow/disallow new members from being able to join the room.
- /// @note Locking membership will prevent other users from joining the room through `Join2()`, invitations, etc. Users that are in the room at the time of lock will be able to rejoin.</summary>
- ///
- /// <param name="roomId">The ID of the room to lock/unlock membership for.</param>
- /// <param name="membershipLockStatus">The new membership status to set for the room:
- /// * `0`: Unknown
- /// * `1`: lock
- /// * `2`: unlock
- /// </param>
- /// <returns>Request information of type `Task`, including the request id, and its response message will contain data of type `Room`.
- /// | Error Code| Error Message |
- /// |---|---|
- /// |3006104|not in room |
- /// |3006109|update membership lock: need room owner|
- ///
- /// A message of type `MessageType.Room_UpdateMembershipLockStatus` will be generated in response.
- /// First call `message.IsError()` to check if any error has occurred.
- /// If no error has occurred, the message will contain a payload of type `Room`
- /// Extract the payload from the message handle with `message.Data`.
- /// </returns>
- public static Task<Room> UpdateMembershipLockStatus(UInt64 roomId, RoomMembershipLockStatus membershipLockStatus)
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<Room>(CLIB.ppf_Room_UpdateMembershipLockStatus(roomId, membershipLockStatus));
- }
- /// <summary>Modifies the owner of the room, this person needs to be the person in this room.</summary>
- ///
- /// <param name="roomId">The ID of the room to change ownership for.</param>
- /// <param name="userId">The ID of the new user to own the room. The new user must be in the same room.</param>
- /// <returns>Request information of type `Task`, including the request id, and its response message does not contain data.
- /// | Error Code| Error Message |
- /// |---|---|
- /// |3006001|change owner failed: need room owner|
- /// |3006003|change owner failed: duplicate setting|
- /// |3006002|change owner failed: new owner not in this room|
- ///
- /// A message of type `MessageType.Room_UpdateOwner` will be generated in response.
- /// Call `message.IsError()` to check if any error has occurred.
- /// </returns>
- public static Task UpdateOwner(UInt64 roomId, string userId)
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task(CLIB.ppf_Room_UpdateOwner(roomId, userId));
- }
- /// <summary>Sets the join policy for a specified private room.</summary>
- ///
- /// <param name="roomId">The ID of the room you want to set join policy for.</param>
- /// <param name="policy">Specifies who can join the room:
- /// * `0`: nobody
- /// * `1`: everybody
- /// * `2`: friends of members
- /// * `3`: friends of the room owner
- /// * `4`: invited users
- /// * `5`: unknown
- /// </param>
- /// <returns>Request information of type `Task`, including the request id, and its response message will contain data of type `Room`.
- /// | Error Code| Error Message |
- /// |---|---|
- /// |3006104|not in room |
- /// |3006112|update room join policy: need room owner|
- ///
- /// A message of type `MessageType.Room_UpdatePrivateRoomJoinPolicy` will be generated in response.
- /// First call `message.IsError()` to check if any error has occurred.
- /// If no error has occurred, the message will contain a payload of type `Room`.
- /// Extract the payload from the message handle with `message.Data`.
- /// </returns>
- public static Task<Room> UpdatePrivateRoomJoinPolicy(UInt64 roomId, RoomJoinPolicy policy)
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<Room>(CLIB.ppf_Room_UpdatePrivateRoomJoinPolicy(roomId, policy));
- }
- /// <summary>Sets the callback to get notified when the user has accepted an invitation.
- /// @note You can get the RoomID by 'Message.Data'. Then you can call 'RoomService.Join2' to join it.
- /// </summary>
- /// <param name="handler">The callback function will be called when receiving the `Notification_Room_InviteAccepted` message.</param>
- public static void SetRoomInviteAcceptedNotificationCallback(Message<string>.Handler handler)
- {
- Looper.RegisterNotifyHandler(MessageType.Notification_Room_InviteAccepted, handler);
- }
- /// <summary>Sets the callback to get notified when the current room has been updated. Use `Message.Data` to extract the room.</summary>
- ///
- /// <param name="handler">The callback function will be called when receiving the `Notification_Room_RoomUpdate` message.</param>
- public static void SetUpdateNotificationCallback(Message<Room>.Handler handler)
- {
- Looper.RegisterNotifyHandler(MessageType.Notification_Room_RoomUpdate, handler);
- }
- /// <summary>Sets the callback to get notified when the user has been kicked out of a room.
- /// Listen to this event to receive a relevant message. Use `Message.Data` to extract the room.</summary>
- ///
- /// <param name="handler">The callback function will be called when receiving the `Room_KickUser` message and the value of `requestID` is `0`.</param>
- public static void SetKickUserNotificationCallback(Message<Room>.Handler handler)
- {
- Looper.RegisterNotifyHandler(MessageType.Room_KickUser, handler);
- }
- /// <summary>Sets the callback to get notified when the room description has been updated.
- /// Listen to this event to receive a relevant message. Use `Message.Data` to extract the room.</summary>
- ///
- /// <param name="handler">The callback function will be called when receiving the `Room_SetDescription` message and the value of `requestID` is `0`.</param>
- public static void SetSetDescriptionNotificationCallback(Message<Room>.Handler handler)
- {
- Looper.RegisterNotifyHandler(MessageType.Room_SetDescription, handler);
- }
- /// <summary>Sets the callback to get notified when the room data has been modified.
- /// Listen to this event to receive a relevant message. Use `Message.Data` to extract the room.</summary>
- ///
- /// <param name="handler">The callback function will be called when receiving the `Room_UpdateDataStore` message and the value of `requestID` is `0`.</param>
- public static void SetUpdateDataStoreNotificationCallback(Message<Room>.Handler handler)
- {
- Looper.RegisterNotifyHandler(MessageType.Room_UpdateDataStore, handler);
- }
- /// <summary>If a player is passively removed from a room (for example, if they initiate another match within the room and are subsequently removed by the system or if they are kicked out of the room), they will receive a notification.
- /// Listen to this event to receive a relevant message.
- /// Use `Message.Data` to extract the room.</summary>
- ///
- /// <param name="handler">The callback function will be called when receiving the `Room_Leave` message and the value of `requestID` is `0`.</param>
- public static void SetLeaveNotificationCallback(Message<Room>.Handler handler)
- {
- Looper.RegisterNotifyHandler(MessageType.Room_Leave, handler);
- }
- /// <summary>If a player comes across network or disaster recovery problems after joining a room, they may not receive a notification confirming that they've successfully entered the room.
- /// In such cases, the server will resend the notification to ensure that the user receives it.
- /// Use `Message.Data` to extract the room.</summary>
- ///
- /// <param name="handler">The callback function will be called when receiving the `Room_Join2` message and the value of `requestID` is `0`.</param>
- public static void SetJoin2NotificationCallback(Message<Room>.Handler handler)
- {
- Looper.RegisterNotifyHandler(MessageType.Room_Join2, handler);
- }
- /// <summary>When there is a change in the room owner, the new owner will receive a notification.
- /// Listen to this event to receive a relevant message.
- /// Use `Message.Data` to extract the room.</summary>
- ///
- /// <param name="handler">The callback function will be called when receiving the `Room_UpdateOwner` message and the value of `requestID` is `0`.</param>
- public static void SetUpdateOwnerNotificationCallback(Message.Handler handler)
- {
- Looper.RegisterNotifyHandler(MessageType.Room_UpdateOwner, handler);
- }
- /// <summary>Sets the callback to get notified when the membership status of a room has been changed.
- /// Listen to this event to receive a relevant message. Use `Message.Data` to extract the room.</summary>
- ///
- /// <param name="handler">The callback function will be called when receiving the "Room_UpdateMembershipLockStatus" message and the value of `requestID` is `0`.</param>
- public static void SetUpdateMembershipLockStatusNotificationCallback(Message<Room>.Handler handler)
- {
- Looper.RegisterNotifyHandler(MessageType.Room_UpdateMembershipLockStatus, handler);
- }
- }
- public class RoomOptions
- {
- public RoomOptions()
- {
- Handle = CLIB.ppf_RoomOptions_Create();
- }
- /// <summary>
- /// Sets the data store for a room.
- /// </summary>
- /// <param name="key">A unique identifier that maps to a value.</param>
- /// <param name="value">The data.</param>
- public void SetDataStore(string key, string value)
- {
- CLIB.ppf_RoomOptions_SetDataStoreString(Handle, key, value);
- }
- /// <summary>
- /// Clears the data store for a room.
- /// </summary>
- public void ClearDataStore()
- {
- CLIB.ppf_RoomOptions_ClearDataStore(Handle);
- }
- /// <summary>
- /// Sets whether to exclude recently-met users.
- /// </summary>
- /// <param name="value">
- /// * `true`: exclude
- /// * `false`: not exclude
- /// </param>
- public void SetExcludeRecentlyMet(bool value)
- {
- CLIB.ppf_RoomOptions_SetExcludeRecentlyMet(Handle, value);
- }
- /// <summary>
- /// Sets the maximum number of users to return.
- /// </summary>
- /// <param name="value">The maximum number of users to return.</param>
- public void SetMaxUserResults(uint value)
- {
- CLIB.ppf_RoomOptions_SetMaxUserResults(Handle, value);
- }
- /// <summary>
- /// Sets a room ID.
- /// @note Only available to \ref RoomService.GetInvitableUsers2.
- /// </summary>
- /// <param name="value">The room ID.</param>
- public void SetRoomId(UInt64 value)
- {
- CLIB.ppf_RoomOptions_SetRoomId(Handle, value);
- }
- /// <summary>
- /// Sets a name for the room.
- /// @note Only available to \ref RoomService.JoinOrCreateNamedRoom and \ref RoomService.GetNamedRooms.
- /// </summary>
- /// <param name="roomName">The room's name. The maximum length is 64 characters.</param>
- public void SetRoomName(string roomName)
- {
- CLIB.ppf_RoomOptions_SetName(Handle, roomName);
- }
- /// <summary>
- /// Sets a password for the room.
- /// @note Only available to \ref RoomService.JoinOrCreateNamedRoom and \ref RoomService.GetNamedRooms.
- /// </summary>
- /// <param name="password">The room's password. The maximum length is 64 characters.</param>
- public void SetPassword(string password)
- {
- CLIB.ppf_RoomOptions_SetPassword(Handle, password);
- }
- /// <summary>
- /// Enables/Disables the update of room data.
- /// </summary>
- /// <param name="value">
- /// * `true`: enable
- /// * `false`: disable
- /// </param>
- public void SetTurnOffUpdates(bool value)
- {
- CLIB.ppf_RoomOptions_SetTurnOffUpdates(Handle, value);
- }
- /// For passing to native C
- public static explicit operator IntPtr(RoomOptions roomOptions)
- {
- return roomOptions != null ? roomOptions.Handle : IntPtr.Zero;
- }
- ~RoomOptions()
- {
- CLIB.ppf_RoomOptions_Destroy(Handle);
- }
- IntPtr Handle;
- public IntPtr GetHandle()
- {
- return Handle;
- }
- }
- }
|