Separated view request from delta request and respective responses.
This commit is contained in:
@@ -6,7 +6,8 @@ namespace GameServiceWarden.ClientAPI
|
||||
{
|
||||
Disconnect,
|
||||
Connect,
|
||||
Service,
|
||||
View,
|
||||
Delta,
|
||||
UnexpectedCommunication
|
||||
}
|
||||
}
|
@@ -1,9 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace GameServiceWarden.ClientAPI
|
||||
{
|
||||
public interface ICommunicable
|
||||
{
|
||||
CommunicableType Type { get; }
|
||||
}
|
||||
}
|
@@ -1,13 +1,11 @@
|
||||
namespace GameServiceWarden.ClientAPI.Requests
|
||||
namespace GameServiceWarden.ClientAPI.Communicable.Requests
|
||||
{
|
||||
public struct ConnectRequest : ICommunicable
|
||||
public struct ConnectRequest
|
||||
{
|
||||
public string requestedIdentifier;
|
||||
public string programName;
|
||||
public string programAuthor;
|
||||
public string versionNumber;
|
||||
public string details;
|
||||
|
||||
public CommunicableType Type => CommunicableType.Connect;
|
||||
}
|
||||
}
|
@@ -0,0 +1,9 @@
|
||||
using GameServiceWarden.ClientAPI.Module;
|
||||
|
||||
namespace GameServiceWarden.ClientAPI.Communicable.Requests
|
||||
{
|
||||
public struct ServiceRequest
|
||||
{
|
||||
public ServiceManagerAction serviceManagerAction;
|
||||
}
|
||||
}
|
@@ -1,7 +1,7 @@
|
||||
using System;
|
||||
using System.IO.Pipes;
|
||||
|
||||
namespace GameServiceWarden.ClientAPI.Requests
|
||||
namespace GameServiceWarden.ClientAPI.Communicable.Requests
|
||||
{
|
||||
public static class RequestHeader
|
||||
{
|
||||
|
@@ -1,11 +0,0 @@
|
||||
using GameServiceWarden.ClientAPI.Module;
|
||||
|
||||
namespace GameServiceWarden.ClientAPI.Requests
|
||||
{
|
||||
public struct ServiceRequest : ICommunicable
|
||||
{
|
||||
public ServiceManagerAction serviceManagerAction;
|
||||
|
||||
public CommunicableType Type => CommunicableType.Service;
|
||||
}
|
||||
}
|
@@ -0,0 +1,7 @@
|
||||
namespace GameServiceWarden.ClientAPI.Communicable.Requests
|
||||
{
|
||||
public struct ViewRequest
|
||||
{
|
||||
|
||||
}
|
||||
}
|
@@ -1,14 +1,12 @@
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
|
||||
namespace GameServiceWarden.ClientAPI.Responses
|
||||
namespace GameServiceWarden.ClientAPI.Communicable.Responses
|
||||
{
|
||||
public struct ConnectResponse : ICommunicable
|
||||
public struct ConnectResponse
|
||||
{
|
||||
public string identifier;
|
||||
public bool nameTaken;
|
||||
public bool invalidName;
|
||||
public string errorMsg;
|
||||
|
||||
public CommunicableType Type => CommunicableType.Connect;
|
||||
}
|
||||
}
|
@@ -0,0 +1,9 @@
|
||||
using GameServiceWarden.ClientAPI.Module;
|
||||
|
||||
namespace GameServiceWarden.ClientAPI.Communicable.Responses
|
||||
{
|
||||
public struct DeltaResponse
|
||||
{
|
||||
public ServiceManagerTotal gameServiceDelta;
|
||||
}
|
||||
}
|
@@ -1,6 +1,6 @@
|
||||
using System;
|
||||
|
||||
namespace GameServiceWarden.ClientAPI.Responses
|
||||
namespace GameServiceWarden.ClientAPI.Communicable.Responses
|
||||
{
|
||||
public static class ResponseHeader
|
||||
{
|
||||
|
@@ -1,11 +0,0 @@
|
||||
using GameServiceWarden.ClientAPI.Module;
|
||||
|
||||
namespace GameServiceWarden.ClientAPI.Responses
|
||||
{
|
||||
public struct ServiceResponse : ICommunicable
|
||||
{
|
||||
public ServiceManagerState gameServiceDelta;
|
||||
|
||||
public CommunicableType Type => CommunicableType.Service;
|
||||
}
|
||||
}
|
@@ -1,10 +1,8 @@
|
||||
namespace GameServiceWarden.ClientAPI.Responses
|
||||
namespace GameServiceWarden.ClientAPI.Communicable.Responses
|
||||
{
|
||||
public struct UnexpectedRequestResponse : ICommunicable
|
||||
public struct UnexpectedRequestResponse
|
||||
{
|
||||
public CommunicableType origin;
|
||||
public string message;
|
||||
|
||||
public CommunicableType Type => CommunicableType.UnexpectedCommunication;
|
||||
}
|
||||
}
|
@@ -0,0 +1,8 @@
|
||||
using GameServiceWarden.ClientAPI.Module;
|
||||
|
||||
namespace GameServiceWarden.ClientAPI.Communicable.Responses
|
||||
{
|
||||
public struct ViewResponse {
|
||||
public ServiceManagerTotal state;
|
||||
}
|
||||
}
|
@@ -11,7 +11,6 @@ namespace GameServiceWarden.ClientAPI.Module
|
||||
DeleteService,
|
||||
ExecuteCommand,
|
||||
SetServiceOption,
|
||||
View
|
||||
}
|
||||
|
||||
public string assemblyName;
|
||||
|
@@ -0,0 +1,15 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace GameServiceWarden.ClientAPI.Module
|
||||
{
|
||||
public struct ServiceManagerDelta
|
||||
{
|
||||
public bool subtract;
|
||||
public string service;
|
||||
public string running;
|
||||
public string modules;
|
||||
public byte[] logs;
|
||||
public string optionName;
|
||||
public string optionValue;
|
||||
}
|
||||
}
|
@@ -2,10 +2,8 @@ using System.Collections.Generic;
|
||||
|
||||
namespace GameServiceWarden.ClientAPI.Module
|
||||
{
|
||||
public struct ServiceManagerState
|
||||
public struct ServiceManagerTotal
|
||||
{
|
||||
public bool delta;
|
||||
public bool subtract;
|
||||
public ICollection<string> services;
|
||||
public ICollection<string> running;
|
||||
public ICollection<string> modules;
|
@@ -5,5 +5,6 @@ namespace GameServiceWarden.Core.Module
|
||||
public interface IServiceManagerActionExecuter
|
||||
{
|
||||
void ExecuteAction(ServiceManagerAction action);
|
||||
void ViewState();
|
||||
}
|
||||
}
|
@@ -4,6 +4,7 @@ namespace GameServiceWarden.Core.Module
|
||||
{
|
||||
public interface IServiceManagerMonitor
|
||||
{
|
||||
void Present(ServiceManagerState state);
|
||||
void Present(ServiceManagerTotal state);
|
||||
void Present(ServiceManagerDelta delta);
|
||||
}
|
||||
}
|
@@ -6,6 +6,7 @@ using GameServiceWarden.ClientAPI.Module;
|
||||
using GameServiceWarden.Core.Persistence;
|
||||
using GameServiceWarden.ModuleAPI;
|
||||
using GameServiceWarden.Core.Collection;
|
||||
using System.Text;
|
||||
|
||||
namespace GameServiceWarden.Core.Module
|
||||
{
|
||||
@@ -35,11 +36,9 @@ namespace GameServiceWarden.Core.Module
|
||||
data[ServiceDescriptor.ASSEMBLY_PROPERTY] = assemblyName;
|
||||
data[ServiceDescriptor.MODULE_PROPERTY] = moduleName;
|
||||
services.AddToPersistence(serviceName, data);
|
||||
ServiceManagerState managerState = new ServiceManagerState();
|
||||
managerState.delta = true;
|
||||
ServiceManagerDelta managerState = new ServiceManagerDelta();
|
||||
managerState.subtract = false;
|
||||
managerState.services = new List<string>();
|
||||
managerState.services.Add(serviceName);
|
||||
managerState.service = serviceName;
|
||||
managerMonitor.Present(managerState);
|
||||
}
|
||||
|
||||
@@ -48,17 +47,15 @@ namespace GameServiceWarden.Core.Module
|
||||
if (!services.ContainsKey(serviceName)) throw new KeyNotFoundException($"Service under name \"{serviceName}\" not found.");
|
||||
if (running.ContainsKey(serviceName)) running[serviceName].Stop();
|
||||
services.Delete(serviceName);
|
||||
ServiceManagerState managerState = new ServiceManagerState();
|
||||
managerState.delta = true;
|
||||
ServiceManagerDelta managerState = new ServiceManagerDelta();
|
||||
managerState.subtract = true;
|
||||
managerState.services = new List<string>();
|
||||
managerState.services.Add(serviceName);
|
||||
managerState.service = serviceName;
|
||||
managerMonitor.Present(managerState);
|
||||
}
|
||||
|
||||
public IEnumerable<string> GetModuleNames()
|
||||
{
|
||||
ServiceManagerState managerState = new ServiceManagerState();
|
||||
ServiceManagerTotal managerState = new ServiceManagerTotal();
|
||||
managerState.modules = modules.Keys.ToImmutableArray();
|
||||
managerMonitor.Present(managerState);
|
||||
return modules.Keys;
|
||||
@@ -66,14 +63,14 @@ namespace GameServiceWarden.Core.Module
|
||||
|
||||
public IEnumerable<string> GetServiceNames()
|
||||
{
|
||||
ServiceManagerState managerState = new ServiceManagerState();
|
||||
ServiceManagerTotal managerState = new ServiceManagerTotal();
|
||||
managerState.services = services.Keys.ToImmutableArray();
|
||||
managerMonitor.Present(managerState);
|
||||
return services.Keys;
|
||||
}
|
||||
|
||||
public IEnumerable<string> GetRunningServiceNames() {
|
||||
ServiceManagerState managerState = new ServiceManagerState();
|
||||
ServiceManagerTotal managerState = new ServiceManagerTotal();
|
||||
managerState.running = running.Keys.ToImmutableArray();
|
||||
managerMonitor.Present(managerState);
|
||||
return running.Keys;
|
||||
@@ -97,7 +94,7 @@ namespace GameServiceWarden.Core.Module
|
||||
}
|
||||
|
||||
public IReadOnlyDictionary<string, IReadOnlyDictionary<string, string>> GetOptions() {
|
||||
ServiceManagerState managerState = new ServiceManagerState();
|
||||
ServiceManagerTotal managerState = new ServiceManagerTotal();
|
||||
Dictionary<string, IReadOnlyDictionary<string, string>> serviceOptions = new Dictionary<string, IReadOnlyDictionary<string, string>>();
|
||||
foreach (string service in GetServiceNames())
|
||||
{
|
||||
@@ -119,17 +116,14 @@ namespace GameServiceWarden.Core.Module
|
||||
IReadOnlyDictionary<string, string> info = services[serviceName];
|
||||
ServiceDescriptor service = descriptorCache.Use(serviceName, () => GenerateDescriptor(serviceName, info[ServiceDescriptor.ASSEMBLY_PROPERTY], info[ServiceDescriptor.MODULE_PROPERTY]));
|
||||
if (!service.GetConfigurableOptions().Contains(optionName)) throw new KeyNotFoundException($"Option \"{optionName}\" for service \"{serviceName}\" not found.");
|
||||
ServiceManagerState managerState = new ServiceManagerState();
|
||||
ServiceManagerDelta managerState = new ServiceManagerDelta();
|
||||
if (service.SetConfigurableValue(optionName, value)) {
|
||||
managerState.delta = true;
|
||||
Dictionary<string, IReadOnlyDictionary<string, string>> changedOption = new Dictionary<string, IReadOnlyDictionary<string, string>>();
|
||||
Dictionary<string, string> options = new Dictionary<string, string>();
|
||||
options[optionName] = GetServiceOptionValue(serviceName, optionName);
|
||||
changedOption[serviceName] = options;
|
||||
managerState.serviceOptions = changedOption;
|
||||
managerState.optionName = optionName;
|
||||
managerState.optionValue = GetServiceOptionValue(serviceName, optionName);
|
||||
managerMonitor.Present(managerState);
|
||||
return true;
|
||||
}
|
||||
managerMonitor.Present(managerState);
|
||||
return managerState.delta;
|
||||
return false;
|
||||
}
|
||||
|
||||
public void StartService(string serviceName)
|
||||
@@ -168,7 +162,7 @@ namespace GameServiceWarden.Core.Module
|
||||
{
|
||||
logs.Add(service, running[service].GetLogBuffer());
|
||||
}
|
||||
ServiceManagerState managerState = new ServiceManagerState();
|
||||
ServiceManagerTotal managerState = new ServiceManagerTotal();
|
||||
managerState.logs = logs;
|
||||
managerMonitor.Present(managerState);
|
||||
return logs;
|
||||
@@ -180,15 +174,13 @@ namespace GameServiceWarden.Core.Module
|
||||
|
||||
private void OnServiceStateChange(object sender, ServiceState state) {
|
||||
ServiceDescriptor serviceInfo = (ServiceDescriptor)sender;
|
||||
ServiceManagerState managerChange = new ServiceManagerState();
|
||||
ServiceManagerDelta managerChange = new ServiceManagerDelta();
|
||||
|
||||
switch (state)
|
||||
{
|
||||
case ServiceState.Running:
|
||||
if (running.TryAdd(serviceInfo.ServiceName, serviceInfo)) {
|
||||
managerChange.delta = true;
|
||||
managerChange.running = new List<string>();
|
||||
managerChange.running.Add(serviceInfo.ServiceName);
|
||||
managerChange.running = serviceInfo.ServiceName;
|
||||
}
|
||||
break;
|
||||
case ServiceState.Stopped:
|
||||
@@ -200,10 +192,8 @@ namespace GameServiceWarden.Core.Module
|
||||
removedInfo[ServiceDescriptor.ASSEMBLY_PROPERTY] = removed.GetAssemblyName();
|
||||
removedInfo[ServiceDescriptor.MODULE_PROPERTY] = removed.GetModuleName();
|
||||
services[serviceInfo.ServiceName] = removedInfo;
|
||||
managerChange.delta = true;
|
||||
managerChange.subtract = true;
|
||||
managerChange.running = new List<string>();
|
||||
managerChange.running.Add(serviceInfo.ServiceName);
|
||||
managerChange.running = serviceInfo.ServiceName;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -213,25 +203,15 @@ namespace GameServiceWarden.Core.Module
|
||||
|
||||
void OnLogUpdated(object sender, string update) {
|
||||
ServiceDescriptor service = (ServiceDescriptor)sender;
|
||||
ServiceManagerState state = new ServiceManagerState();
|
||||
state.delta = true;
|
||||
Dictionary<string, string> logUpdate = new Dictionary<string, string>();
|
||||
logUpdate[service.ServiceName] = update;
|
||||
managerMonitor.Present(state);
|
||||
ServiceManagerDelta delta = new ServiceManagerDelta();
|
||||
delta.logs = Encoding.UTF8.GetBytes(update);
|
||||
managerMonitor.Present(delta);
|
||||
}
|
||||
|
||||
public void ExecuteAction(ServiceManagerAction action)
|
||||
{
|
||||
switch (action.action)
|
||||
{
|
||||
case ServiceManagerAction.Type.View:
|
||||
GetServiceNames();
|
||||
GetRunningServiceNames();
|
||||
GetModuleNames();
|
||||
GetLogBuffer();
|
||||
GetOptions();
|
||||
break;
|
||||
|
||||
case ServiceManagerAction.Type.CreateService:
|
||||
CreateService(action.serviceName, action.assemblyName, action.moduleName);
|
||||
break;
|
||||
@@ -254,5 +234,14 @@ namespace GameServiceWarden.Core.Module
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void ViewState()
|
||||
{
|
||||
GetServiceNames();
|
||||
GetRunningServiceNames();
|
||||
GetModuleNames();
|
||||
GetLogBuffer();
|
||||
GetOptions();
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,7 +1,7 @@
|
||||
using System.Diagnostics;
|
||||
using System.Text.Json;
|
||||
using GameServiceWarden.ClientAPI;
|
||||
using GameServiceWarden.ClientAPI.Requests;
|
||||
using GameServiceWarden.ClientAPI.Communicable.Requests;
|
||||
using GameServiceWarden.Core.Module;
|
||||
using GameServiceWarden.Core.Logging;
|
||||
|
||||
@@ -26,9 +26,13 @@ namespace GameServiceWarden.Core.UI
|
||||
{
|
||||
switch (action.Item2)
|
||||
{
|
||||
case CommunicableType.Service:
|
||||
ServiceRequest request = JsonSerializer.Deserialize<ServiceRequest>(action.Item3);
|
||||
serviceExecutioner.ExecuteAction(request.serviceManagerAction);
|
||||
case CommunicableType.Delta:
|
||||
ServiceRequest delta = JsonSerializer.Deserialize<ServiceRequest>(action.Item3);
|
||||
serviceExecutioner.ExecuteAction(delta.serviceManagerAction);
|
||||
break;
|
||||
case CommunicableType.View:
|
||||
ViewRequest view = JsonSerializer.Deserialize<ViewRequest>(action.Item3);
|
||||
serviceExecutioner.ViewState();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@@ -8,8 +8,8 @@ using System.Text.Json;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using GameServiceWarden.ClientAPI;
|
||||
using GameServiceWarden.ClientAPI.Requests;
|
||||
using GameServiceWarden.ClientAPI.Responses;
|
||||
using GameServiceWarden.ClientAPI.Communicable.Requests;
|
||||
using GameServiceWarden.ClientAPI.Communicable.Responses;
|
||||
using GameServiceWarden.Core.Logging;
|
||||
|
||||
namespace GameServiceWarden.Core.UI
|
||||
|
@@ -15,9 +15,16 @@ namespace GameServiceWarden.Core.UI
|
||||
this.mediator = mediator;
|
||||
}
|
||||
|
||||
public void Present(ServiceManagerState state)
|
||||
public void Present(ServiceManagerTotal state)
|
||||
{
|
||||
Task replyTask = mediator.ReplyAll(CommunicableType.Service, JsonSerializer.SerializeToUtf8Bytes(state));
|
||||
Task replyTask = mediator.ReplyAll(CommunicableType.View, JsonSerializer.SerializeToUtf8Bytes(state));
|
||||
replyTask.Wait();
|
||||
}
|
||||
|
||||
public void Present(ServiceManagerDelta delta)
|
||||
{
|
||||
Task replyTask = mediator.ReplyAll(CommunicableType.Delta, JsonSerializer.SerializeToUtf8Bytes(delta));
|
||||
replyTask.Wait();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user