diff options
author | Ignacio Roldán Etcheverry <neikeq@users.noreply.github.com> | 2020-05-10 13:33:03 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-10 13:33:03 +0200 |
commit | 54b20a25b90c8c8d8dfd7f68d66d0ec57c71435f (patch) | |
tree | ed0fd3e030e6f65568f664bc9f5d2bb028f37618 /modules/mono/editor/GodotTools/GodotTools.IdeMessaging/ClientMessageHandler.cs | |
parent | da898c116c0b45ff0dc16e80800f8694339cd4f1 (diff) | |
parent | 3ce09246d10a267bf00ae8bf37068ec458c69287 (diff) |
Merge pull request #38600 from neikeq/no
Switch to nuget Microsoft.Build and rewrite GodotTools messasing protocol
Diffstat (limited to 'modules/mono/editor/GodotTools/GodotTools.IdeMessaging/ClientMessageHandler.cs')
-rw-r--r-- | modules/mono/editor/GodotTools/GodotTools.IdeMessaging/ClientMessageHandler.cs | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/modules/mono/editor/GodotTools/GodotTools.IdeMessaging/ClientMessageHandler.cs b/modules/mono/editor/GodotTools/GodotTools.IdeMessaging/ClientMessageHandler.cs new file mode 100644 index 0000000000..64bcfd824c --- /dev/null +++ b/modules/mono/editor/GodotTools/GodotTools.IdeMessaging/ClientMessageHandler.cs @@ -0,0 +1,52 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using GodotTools.IdeMessaging.Requests; +using Newtonsoft.Json; + +namespace GodotTools.IdeMessaging +{ + // ReSharper disable once UnusedType.Global + public abstract class ClientMessageHandler : IMessageHandler + { + private readonly Dictionary<string, Peer.RequestHandler> requestHandlers; + + protected ClientMessageHandler() + { + requestHandlers = InitializeRequestHandlers(); + } + + public async Task<MessageContent> HandleRequest(Peer peer, string id, MessageContent content, ILogger logger) + { + if (!requestHandlers.TryGetValue(id, out var handler)) + { + logger.LogError($"Received unknown request: {id}"); + return new MessageContent(MessageStatus.RequestNotSupported, "null"); + } + + try + { + var response = await handler(peer, content); + return new MessageContent(response.Status, JsonConvert.SerializeObject(response)); + } + catch (JsonException) + { + logger.LogError($"Received request with invalid body: {id}"); + return new MessageContent(MessageStatus.InvalidRequestBody, "null"); + } + } + + private Dictionary<string, Peer.RequestHandler> InitializeRequestHandlers() + { + return new Dictionary<string, Peer.RequestHandler> + { + [OpenFileRequest.Id] = async (peer, content) => + { + var request = JsonConvert.DeserializeObject<OpenFileRequest>(content.Body); + return await HandleOpenFile(request); + } + }; + } + + protected abstract Task<Response> HandleOpenFile(OpenFileRequest request); + } +} |