From 5e7868902508ee95d25b79e366745f4b64a3bb25 Mon Sep 17 00:00:00 2001 From: Sinan Date: Mon, 24 Sep 2018 12:41:54 +0200 Subject: [PATCH 4/7] Add factory singleton for participitants --- rsb-cil-test/Program.cs | 11 ++++++--- rsb-cil/Rsb/Factory.cs | 61 +++++++++++++++++++++++++++++++++++++++++++++++++ rsb-cil/rsb-cil.csproj | 1 + 3 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 rsb-cil/Rsb/Factory.cs diff --git a/rsb-cil-test/Program.cs b/rsb-cil-test/Program.cs index 851952b..4ec5366 100644 --- a/rsb-cil-test/Program.cs +++ b/rsb-cil-test/Program.cs @@ -79,12 +79,17 @@ namespace rsbciltest listener.Deactivate(); - Console.WriteLine("\nRepository test:"); + + Console.WriteLine("\nRepository test with factory:"); + + Factory.Instance.Host = host; + Factory.Instance.Port = port; DefaultConverterRepository.Instance.addConverter(new ProtocolBufferConverter(JointAngles.Descriptor)); - Informer repoInformer = new Informer("/test/repo", new OutConnector(new BusClientConnection(host, port), DefaultConverterRepository.Instance.SerializationConverterSelector)); - Listener repoListener = new Listener(new InPushConnector(new BusClientConnection(host, port), new Scope("/"), DefaultConverterRepository.Instance.DeserializationConverterSelector)); + Informer repoInformer = Factory.Instance.createInformer("/test/repo"); + Listener repoListener = Factory.Instance.createListener("/"); + repoListener.EventReceived += (e) => { Console.WriteLine("Event: {0}\nData: {1}", e, e.Data); }; diff --git a/rsb-cil/Rsb/Factory.cs b/rsb-cil/Rsb/Factory.cs new file mode 100644 index 0000000..6675a87 --- /dev/null +++ b/rsb-cil/Rsb/Factory.cs @@ -0,0 +1,61 @@ + + +using Rsb.Transport.Socket; +using Rsb.Converter; + +namespace Rsb +{ + public class Factory + { + private static readonly Factory instance = new Factory(); + + private string host = "localhost"; + public string Host { get { return host; } set {host = value;} } + private int port = 30010; + public int Port { get { return port; } set { port = value; } } + + // Explicit static constructor to tell C# compiler + // not to mark type as beforefieldinit + static Factory() + { + } + + private Factory() + { + } + + public static Factory Instance + { + get + { + return instance; + } + } + + public Informer createInformer(Scope scope) { + return new Informer(scope, + new OutConnector( + new BusClientConnection(host, port), + DefaultConverterRepository.Instance.SerializationConverterSelector)); + } + + public Informer createInformer(string scope) { + return createInformer(new Scope(scope)); + } + + public Listener createListener(Scope scope) + { + return new Listener( + new InPushConnector( + new BusClientConnection(host, port), + scope, + DefaultConverterRepository.Instance.DeserializationConverterSelector + )); + } + + public Listener createListener(string scope) { + return createListener(new Scope(scope)); + } + + } +} diff --git a/rsb-cil/rsb-cil.csproj b/rsb-cil/rsb-cil.csproj index 9b86e03..be21d87 100644 --- a/rsb-cil/rsb-cil.csproj +++ b/rsb-cil/rsb-cil.csproj @@ -51,6 +51,7 @@ + -- 2.14.2.windows.1