From 90cb844e527e7d72a1c8b2faeea606792607abe2 Mon Sep 17 00:00:00 2001 From: "a.bozhenov" Date: Fri, 25 Oct 2019 20:59:58 +0300 Subject: [PATCH] Ext Append method 'RegisterInboxIfNoExists' in server methods. --- .../Services/Network/Contracts/IServer.cs | 7 ++- ZeroLevel/Services/Network/SocketServer.cs | 7 ++- ZeroLevel/Services/Network/Utils/Router.cs | 44 +++++++++++++++++++ 3 files changed, 55 insertions(+), 3 deletions(-) diff --git a/ZeroLevel/Services/Network/Contracts/IServer.cs b/ZeroLevel/Services/Network/Contracts/IServer.cs index 79761ca..235220d 100644 --- a/ZeroLevel/Services/Network/Contracts/IServer.cs +++ b/ZeroLevel/Services/Network/Contracts/IServer.cs @@ -9,10 +9,13 @@ namespace ZeroLevel.Network #region Messages IServer RegisterInbox(string inbox, MessageHandler handler); IServer RegisterInbox(string inbox, MessageHandler handler); - - // Default inboxe IServer RegisterInbox(MessageHandler handler); IServer RegisterInbox(MessageHandler handler); + + IServer RegisterInboxIfNoExists(string inbox, MessageHandler handler); + IServer RegisterInboxIfNoExists(string inbox, MessageHandler handler); + IServer RegisterInboxIfNoExists(MessageHandler handler); + IServer RegisterInboxIfNoExists(MessageHandler handler); #endregion #region Requests diff --git a/ZeroLevel/Services/Network/SocketServer.cs b/ZeroLevel/Services/Network/SocketServer.cs index e4f0fdf..12e01e9 100644 --- a/ZeroLevel/Services/Network/SocketServer.cs +++ b/ZeroLevel/Services/Network/SocketServer.cs @@ -142,9 +142,14 @@ namespace ZeroLevel.Network public void HandleRequest(Frame frame, ISocketClient client, int identity, Action handler) => _router.HandleRequest(frame, client, identity, handler); public IServer RegisterInbox(string inbox, MessageHandler handler) => _router.RegisterInbox(inbox, handler); public IServer RegisterInbox(MessageHandler handler) => _router.RegisterInbox(handler); - public IServer RegisterInbox(string inbox, MessageHandler handler) => _router.RegisterInbox(inbox, handler); public IServer RegisterInbox(MessageHandler handler) => _router.RegisterInbox(handler); + + public IServer RegisterInboxIfNoExists(string inbox, MessageHandler handler) => _router.RegisterInboxIfNoExists(inbox, handler); + public IServer RegisterInboxIfNoExists(MessageHandler handler) => _router.RegisterInboxIfNoExists(handler); + public IServer RegisterInboxIfNoExists(string inbox, MessageHandler handler) => _router.RegisterInboxIfNoExists(inbox, handler); + public IServer RegisterInboxIfNoExists(MessageHandler handler) => _router.RegisterInboxIfNoExists(handler); + public IServer RegisterInbox(string inbox, RequestHandler handler) => _router.RegisterInbox(inbox, handler); public IServer RegisterInbox(string inbox, RequestHandler handler) => _router.RegisterInbox(inbox, handler); public IServer RegisterInbox(RequestHandler handler) => _router.RegisterInbox(handler); diff --git a/ZeroLevel/Services/Network/Utils/Router.cs b/ZeroLevel/Services/Network/Utils/Router.cs index 8e5c4d0..18a8dc2 100644 --- a/ZeroLevel/Services/Network/Utils/Router.cs +++ b/ZeroLevel/Services/Network/Utils/Router.cs @@ -320,6 +320,46 @@ namespace ZeroLevel.Network _handlers[BaseSocket.DEFAULT_MESSAGE_INBOX].Add(MRInvoker.Create(handler)); return this; } + + public IServer RegisterInboxIfNoExists(string inbox, MessageHandler handler) + { + if (false == _handlers.ContainsKey(inbox)) + { + _handlers.Add(inbox, new List()); + _handlers[inbox].Add(MRInvoker.Create(handler)); + } + return this; + } + + public IServer RegisterInboxIfNoExists(string inbox, MessageHandler handler) + { + if (false == _handlers.ContainsKey(inbox)) + { + _handlers.Add(inbox, new List()); + _handlers[inbox].Add(MRInvoker.Create(handler)); + } + return this; + } + + public IServer RegisterInboxIfNoExists(MessageHandler handler) + { + if (false == _handlers.ContainsKey(BaseSocket.DEFAULT_MESSAGE_INBOX)) + { + _handlers.Add(BaseSocket.DEFAULT_MESSAGE_INBOX, new List()); + _handlers[BaseSocket.DEFAULT_MESSAGE_INBOX].Add(MRInvoker.Create(handler)); + } + return this; + } + + public IServer RegisterInboxIfNoExists(MessageHandler handler) + { + if (false == _handlers.ContainsKey(BaseSocket.DEFAULT_MESSAGE_INBOX)) + { + _handlers.Add(BaseSocket.DEFAULT_MESSAGE_INBOX, new List()); + _handlers[BaseSocket.DEFAULT_MESSAGE_INBOX].Add(MRInvoker.Create(handler)); + } + return this; + } #endregion #region Request handlers registration @@ -405,6 +445,10 @@ namespace ZeroLevel.Network public IServer RegisterInbox(string inbox, MessageHandler handler) { return this; } public IServer RegisterInbox(MessageHandler handler) { return this; } public IServer RegisterInbox(MessageHandler handler) { return this; } + public IServer RegisterInboxIfNoExists(string inbox, MessageHandler handler) { return this; } + public IServer RegisterInboxIfNoExists(string inbox, MessageHandler handler) { return this; } + public IServer RegisterInboxIfNoExists(MessageHandler handler) { return this; } + public IServer RegisterInboxIfNoExists(MessageHandler handler) { return this; } public IServer RegisterInbox(string inbox, RequestHandler handler) { return this; } public IServer RegisterInbox(string inbox, RequestHandler handler) { return this; } public IServer RegisterInbox(RequestHandler handler) { return this; }