public void Start() { // Resolve all the types _clientCommunicationsSocket = DependancyInjector.Resolve <ISocket>(); _internodeConnectionSocket = DependancyInjector.Resolve <ISocket>(); _internodeListeningSocket = DependancyInjector.Resolve <ISocket>(); AutoDiscoveryMessageSerialiser = DependancyInjector.Resolve <ISerialiser <AutoDiscoveryMessage, byte[]> >(); //CacheSerialiser = DependancyInjector.Resolve<ISerialiser<CacheProvider<String, ClientResultMessage>, byte[]>>(); ClientMessageSerialiser = DependancyInjector.Resolve <ISerialiser <ClientMessage, byte[]> >(); ClientProcessSerialiser = DependancyInjector.Resolve <ISerialiser <ClientProcess, byte[]> >(); ClientResultMessageSerialiser = DependancyInjector.Resolve <ISerialiser <ClientResultMessage, byte[]> >(); InterNodeCommunicationMessageSerialiser = DependancyInjector.Resolve <ISerialiser <InterNodeCommunicationMessage, byte[]> >(); PrioritisedQueueSerialiser = DependancyInjector.Resolve <ISerialiser <IObservableQueue <ClientProcess>, byte[]> >(); ProcessQueue = DependancyInjector.Resolve <IObservableQueue <ClientProcess> >(); ResultCache = DependancyInjector.Resolve <CacheProvider <String, ClientResultMessage> >(); NodeTask = DependancyInjector.Resolve <INodeTask>(); if (NodeTask == null) { Console.WriteLine("ERROR :: NodeTask is not defined."); } // Setup the auto discovery socket (if applicable) if (UseAutoDiscovery) { if (AutoDiscoveryPort <= 0) { AutoDiscoveryPort = 275; } _autoDiscoverySocket = DependancyInjector.Resolve <IBroadcastSocket>(); _autoDiscoverySocket.AllowAddressReuse = true; _autoDiscoverySocket.UseBroadcasting = true; _autoDiscoverySocket.Port = AutoDiscoveryPort; _autoDiscoverySocket.BindingAddress = IPAddress.Parse(AutoDiscoveryBindingAddress); } // hook up the events ready ResultCache.Subscribe(new ResultCacheObserver(this, LogProvider)); ProcessQueue.Subscribe(new PrioritisedQueueObserver(this, LogProvider)); _internodeConnectionSocket.OnClientConnectCompleted += internode_OnClientConnectCompleted; _internodeConnectionSocket.OnDataReceived += internode_OnDataReceived; _internodeListeningSocket.OnClientConnectCompleted += internode_OnClientConnectCompleted; _internodeListeningSocket.OnDataReceived += internode_OnDataReceived; _clientCommunicationsSocket.OnDataReceived += client_OnDataReceived; // setup the arguments ready if (ClientPort <= 0) { ClientPort = 270; } if (InternodePort <= 0) { InternodePort = 280; } if (String.IsNullOrEmpty(ClientBindingAddress)) { ClientBindingAddress = "0.0.0.0"; } if (String.IsNullOrEmpty(InternodeBindingAddress)) { InternodeBindingAddress = "0.0.0.0"; } _clientCommunicationsSocket.Port = ClientPort; _clientCommunicationsSocket.BindingAddress = IPAddress.Parse(ClientBindingAddress); _internodeConnectionSocket.Port = InternodePort; _internodeConnectionSocket.BindingAddress = IPAddress.Parse(InternodeBindingAddress); _internodeListeningSocket.Port = InternodePort; _internodeListeningSocket.BindingAddress = IPAddress.Parse(InternodeBindingAddress); _internodeListeningSocket.Start(); _clientCommunicationsSocket.Start(); if (UseAutoDiscovery) { _autoDiscoverySocket.OnDataReceived += autodiscovery_OnDataReceived; _autoDiscoverySocket.Start(); _autoDiscoverySocket.SendBroadcastMessage(BroadcastMessageType.Startup, AutoDiscoveryMessageSerialiser, AutoDiscoveryPort); } }