예제 #1
0
 /// <summary>
 /// Constructor with a socket
 /// </summary>
 /// <param name="socket"></param>
 public RpcConnection(WebSocket socket)
 {
     m_socket        = socket;
     m_authenticated = false;
     // Get references to the core components we need
     m_builder    = new MessageBuilder();
     m_messagebus = Locator.Current.GetService <IMessageBus>();
     m_mot        = Locator.Current.GetService <MasterObjectTable>();
     // Listen for incoming messages
     m_socket.DataReceived += OnDataReceived;
 }
예제 #2
0
        /// <summary>
        /// Constructor
        /// </summary>
        public ServiceManager()
        {
            // Add ourselves to the MOT
            MasterObjectTable mot = Locator.Current.GetService <MasterObjectTable>();

            mot.AddMetaData(Utilities.GetContainingAssembly <ServiceManager>());
            mot.AddInstance(this);
            // Load and apply our configuration (IFolder must be available by now)
            IConfigurationDescription    serverConfigDescription = mot.GetConfigurationDescription(UUID);
            IDictionary <string, object> serverConfig            = mot.GetConfigurationFromFile(UUID, "SensHub.json");

            ApplyConfiguration(serverConfigDescription, serverConfig);
        }
예제 #3
0
/*
 *              /// <summary>
 *              /// Populate the plugin list with all plugins found in the specified directory.
 *              ///
 *              /// This method does not initialise the plugins, it simply discovers them and
 *              /// adds them to master list.
 *              /// </summary>
 *              /// <param name="directory"></param>
 *              public void LoadPlugins(string directory)
 *              {
 *                      this.Log().Debug("Scanning directory '{0}' for plugins.", directory);
 *                      if (!Directory.Exists(directory))
 *                      {
 *                              this.Log().Warn("Plugin directory '{0}' does not exist.", directory);
 *                              return;
 *                      }
 *                      MasterObjectTable mot = Locator.Current.GetService<MasterObjectTable>();
 *                      String[] files = Directory.GetFiles(directory, "*.dll");
 *                      foreach (string pluginDLL in files)
 *                      {
 *                              // Load the assembly
 *                              Assembly asm = null;
 *                              try
 *                              {
 *                                      this.Log().Debug("Attempting to load '{0}'", pluginDLL);
 *                                      asm = Assembly.LoadFile(pluginDLL);
 *                              }
 *                              catch (Exception ex)
 *                              {
 *                                      this.Log().Error("Failed to load assembly from file '{0}' - {1}", pluginDLL, ex.Message);
 *                                      continue;
 *                              }
 *                              // Get the plugins defined in the file (it can have more than one)
 *                              Type[] types = null;
 *                              try
 *                              {
 *                                      types = asm.GetTypes();
 *                              }
 *                              catch (Exception ex)
 *                              {
 *                                      // TODO: an exception here indicates a plugin built against a different version
 *                                      //       of the API. Should report it as such.
 *                                      this.Log().Error("Failed to load assembly from file '{0}' - {1}", pluginDLL, ex.Message);
 *                                      continue;
 *                              }
 *                              // Load metadata from the assembly
 *                              mot.AddMetaData(asm);
 *                              // Look for plugins
 *                              foreach (var candidate in types)
 *                              {
 *                                      if (typeof(AbstractPlugin).IsAssignableFrom(candidate))
 *                                      {
 *                                              // Go ahead and try to load it
 *                                              try
 *                                              {
 *                                                      this.Log().Debug("Creating plugin '{0}.{1}'", candidate.Namespace, candidate.Name);
 *                                                      AbstractPlugin instance = (AbstractPlugin)Activator.CreateInstance(candidate);
 *                                                      m_pluginsAvailable[instance.UUID] = instance;
 *                                              }
 *                                              catch (Exception ex)
 *                                              {
 *                                                      this.Log().Error("Unable to create plugin with class '{0}' in extension '{1}' - {2}",
 *                                                              candidate.Name,
 *                                                              pluginDLL,
 *                                                              ex.ToString()
 *                                                              );
 *                                                      continue;
 *                                              }
 *                                      }
 *                              }
 *                      }
 *              }
 */

        static void Main(string[] args)
        {
            // Set up the logging for the platform
            Logger logger = new Logger();

            Locator.CurrentMutable.RegisterConstant(logger, typeof(ILogger));
            // Parse command line to get paths
            Options options = new Options();

            if (!Parser.Default.ParseArguments(args, options))
            {
                return;
            }
            // Make sure the storage directory exists
            if (!Directory.Exists(options.StorageDirectory))
            {
                LogHost.Default.Error("Error: The storage directory '{0}' does not exist.", options.StorageDirectory);
                return;
            }
            // Set up the IFolder implementation for the platform
            FileSystem fs = new FileSystem(options.StorageDirectory);

            Locator.CurrentMutable.RegisterConstant(fs, typeof(IFolder));
            // Set up the Master Object Table
            MasterObjectTable mot = new MasterObjectTable();

            Locator.CurrentMutable.RegisterConstant(mot, typeof(MasterObjectTable));
            // Set up the service manager (which doubles as the Server object)
            ServiceManager server = new ServiceManager();

            Locator.CurrentMutable.RegisterConstant(server, typeof(ServiceManager));
            // Add the message bus service
            MessageBus msgBus = new MessageBus();

            Locator.CurrentMutable.RegisterConstant(msgBus, typeof(IMessageBus));
            server.AddServer(msgBus);
            // Add the plugin manager service (this also provides scheduled execution)
            PluginManager plugins = new PluginManager();

            server.AddServer(plugins);
            // TODO: Add dynamic plugins
            // Add and configure the HTTP server
            SensHubHttpServer http = new SensHubHttpServer(new SocketServer(server.HttpPort), true, true);

            server.AddServer(http);
            // Initialise logging
            logger.Enable(server.LogLevel);
            // Run all the services
            server.Start();
            // TODO: Clean up
        }
예제 #4
0
 /*
 /// <summary>
 /// Populate the plugin list with all plugins found in the specified directory.
 ///
 /// This method does not initialise the plugins, it simply discovers them and
 /// adds them to master list.
 /// </summary>
 /// <param name="directory"></param>
 public void LoadPlugins(string directory)
 {
     this.Log().Debug("Scanning directory '{0}' for plugins.", directory);
     if (!Directory.Exists(directory))
     {
         this.Log().Warn("Plugin directory '{0}' does not exist.", directory);
         return;
     }
     MasterObjectTable mot = Locator.Current.GetService<MasterObjectTable>();
     String[] files = Directory.GetFiles(directory, "*.dll");
     foreach (string pluginDLL in files)
     {
         // Load the assembly
         Assembly asm = null;
         try
         {
             this.Log().Debug("Attempting to load '{0}'", pluginDLL);
             asm = Assembly.LoadFile(pluginDLL);
         }
         catch (Exception ex)
         {
             this.Log().Error("Failed to load assembly from file '{0}' - {1}", pluginDLL, ex.Message);
             continue;
         }
         // Get the plugins defined in the file (it can have more than one)
         Type[] types = null;
         try
         {
             types = asm.GetTypes();
         }
         catch (Exception ex)
         {
             // TODO: an exception here indicates a plugin built against a different version
             //       of the API. Should report it as such.
             this.Log().Error("Failed to load assembly from file '{0}' - {1}", pluginDLL, ex.Message);
             continue;
         }
         // Load metadata from the assembly
         mot.AddMetaData(asm);
         // Look for plugins
         foreach (var candidate in types)
         {
             if (typeof(AbstractPlugin).IsAssignableFrom(candidate))
             {
                 // Go ahead and try to load it
                 try
                 {
                     this.Log().Debug("Creating plugin '{0}.{1}'", candidate.Namespace, candidate.Name);
                     AbstractPlugin instance = (AbstractPlugin)Activator.CreateInstance(candidate);
                     m_pluginsAvailable[instance.UUID] = instance;
                 }
                 catch (Exception ex)
                 {
                     this.Log().Error("Unable to create plugin with class '{0}' in extension '{1}' - {2}",
                         candidate.Name,
                         pluginDLL,
                         ex.ToString()
                         );
                     continue;
                 }
             }
         }
     }
 }
 */
 static void Main(string[] args)
 {
     // Set up the logging for the platform
     Logger logger = new Logger();
     Locator.CurrentMutable.RegisterConstant(logger, typeof(ILogger));
     // Parse command line to get paths
     Options options = new Options();
     if (!Parser.Default.ParseArguments(args, options))
         return;
     // Make sure the storage directory exists
     if (!Directory.Exists(options.StorageDirectory))
     {
         LogHost.Default.Error("Error: The storage directory '{0}' does not exist.", options.StorageDirectory);
         return;
     }
     // Set up the IFolder implementation for the platform
     FileSystem fs = new FileSystem(options.StorageDirectory);
     Locator.CurrentMutable.RegisterConstant(fs, typeof(IFolder));
     // Set up the Master Object Table
     MasterObjectTable mot = new MasterObjectTable();
     Locator.CurrentMutable.RegisterConstant(mot, typeof(MasterObjectTable));
     // Set up the service manager (which doubles as the Server object)
     ServiceManager server = new ServiceManager();
     Locator.CurrentMutable.RegisterConstant(server, typeof(ServiceManager));
     // Add the message bus service
     MessageBus msgBus = new MessageBus();
     Locator.CurrentMutable.RegisterConstant(msgBus, typeof(IMessageBus));
     server.AddServer(msgBus);
     // Add the plugin manager service (this also provides scheduled execution)
     PluginManager plugins = new PluginManager();
     server.AddServer(plugins);
     // TODO: Add dynamic plugins
     // Add and configure the HTTP server
     SensHubHttpServer http = new SensHubHttpServer(new SocketServer(server.HttpPort), true, true);
     server.AddServer(http);
     // Initialise logging
     logger.Enable(server.LogLevel);
     // Run all the services
     server.Start();
     // TODO: Clean up
 }
예제 #5
0
 /// <summary>
 /// Constructor with a socket
 /// </summary>
 /// <param name="socket"></param>
 public RpcConnection(WebSocket socket)
 {
     m_socket = socket;
     m_authenticated = false;
     // Get references to the core components we need
     m_builder = new MessageBuilder();
     m_messagebus = Locator.Current.GetService<IMessageBus>();
     m_mot = Locator.Current.GetService<MasterObjectTable>();
     // Listen for incoming messages
     m_socket.DataReceived += OnDataReceived;
 }