예제 #1
0
        private static TypeContainer GetTypeContainerFromCode()
        {
            TypeContainer tc = TypeContainer.Instance;

            ////register PlugIn libraries

            //register OPC receivers, converters
            tc.Register <ILogger, ConsoleLogger>();
            tc.Register <IReceiver, OpcReceiver <IMessage> >(TELEMETRY_NAMESPACE);
            tc.Register <IConverter <object, Tag>, OpcTagToTagStateConverter>(TELEMETRY_NAMESPACE);

            //register IotHub sender
            tc.Register <IConverter <Tag, object>, ToIotHubMessageConverter>(TELEMETRY_NAMESPACE);
            tc.Register <ISender, IoTHubTelemetrySender <Tag> >(TELEMETRY_NAMESPACE);

            //register additional libraries from Azure Connector; we don't have to Dictionary<string, object>ally load them
            //  as there are not expected to be changed by the PlugIn writers
            tc.Register <IServiceHost, TelemetryHost>(TELEMETRY_NAMESPACE);

            //Register IotHub command receiver
            tc.Register <IReceiver, IotHubCommandReceiver <Command> >(COMMAND_NAMESPACE);
            tc.Register <IConverter <string, Command>, FromIotHubCommandConverter>(COMMAND_NAMESPACE);
            tc.Register <ICommandExecutor <Command>, OpcUaCommandExecutor> (COMMAND_NAMESPACE);
            tc.Register <IServiceHost, CommandHost>(COMMAND_NAMESPACE);
            //the following generates XML to be used in reflection based ConsoleRunner.
            string xml = tc.GetRegistryAsXml();

            return(tc);
        }
예제 #2
0
        public SimulationManager(ISettings settings, UpdateHub updateHub)
        {
            mainLock       = new object();
            this.settings  = settings;
            this.updateHub = updateHub;


            TypeContainer.Register <ExtensionLoader>(InstanceBehaviour.Singleton);
            TypeContainer.Register <IExtensionLoader, ExtensionLoader>(InstanceBehaviour.Singleton);
            TypeContainer.Register <IExtensionResolver, ExtensionLoader>(InstanceBehaviour.Singleton);
            TypeContainer.Register <DefinitionManager>(InstanceBehaviour.Singleton);
            TypeContainer.Register <IDefinitionManager, DefinitionManager>(InstanceBehaviour.Singleton);
            TypeContainer.Register <DiskPersistenceManager>(InstanceBehaviour.Singleton);
            TypeContainer.Register <IPersistenceManager, DiskPersistenceManager>(InstanceBehaviour.Singleton);
            TypeContainer.Register <ResourceManager>(InstanceBehaviour.Singleton);
            TypeContainer.Register <IResourceManager, ResourceManager>(InstanceBehaviour.Singleton);

            extensionLoader = TypeContainer.Get <ExtensionLoader>();
            extensionLoader.LoadExtensions();

            ResourceManager = TypeContainer.Get <ResourceManager>();
            ResourceManager.InsertUpdateHub(updateHub);

            Service    = new GameService(ResourceManager);
            simulation = new Simulation(ResourceManager, extensionLoader, Service)
            {
                IsServerSide = true
            };
            backgroundThread = new Thread(SimulationLoop)
            {
                Name         = "Simulation Loop",
                IsBackground = true
            };
        }
예제 #3
0
        public ServerHandler()
        {
            logger = (TypeContainer.GetOrNull <ILogger>() ?? NullLogger.Default).As(typeof(ServerHandler));

            TypeContainer.Register <UpdateHub>(InstanceBehaviour.Singleton);
            TypeContainer.Register <IUpdateHub, UpdateHub>(InstanceBehaviour.Singleton);
            TypeContainer.Register <Server>(InstanceBehaviour.Singleton);
            TypeContainer.Register <SimulationManager>(InstanceBehaviour.Singleton);

            SimulationManager = TypeContainer.Get <SimulationManager>();
            UpdateHub         = TypeContainer.Get <IUpdateHub>();
            server            = TypeContainer.Get <Server>();

            defaultManager = new DefaultCommandManager <ushort, CommandParameter, byte[]>(typeof(ServerHandler).Namespace + ".Commands");
        }