From 9ee56b759f17f8261064d9859d7206f05718b73a Mon Sep 17 00:00:00 2001 From: Sinan Date: Mon, 24 Sep 2018 12:41:54 +0200 Subject: [PATCH 4/5] Add factory singleton for participitants --- rsb-cil-test/Program.cs | 14 +++++----- rsb-cil/Rsb/Factory.cs | 69 +++++++++++++++++++++++++++++++++++++++++++++++++ rsb-cil/rsb-cil.csproj | 1 + 3 files changed, 78 insertions(+), 6 deletions(-) create mode 100644 rsb-cil/Rsb/Factory.cs diff --git a/rsb-cil-test/Program.cs b/rsb-cil-test/Program.cs index 1c5f39d..78a5cab 100644 --- a/rsb-cil-test/Program.cs +++ b/rsb-cil-test/Program.cs @@ -74,15 +74,17 @@ namespace rsbciltest listener.Deactivate(); - Console.WriteLine("\nConverter test:"); + Console.WriteLine("\nRepository test with factory:"); - DefaultConverterRepository.Instance.addConverter(new ProtocolBufferConverter(JointAngles.Descriptor)); + Factory.Instance.Host = host; + Factory.Instance.Port = port; - 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)); + DefaultConverterRepository.Instance.addConverter(new ProtocolBufferConverter(JointAngles.Descriptor)); - repoListener.EventReceived += (e) => - { + Informer repoInformer = Factory.Instance.createInformer("/test/repo"); + Listener repoListener = Factory.Instance.createListener("/"); + + repoListener.EventReceived += (e) => { Console.WriteLine("Event: {0}\nData: {1}", e, e.Data); }; repoListener.Activate(); diff --git a/rsb-cil/Rsb/Factory.cs b/rsb-cil/Rsb/Factory.cs new file mode 100644 index 0000000..cede2d4 --- /dev/null +++ b/rsb-cil/Rsb/Factory.cs @@ -0,0 +1,69 @@ + + +using Rsb.Transport.Socket; +using Rsb.Converter; + +using System; + +namespace Rsb +{ + public class Factory + { + private static readonly Factory instance = new Factory(); + + private byte[] host = {127,0,0,1}; + public byte[] Host { + get { return host; } + set { + if (value.Length != 4) throw new ArgumentException("A IPv4 adress has to have exactly 4 bytes"); + 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 4b191fb..618a864 100644 --- a/rsb-cil/rsb-cil.csproj +++ b/rsb-cil/rsb-cil.csproj @@ -51,6 +51,7 @@ + -- 2.14.2.windows.1