using System.Collections.Immutable; using Phantom.Common.Data.Java; using Phantom.Common.Data.Minecraft; using Phantom.Common.Data.Replies; using Phantom.Common.Data.Web.AuditLog; using Phantom.Common.Data.Web.EventLog; using Phantom.Common.Data.Web.Instance; using Phantom.Common.Data.Web.Users; using Phantom.Common.Logging; using Phantom.Common.Messages.Web.BiDirectional; using Phantom.Common.Messages.Web.ToController; using Phantom.Common.Messages.Web.ToWeb; using Phantom.Utils.Rpc.Message; namespace Phantom.Common.Messages.Web; public static class WebMessageRegistries { public static MessageRegistry<IMessageToControllerListener> ToController { get; } = new (PhantomLogger.Create("MessageRegistry", nameof(ToController))); public static MessageRegistry<IMessageToWebListener> ToWeb { get; } = new (PhantomLogger.Create("MessageRegistry", nameof(ToWeb))); public static IMessageDefinitions<IMessageToWebListener, IMessageToControllerListener, ReplyMessage> Definitions { get; } = new MessageDefinitions(); static WebMessageRegistries() { ToController.Add<RegisterWebMessage>(0); ToController.Add<UnregisterWebMessage>(1); ToController.Add<LogInMessage, LogInSuccess?>(2); ToController.Add<CreateOrUpdateAdministratorUserMessage, CreateOrUpdateAdministratorUserResult>(3); ToController.Add<CreateUserMessage, CreateUserResult>(4); ToController.Add<DeleteUserMessage, DeleteUserResult>(5); ToController.Add<GetUsersMessage, ImmutableArray<UserInfo>>(6); ToController.Add<GetRolesMessage, ImmutableArray<RoleInfo>>(7); ToController.Add<GetUserRolesMessage, ImmutableDictionary<Guid, ImmutableArray<Guid>>>(8); ToController.Add<ChangeUserRolesMessage, ChangeUserRolesResult>(9); ToController.Add<CreateOrUpdateInstanceMessage, InstanceActionResult<CreateOrUpdateInstanceResult>>(10); ToController.Add<LaunchInstanceMessage, InstanceActionResult<LaunchInstanceResult>>(11); ToController.Add<StopInstanceMessage, InstanceActionResult<StopInstanceResult>>(12); ToController.Add<SendCommandToInstanceMessage, InstanceActionResult<SendCommandToInstanceResult>>(13); ToController.Add<GetMinecraftVersionsMessage, ImmutableArray<MinecraftVersion>>(14); ToController.Add<GetAgentJavaRuntimesMessage, ImmutableDictionary<Guid, ImmutableArray<TaggedJavaRuntime>>>(15); ToController.Add<GetAuditLogMessage, ImmutableArray<AuditLogItem>>(16); ToController.Add<GetEventLogMessage, ImmutableArray<EventLogItem>>(17); ToController.Add<ReplyMessage>(127); ToWeb.Add<RegisterWebResultMessage>(0); ToWeb.Add<RefreshAgentsMessage>(1); ToWeb.Add<RefreshInstancesMessage>(2); ToWeb.Add<InstanceOutputMessage>(3); ToWeb.Add<ReplyMessage>(127); } private sealed class MessageDefinitions : IMessageDefinitions<IMessageToWebListener, IMessageToControllerListener, ReplyMessage> { public MessageRegistry<IMessageToWebListener> ToClient => ToWeb; public MessageRegistry<IMessageToControllerListener> ToServer => ToController; public bool IsRegistrationMessage(Type messageType) { return messageType == typeof(RegisterWebMessage); } public ReplyMessage CreateReplyMessage(uint sequenceId, byte[] serializedReply) { return new ReplyMessage(sequenceId, serializedReply); } } }