using System; using Oculus.Platform.Models; using UnityEngine; namespace Oculus.Platform { public abstract class Message : Message { public new delegate void Callback(Message message); private T data; public T Data { get { return data; } } public Message(IntPtr c_message) : base(c_message) { if (!base.IsError) { data = GetDataFromMessage(c_message); } } protected abstract T GetDataFromMessage(IntPtr c_message); } public class Message { public delegate void Callback(Message message); public enum MessageType : uint { Unknown = 0u, Achievements_AddCount = 65495601u, Achievements_AddFields = 346693929u, Achievements_GetAllDefinitions = 64177549u, Achievements_GetAllProgress = 1335877149u, Achievements_GetDefinitionsByName = 1653670332u, Achievements_GetNextAchievementDefinitionArrayPage = 712888917u, Achievements_GetNextAchievementProgressArrayPage = 792913703u, Achievements_GetProgressByName = 354837425u, Achievements_Unlock = 1497156573u, ApplicationLifecycle_GetRegisteredPIDs = 82169698u, ApplicationLifecycle_GetSessionKey = 984570141u, ApplicationLifecycle_RegisterSessionKey = 1303818232u, Application_GetVersion = 1751583246u, Application_LaunchOtherApp = 1424151032u, AssetFile_Delete = 1834842246u, AssetFile_DeleteById = 1525206354u, AssetFile_DeleteByName = 1108001231u, AssetFile_Download = 289710021u, AssetFile_DownloadById = 755009938u, AssetFile_DownloadByName = 1664536314u, AssetFile_DownloadCancel = 134927303u, AssetFile_DownloadCancelById = 1365611796u, AssetFile_DownloadCancelByName = 1147858170u, AssetFile_GetList = 1258057588u, AssetFile_Status = 47394656u, AssetFile_StatusById = 1570069816u, AssetFile_StatusByName = 1104140880u, CloudStorage_Delete = 685393261u, CloudStorage_GetNextCloudStorageMetadataArrayPage = 1544004335u, CloudStorage_Load = 1082420033u, CloudStorage_LoadBucketMetadata = 1931977997u, CloudStorage_LoadConflictMetadata = 1146770162u, CloudStorage_LoadHandle = 845863478u, CloudStorage_LoadMetadata = 65446546u, CloudStorage_ResolveKeepLocal = 811109637u, CloudStorage_ResolveKeepRemote = 1965400838u, CloudStorage_Save = 1270570030u, Entitlement_GetIsViewerEntitled = 409688241u, IAP_ConsumePurchase = 532378329u, IAP_GetNextProductArrayPage = 467225263u, IAP_GetNextPurchaseArrayPage = 1196886677u, IAP_GetProductsBySKU = 2124073717u, IAP_GetViewerPurchases = 974095385u, IAP_LaunchCheckoutFlow = 1067126029u, LanguagePack_GetCurrent = 529592533u, LanguagePack_SetCurrent = 1531952096u, Leaderboard_GetEntries = 1572030284u, Leaderboard_GetEntriesAfterRank = 406293487u, Leaderboard_GetNextEntries = 1310751961u, Leaderboard_GetPreviousEntries = 1224858304u, Leaderboard_WriteEntry = 293587198u, Livestreaming_GetStatus = 1218079125u, Livestreaming_PauseStream = 916223619u, Livestreaming_ResumeStream = 575827343u, Matchmaking_Browse = 509948616u, Matchmaking_Browse2 = 1715641947u, Matchmaking_Cancel = 543705519u, Matchmaking_Cancel2 = 285117908u, Matchmaking_CreateAndEnqueueRoom = 1615617480u, Matchmaking_CreateAndEnqueueRoom2 = 693889755u, Matchmaking_CreateRoom = 54203178u, Matchmaking_CreateRoom2 = 1231922052u, Matchmaking_Enqueue = 1086418033u, Matchmaking_Enqueue2 = 303174325u, Matchmaking_EnqueueRoom = 1888108644u, Matchmaking_EnqueueRoom2 = 1428741028u, Matchmaking_GetAdminSnapshot = 1008820116u, Matchmaking_GetStats = 1123849272u, Matchmaking_JoinRoom = 1295177725u, Matchmaking_ReportResultInsecure = 439800205u, Matchmaking_StartMatch = 1154746693u, Media_ShareToFacebook = 14912239u, Notification_GetNextRoomInviteNotificationArrayPage = 102890359u, Notification_GetRoomInvites = 1871801234u, Notification_MarkAsRead = 1903319523u, Party_GetCurrent = 1200830304u, Room_CreateAndJoinPrivate = 1977017207u, Room_CreateAndJoinPrivate2 = 1513775683u, Room_Get = 1704628152u, Room_GetCurrent = 161916164u, Room_GetCurrentForUser = 234887141u, Room_GetInvitableUsers = 506615698u, Room_GetInvitableUsers2 = 1330899120u, Room_GetModeratedRooms = 159645047u, Room_GetNextRoomArrayPage = 1317239238u, Room_InviteUser = 1093266451u, Room_Join = 382373641u, Room_Join2 = 1303059522u, Room_KickUser = 1233344310u, Room_LaunchInvitableUserFlow = 843047539u, Room_Leave = 1916281973u, Room_SetDescription = 809796911u, Room_UpdateDataStore = 40779816u, Room_UpdateMembershipLockStatus = 923514796u, Room_UpdateOwner = 850803997u, Room_UpdatePrivateRoomJoinPolicy = 289473179u, User_Get = 1808768583u, User_GetAccessToken = 111696574u, User_GetLoggedInUser = 1131361373u, User_GetLoggedInUserFriends = 1484532365u, User_GetLoggedInUserFriendsAndRooms = 1585908615u, User_GetLoggedInUserRecentlyMetUsersAndRooms = 694139440u, User_GetNextUserAndRoomArrayPage = 2143146719u, User_GetNextUserArrayPage = 645723971u, User_GetOrgScopedID = 418426907u, User_GetSdkAccounts = 1733454467u, User_GetUserProof = 578880643u, User_LaunchFriendRequestFlow = 151303576u, User_LaunchProfile = 171537047u, Voip_SetSystemVoipSuppressed = 1161808298u, Notification_ApplicationLifecycle_LaunchIntentChanged = 78859427u, Notification_AssetFile_DownloadUpdate = 803015885u, Notification_Cal_FinalizeApplication = 1963741337u, Notification_Cal_ProposeApplication = 779375093u, Notification_HTTP_Transfer = 2111073839u, Notification_Livestreaming_StatusChange = 575101294u, Notification_Matchmaking_MatchFound = 197393623u, Notification_Networking_ConnectionStateChange = 1577243802u, Notification_Networking_PeerConnectRequest = 1295114959u, Notification_Networking_PingResult = 1360343058u, Notification_Party_PartyUpdate = 487688882u, Notification_Room_InviteAccepted = 1829794225u, Notification_Room_InviteReceived = 1783209300u, Notification_Room_RoomUpdate = 1626094639u, Notification_Voip_ConnectRequest = 908343318u, Notification_Voip_StateChange = 888120928u, Notification_Voip_SystemVoipState = 1490179237u, Platform_InitializeWithAccessToken = 896085803u, Platform_InitializeStandaloneOculus = 1375260172u, Platform_InitializeAndroidAsynchronous = 450037684u, Platform_InitializeWindowsAsynchronous = 1839708815u } internal delegate Message ExtraMessageTypesHandler(IntPtr messageHandle, MessageType message_type); private MessageType type; private ulong requestID; private Error error; public MessageType Type { get { return type; } } public bool IsError { get { return error != null; } } public ulong RequestID { get { return requestID; } } internal static ExtraMessageTypesHandler HandleExtraMessageTypes { private get; set; } public Message(IntPtr c_message) { type = CAPI.ovr_Message_GetType(c_message); bool flag = CAPI.ovr_Message_IsError(c_message); requestID = CAPI.ovr_Message_GetRequestID(c_message); if (flag) { IntPtr obj = CAPI.ovr_Message_GetError(c_message); error = new Error(CAPI.ovr_Error_GetCode(obj), CAPI.ovr_Error_GetMessage(obj), CAPI.ovr_Error_GetHttpCode(obj)); } else if (Core.LogMessages) { string text = CAPI.ovr_Message_GetString(c_message); if (text != null) { Debug.Log(text); } else { Debug.Log(string.Format("null message string {0}", c_message)); } } } ~Message() { } public virtual Error GetError() { return error; } public virtual PingResult GetPingResult() { return null; } public virtual Oculus.Platform.Models.NetworkingPeer GetNetworkingPeer() { return null; } public virtual HttpTransferUpdate GetHttpTransferUpdate() { return null; } public virtual PlatformInitialize GetPlatformInitialize() { return null; } public virtual AbuseReportRecording GetAbuseReportRecording() { return null; } public virtual AchievementDefinitionList GetAchievementDefinitions() { return null; } public virtual AchievementProgressList GetAchievementProgressList() { return null; } public virtual AchievementUpdate GetAchievementUpdate() { return null; } public virtual ApplicationVersion GetApplicationVersion() { return null; } public virtual AssetDetails GetAssetDetails() { return null; } public virtual AssetDetailsList GetAssetDetailsList() { return null; } public virtual AssetFileDeleteResult GetAssetFileDeleteResult() { return null; } public virtual AssetFileDownloadCancelResult GetAssetFileDownloadCancelResult() { return null; } public virtual AssetFileDownloadResult GetAssetFileDownloadResult() { return null; } public virtual AssetFileDownloadUpdate GetAssetFileDownloadUpdate() { return null; } public virtual CalApplicationFinalized GetCalApplicationFinalized() { return null; } public virtual CalApplicationProposed GetCalApplicationProposed() { return null; } public virtual CalApplicationSuggestionList GetCalApplicationSuggestionList() { return null; } public virtual CloudStorageConflictMetadata GetCloudStorageConflictMetadata() { return null; } public virtual CloudStorageData GetCloudStorageData() { return null; } public virtual CloudStorageMetadata GetCloudStorageMetadata() { return null; } public virtual CloudStorageMetadataList GetCloudStorageMetadataList() { return null; } public virtual CloudStorageUpdateResponse GetCloudStorageUpdateResponse() { return null; } public virtual InstalledApplicationList GetInstalledApplicationList() { return null; } public virtual LaunchBlockFlowResult GetLaunchBlockFlowResult() { return null; } public virtual LaunchFriendRequestFlowResult GetLaunchFriendRequestFlowResult() { return null; } public virtual LaunchReportFlowResult GetLaunchReportFlowResult() { return null; } public virtual LaunchUnblockFlowResult GetLaunchUnblockFlowResult() { return null; } public virtual bool GetLeaderboardDidUpdate() { return false; } public virtual LeaderboardEntryList GetLeaderboardEntryList() { return null; } public virtual LinkedAccountList GetLinkedAccountList() { return null; } public virtual LivestreamingApplicationStatus GetLivestreamingApplicationStatus() { return null; } public virtual LivestreamingStartResult GetLivestreamingStartResult() { return null; } public virtual LivestreamingStatus GetLivestreamingStatus() { return null; } public virtual LivestreamingVideoStats GetLivestreamingVideoStats() { return null; } public virtual MatchmakingAdminSnapshot GetMatchmakingAdminSnapshot() { return null; } public virtual MatchmakingBrowseResult GetMatchmakingBrowseResult() { return null; } public virtual MatchmakingEnqueueResult GetMatchmakingEnqueueResult() { return null; } public virtual MatchmakingEnqueueResultAndRoom GetMatchmakingEnqueueResultAndRoom() { return null; } public virtual MatchmakingStats GetMatchmakingStats() { return null; } public virtual OrgScopedID GetOrgScopedID() { return null; } public virtual Party GetParty() { return null; } public virtual PartyID GetPartyID() { return null; } public virtual PartyUpdateNotification GetPartyUpdateNotification() { return null; } public virtual PidList GetPidList() { return null; } public virtual ProductList GetProductList() { return null; } public virtual Purchase GetPurchase() { return null; } public virtual PurchaseList GetPurchaseList() { return null; } public virtual Oculus.Platform.Models.Room GetRoom() { return null; } public virtual RoomInviteNotification GetRoomInviteNotification() { return null; } public virtual RoomInviteNotificationList GetRoomInviteNotificationList() { return null; } public virtual RoomList GetRoomList() { return null; } public virtual SdkAccountList GetSdkAccountList() { return null; } public virtual ShareMediaResult GetShareMediaResult() { return null; } public virtual string GetString() { return null; } public virtual SystemPermission GetSystemPermission() { return null; } public virtual SystemVoipState GetSystemVoipState() { return null; } public virtual User GetUser() { return null; } public virtual UserAndRoomList GetUserAndRoomList() { return null; } public virtual UserList GetUserList() { return null; } public virtual UserProof GetUserProof() { return null; } public virtual UserReportID GetUserReportID() { return null; } internal static Message ParseMessageHandle(IntPtr messageHandle) { if (messageHandle.ToInt64() == 0) { return null; } Message message = null; MessageType messageType = CAPI.ovr_Message_GetType(messageHandle); switch (messageType) { case MessageType.Achievements_GetAllDefinitions: case MessageType.Achievements_GetNextAchievementDefinitionArrayPage: case MessageType.Achievements_GetDefinitionsByName: message = new MessageWithAchievementDefinitions(messageHandle); break; case MessageType.Achievements_GetProgressByName: case MessageType.Achievements_GetNextAchievementProgressArrayPage: case MessageType.Achievements_GetAllProgress: message = new MessageWithAchievementProgressList(messageHandle); break; case MessageType.Achievements_AddCount: case MessageType.Achievements_AddFields: case MessageType.Achievements_Unlock: message = new MessageWithAchievementUpdate(messageHandle); break; case MessageType.Application_GetVersion: message = new MessageWithApplicationVersion(messageHandle); break; case MessageType.AssetFile_Status: case MessageType.LanguagePack_GetCurrent: case MessageType.AssetFile_StatusByName: case MessageType.AssetFile_StatusById: message = new MessageWithAssetDetails(messageHandle); break; case MessageType.AssetFile_GetList: message = new MessageWithAssetDetailsList(messageHandle); break; case MessageType.AssetFile_DeleteByName: case MessageType.AssetFile_DeleteById: case MessageType.AssetFile_Delete: message = new MessageWithAssetFileDeleteResult(messageHandle); break; case MessageType.AssetFile_DownloadCancel: case MessageType.AssetFile_DownloadCancelByName: case MessageType.AssetFile_DownloadCancelById: message = new MessageWithAssetFileDownloadCancelResult(messageHandle); break; case MessageType.AssetFile_Download: case MessageType.AssetFile_DownloadById: case MessageType.LanguagePack_SetCurrent: case MessageType.AssetFile_DownloadByName: message = new MessageWithAssetFileDownloadResult(messageHandle); break; case MessageType.Notification_AssetFile_DownloadUpdate: message = new MessageWithAssetFileDownloadUpdate(messageHandle); break; case MessageType.Notification_Cal_FinalizeApplication: message = new MessageWithCalApplicationFinalized(messageHandle); break; case MessageType.Notification_Cal_ProposeApplication: message = new MessageWithCalApplicationProposed(messageHandle); break; case MessageType.CloudStorage_LoadConflictMetadata: message = new MessageWithCloudStorageConflictMetadata(messageHandle); break; case MessageType.CloudStorage_LoadHandle: case MessageType.CloudStorage_Load: message = new MessageWithCloudStorageData(messageHandle); break; case MessageType.CloudStorage_LoadMetadata: message = new MessageWithCloudStorageMetadataUnderLocal(messageHandle); break; case MessageType.CloudStorage_GetNextCloudStorageMetadataArrayPage: case MessageType.CloudStorage_LoadBucketMetadata: message = new MessageWithCloudStorageMetadataList(messageHandle); break; case MessageType.CloudStorage_Delete: case MessageType.CloudStorage_ResolveKeepLocal: case MessageType.CloudStorage_Save: case MessageType.CloudStorage_ResolveKeepRemote: message = new MessageWithCloudStorageUpdateResponse(messageHandle); break; case MessageType.User_LaunchProfile: case MessageType.Matchmaking_Cancel2: case MessageType.Entitlement_GetIsViewerEntitled: case MessageType.Matchmaking_ReportResultInsecure: case MessageType.IAP_ConsumePurchase: case MessageType.Matchmaking_Cancel: case MessageType.Room_LaunchInvitableUserFlow: case MessageType.Room_UpdateOwner: case MessageType.Matchmaking_StartMatch: case MessageType.ApplicationLifecycle_RegisterSessionKey: case MessageType.Notification_MarkAsRead: message = new Message(messageHandle); break; case MessageType.User_LaunchFriendRequestFlow: message = new MessageWithLaunchFriendRequestFlowResult(messageHandle); break; case MessageType.Leaderboard_GetEntriesAfterRank: case MessageType.Leaderboard_GetPreviousEntries: case MessageType.Leaderboard_GetNextEntries: case MessageType.Leaderboard_GetEntries: message = new MessageWithLeaderboardEntryList(messageHandle); break; case MessageType.Leaderboard_WriteEntry: message = new MessageWithLeaderboardDidUpdate(messageHandle); break; case MessageType.Notification_Livestreaming_StatusChange: case MessageType.Livestreaming_ResumeStream: case MessageType.Livestreaming_PauseStream: case MessageType.Livestreaming_GetStatus: message = new MessageWithLivestreamingStatus(messageHandle); break; case MessageType.Matchmaking_GetAdminSnapshot: message = new MessageWithMatchmakingAdminSnapshot(messageHandle); break; case MessageType.Matchmaking_Browse: case MessageType.Matchmaking_Browse2: message = new MessageWithMatchmakingBrowseResult(messageHandle); break; case MessageType.Matchmaking_Enqueue2: case MessageType.Matchmaking_Enqueue: case MessageType.Matchmaking_EnqueueRoom2: case MessageType.Matchmaking_EnqueueRoom: message = new MessageWithMatchmakingEnqueueResult(messageHandle); break; case MessageType.Matchmaking_CreateAndEnqueueRoom2: case MessageType.Matchmaking_CreateAndEnqueueRoom: message = new MessageWithMatchmakingEnqueueResultAndRoom(messageHandle); break; case MessageType.Matchmaking_GetStats: message = new MessageWithMatchmakingStatsUnderMatchmakingStats(messageHandle); break; case MessageType.User_GetOrgScopedID: message = new MessageWithOrgScopedID(messageHandle); break; case MessageType.Party_GetCurrent: message = new MessageWithPartyUnderCurrentParty(messageHandle); break; case MessageType.Notification_Party_PartyUpdate: message = new MessageWithPartyUpdateNotification(messageHandle); break; case MessageType.ApplicationLifecycle_GetRegisteredPIDs: message = new MessageWithPidList(messageHandle); break; case MessageType.IAP_GetNextProductArrayPage: case MessageType.IAP_GetProductsBySKU: message = new MessageWithProductList(messageHandle); break; case MessageType.IAP_LaunchCheckoutFlow: message = new MessageWithPurchase(messageHandle); break; case MessageType.IAP_GetViewerPurchases: case MessageType.IAP_GetNextPurchaseArrayPage: message = new MessageWithPurchaseList(messageHandle); break; case MessageType.Room_Get: message = new MessageWithRoom(messageHandle); break; case MessageType.Room_GetCurrent: case MessageType.Room_GetCurrentForUser: message = new MessageWithRoomUnderCurrentRoom(messageHandle); break; case MessageType.Room_UpdateDataStore: case MessageType.Matchmaking_CreateRoom: case MessageType.Room_UpdatePrivateRoomJoinPolicy: case MessageType.Room_Join: case MessageType.Room_SetDescription: case MessageType.Room_UpdateMembershipLockStatus: case MessageType.Room_InviteUser: case MessageType.Matchmaking_CreateRoom2: case MessageType.Room_KickUser: case MessageType.Matchmaking_JoinRoom: case MessageType.Room_Join2: case MessageType.Room_CreateAndJoinPrivate2: case MessageType.Notification_Room_RoomUpdate: case MessageType.Room_Leave: case MessageType.Room_CreateAndJoinPrivate: message = new MessageWithRoomUnderViewerRoom(messageHandle); break; case MessageType.Room_GetModeratedRooms: case MessageType.Room_GetNextRoomArrayPage: message = new MessageWithRoomList(messageHandle); break; case MessageType.Notification_Room_InviteReceived: message = new MessageWithRoomInviteNotification(messageHandle); break; case MessageType.Notification_GetNextRoomInviteNotificationArrayPage: case MessageType.Notification_GetRoomInvites: message = new MessageWithRoomInviteNotificationList(messageHandle); break; case MessageType.User_GetSdkAccounts: message = new MessageWithSdkAccountList(messageHandle); break; case MessageType.Media_ShareToFacebook: message = new MessageWithShareMediaResult(messageHandle); break; case MessageType.Notification_ApplicationLifecycle_LaunchIntentChanged: case MessageType.User_GetAccessToken: case MessageType.ApplicationLifecycle_GetSessionKey: case MessageType.Application_LaunchOtherApp: case MessageType.Notification_Room_InviteAccepted: message = new MessageWithString(messageHandle); break; case MessageType.Voip_SetSystemVoipSuppressed: message = new MessageWithSystemVoipState(messageHandle); break; case MessageType.User_GetLoggedInUser: case MessageType.User_Get: message = new MessageWithUser(messageHandle); break; case MessageType.User_GetLoggedInUserRecentlyMetUsersAndRooms: case MessageType.User_GetLoggedInUserFriendsAndRooms: case MessageType.User_GetNextUserAndRoomArrayPage: message = new MessageWithUserAndRoomList(messageHandle); break; case MessageType.Room_GetInvitableUsers: case MessageType.User_GetNextUserArrayPage: case MessageType.Room_GetInvitableUsers2: case MessageType.User_GetLoggedInUserFriends: message = new MessageWithUserList(messageHandle); break; case MessageType.User_GetUserProof: message = new MessageWithUserProof(messageHandle); break; case MessageType.Notification_Networking_PeerConnectRequest: case MessageType.Notification_Networking_ConnectionStateChange: message = new MessageWithNetworkingPeer(messageHandle); break; case MessageType.Notification_Networking_PingResult: message = new MessageWithPingResult(messageHandle); break; case MessageType.Notification_Matchmaking_MatchFound: message = new MessageWithMatchmakingNotification(messageHandle); break; case MessageType.Notification_Voip_StateChange: case MessageType.Notification_Voip_ConnectRequest: message = new MessageWithNetworkingPeer(messageHandle); break; case MessageType.Notification_Voip_SystemVoipState: message = new MessageWithSystemVoipState(messageHandle); break; case MessageType.Notification_HTTP_Transfer: message = new MessageWithHttpTransferUpdate(messageHandle); break; case MessageType.Platform_InitializeAndroidAsynchronous: case MessageType.Platform_InitializeWithAccessToken: case MessageType.Platform_InitializeStandaloneOculus: case MessageType.Platform_InitializeWindowsAsynchronous: message = new MessageWithPlatformInitialize(messageHandle); break; default: message = PlatformInternal.ParseMessageHandle(messageHandle, messageType); if (message == null) { Debug.LogError(string.Format("Unrecognized message type {0}\n", messageType)); } break; } return message; } public static Message PopMessage() { if (!Core.IsInitialized()) { return null; } IntPtr intPtr = CAPI.ovr_PopMessage(); Message result = ParseMessageHandle(intPtr); CAPI.ovr_FreeMessage(intPtr); return result; } } }