Пример #1
0
        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);
 }
Пример #4
0
        /// <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);
                }
            }
        }
Пример #5
0
        /// <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);
        }
Пример #6
0
        /// <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);
                }
            }

        }