public override void Load(Stream stream) { TestForEditable(); byte version = stream.ReadNextByte(); switch (version) { case 1: int cnt = stream.ReadInt32(); m_databases.Clear(); while (cnt > 0) { cnt--; var database = new ServerDatabaseSettings(); database.Load(stream); m_databases.Add(database); } cnt = stream.ReadInt32(); m_listeners.Clear(); while (cnt > 0) { cnt--; var listener = new SnapSocketListenerSettings(); listener.Load(stream); m_listeners.Add(listener); } break; default: throw new VersionNotFoundException("Unknown Version Code: " + version); } }
/// <summary> /// Creates a <see cref="SnapSocketListener"/> /// </summary> /// <param name="settings"></param> /// <param name="server"></param> /// <param name="parent"></param> public SnapSocketListener(SnapSocketListenerSettings settings, SnapServer server) : base(MessageClass.Framework) { if ((object)server == null) throw new ArgumentNullException("server"); if ((object)settings == null) throw new ArgumentNullException("settings"); m_server = server; m_settings = settings.CloneReadonly(); m_settings.Validate(); m_authenticator = new SecureStreamServer<SocketUserPermissions>(); if (settings.DefaultUserCanRead || settings.DefaultUserCanWrite || settings.DefaultUserIsAdmin) { m_authenticator.SetDefaultUser(true, new SocketUserPermissions() { CanRead = settings.DefaultUserCanRead, CanWrite = settings.DefaultUserCanWrite, IsAdmin = settings.DefaultUserIsAdmin }); } foreach (var user in settings.Users) { m_authenticator.AddUserIntegratedSecurity(user, new SocketUserPermissions() { CanRead = true, CanWrite = true, IsAdmin = true }); } // TODO: Shouldn't we use GSF.Communications async library here for scalability? If not, why not? // TODO: I think async communication classes could pass NetworkBinaryStream to a handler like ProcessClient... // TODO: Communications library may need a simple modification... Check with S. Wills for thoughts here... m_isRunning = true; m_listener = new TcpListener(m_settings.LocalEndPoint); //m_listener.Server.DualMode = true; m_listener.Start(); //var socket = m_listener.AcceptSocketAsync(); //socket.ContinueWith(ProcessDataRequests); //socket.Start(); Log.Publish(MessageLevel.Info, "Constructor Called", "Listening on " + m_settings.LocalEndPoint.ToString()); Thread th = new Thread(ProcessDataRequests); th.IsBackground = true; th.Start(); }
/// <summary> /// Creates a new <see cref="HistorianServer"/> instance. /// </summary> public HistorianServer(int? port) { var server = new ServerSettings(); if (port.HasValue) { var settings = new SnapSocketListenerSettings() { LocalTcpPort = port.Value }; settings.DefaultUserCanRead = true; settings.DefaultUserCanWrite = true; settings.DefaultUserIsAdmin = true; server.Listeners.Add(settings); } // Maintain a member level list of all established archive database engines m_host = new SnapServer(server); }
/// <summary> /// Adds the socket interface to the database /// </summary> /// <param name="socketSettings">the config data for the socket listener</param> public void AddSocketListener(SnapSocketListenerSettings socketSettings) { if ((object)socketSettings == null) { throw new ArgumentNullException("socketSettings"); } using (Logger.AppendStackMessages(Log.InitialStackMessages)) { SnapSocketListener listener = new SnapSocketListener(socketSettings, this); lock (m_syncRoot) { m_sockets.Add(socketSettings.LocalEndPoint, listener); } } }
/// <summary> /// Creates a new <see cref="HistorianServer"/> instance. /// </summary> public HistorianServer(int?port) { var server = new ServerSettings(); if (port.HasValue) { var settings = new SnapSocketListenerSettings() { LocalTcpPort = port.Value }; settings.DefaultUserCanRead = true; settings.DefaultUserCanWrite = true; settings.DefaultUserIsAdmin = true; server.Listeners.Add(settings); } // Maintain a member level list of all established archive database engines m_host = new SnapServer(server); }
/// <summary> /// Creates a new <see cref="HistorianServer"/> instance. /// </summary> public HistorianServer(int?port, string networkInterfaceIP = null) { ServerSettings server = new ServerSettings(); if (port.HasValue || !string.IsNullOrWhiteSpace(networkInterfaceIP)) { SnapSocketListenerSettings settings = new SnapSocketListenerSettings { LocalTcpPort = port ?? SnapSocketListenerSettings.DefaultNetworkPort, LocalIpAddress = networkInterfaceIP, DefaultUserCanRead = true, DefaultUserCanWrite = true, DefaultUserIsAdmin = true }; server.Listeners.Add(settings); } // Maintain a member level list of all established archive database engines Host = new SnapServer(server); }
/// <summary> /// Adds the socket interface to the database /// </summary> /// <param name="socketSettings">the config data for the socket listener</param> public void AddSocketListener(SnapSocketListenerSettings socketSettings) { if ((object)socketSettings == null) throw new ArgumentNullException("socketSettings"); using (Logger.AppendStackMessages(Log.InitialStackMessages)) { SnapSocketListener listener = new SnapSocketListener(socketSettings, this); lock (m_syncRoot) { m_sockets.Add(socketSettings.LocalEndPoint, listener); } } }