/// <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; }
/// <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); }
/* * /// <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 }
/* /// <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 }
/// <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; }