static void Main(string[] args)
        {
            IModule  module   = new Module();
            Injector injector = DependancyInjector.CreateInjector(module);

            IEngine engine = injector.Inject <Engine>();

            engine.Run();
        }
示例#2
0
文件: Node.cs 项目: mikeblakeuk/MNP
        public Node(ILogProvider logProvider = null)
        {
            // Setup core properties
            LogProvider                    = logProvider ?? new DefaultLogProvider();
            DependancyInjector             = Injector.Instance;
            DependancyInjector.LogProvider = LogProvider;

            // Setup the IoC container
            DependancyInjector.Bind(LogProvider);
            DependancyInjector.Bind <ISocket, TCPSocket>();
            DependancyInjector.Bind <IBroadcastSocket, UDPSocket>();
            DependancyInjector.Bind <CacheProvider <String, ClientResultMessage>, DefaultCache <String, ClientResultMessage> >();
            DependancyInjector.Bind <IObservableQueue <ClientProcess>, ObservablePriorityQueue <ClientProcess> >();
            DependancyInjector.Bind <ISerialiser <AutoDiscoveryMessage, byte[]>, DefaultSerialiser <AutoDiscoveryMessage> >();
            DependancyInjector.Bind <ISerialiser <ClientMessage, byte[]>, DefaultSerialiser <ClientMessage> >();
            DependancyInjector.Bind <ISerialiser <ClientProcess, byte[]>, DefaultSerialiser <ClientProcess> >();
            DependancyInjector.Bind <ISerialiser <ClientResultMessage, byte[]>, DefaultSerialiser <ClientResultMessage> >();
            DependancyInjector.Bind <ISerialiser <InterNodeCommunicationMessage, byte[]>, DefaultSerialiser <InterNodeCommunicationMessage> >();
            DependancyInjector.Bind <ISerialiser <IObservableQueue <ClientProcess>, byte[]>, DefaultSerialiser <IObservableQueue <ClientProcess> > >();
            //DependancyInjector.Bind<ISerialiser<CacheProvider<String, ClientResultMessage>, byte[]>, DefaultSerialiser<DefaultCache<String, ClientResultMessage>>>();

            // load the plugins
            _pluginManager = new PluginManager();
        }
示例#3
0
文件: Node.cs 项目: mikeblakeuk/MNP
        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);
            }
        }