예제 #1
0
파일: HttpService.cs 프로젝트: large/MOTRd
 public HttpTextService(Stream stream, string text, IWebSocketLogger logger, bool bRemoveCookie = false)
 {
     _stream        = stream;
     _logger        = logger;
     sHtmlText      = text;
     bDeleteSession = bRemoveCookie;
 }
 public ChatWebSocketService(Stream stream, TcpClient tcpClient, string header, IWebSocketLogger logger, WebServer server, String Identification_Alias, BusinessObject My_CommObject) : base(stream, tcpClient, header, true, logger)
 {
     _logger = logger;
     _server = server;
     _Identification_Alias = Identification_Alias;
     _My_CommObject        = My_CommObject;
 }
예제 #3
0
        private static void Main(string[] args)
        {
            _logger = new WebSocketLogger();

            try
            {
                int    port    = 2120;
                string webRoot = Settings.Default.WebRoot;
                if (!Directory.Exists(webRoot))
                {
                    string baseFolder = AppDomain.CurrentDomain.BaseDirectory;
                    _logger.Warning(typeof(Program), "Webroot folder {0} not found. Using application base directory: {1}", webRoot, baseFolder);
                    webRoot = baseFolder;
                }

                // used to decide what to do with incoming connections
                ServiceFactory serviceFactory = new ServiceFactory(webRoot, _logger);

                using (WebServer server = new WebServer(serviceFactory, _logger))
                {
                    server.Listen(port);

                    //Thread clientThread = new Thread(new ParameterizedThreadStart(TestClient));
                    //clientThread.IsBackground = true;

                    //clientThread.Start("ws://localhost:2120/chat");
                    Console.ReadKey();
                }
            }
            catch (Exception ex)
            {
                _logger.Error(typeof(Program), ex);
                Console.ReadKey();
            }
        }
 public WebSocketClient(bool noDelay, IWebSocketLogger logger)
     : base(logger)
 {
     _noDelay            = noDelay;
     _logger             = logger;
     _conectionCloseWait = new ManualResetEvent(false);
 }
예제 #5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="WebSocketServiceHost"/> class
        /// with the specified <paramref name="path"/> and <paramref name="log"/>.
        /// </summary>
        /// <param name="path">
        /// A <see cref="string"/> that represents the absolute path to the service.
        /// </param>
        /// <param name="log">
        /// A <see cref="Logger"/> that represents the logging function for the service.
        /// </param>
        protected WebSocketServiceHost(string path, IWebSocketLogger log)
        {
            _path = path;
            _log  = log;

            _sessions = new WebSocketSessionManager(log);
        }
예제 #6
0
파일: HttpService.cs 프로젝트: large/MOTRd
 public HttpRedirectService(Stream stream, string sUrl, string sReturnUrl, string sSetCookie, IWebSocketLogger logger)
 {
     _stream     = stream;
     _logger     = logger;
     sRedirectTo = sUrl;
     sReturnTo   = sReturnUrl;
     sCookie     = sSetCookie;
 }
예제 #7
0
 public HttpService(Stream stream, string path, string webRoot, IWebSocketLogger logger)
 {
     _stream    = stream;
     _path      = path;
     _webRoot   = webRoot;
     _logger    = logger;
     _mimeTypes = MimeTypesFactory.GetMimeTypes(webRoot);
 }
예제 #8
0
 public MOTR_AdminWebsocket(Stream stream, TcpClient tcpClient, string header, IWebSocketLogger logger, MOTR_Sessions _sessions, MOTR_Dirs _dirs, MOTR_Users _users, MOTR_Admin _admin)
     : base(stream, tcpClient, header, true, logger)
 {
     _logger    = logger;
     m_Sessions = _sessions;
     m_Dirs     = _dirs;
     m_Users    = _users;
     m_Admin    = _admin;
 }
예제 #9
0
        public WebSocketClient(bool noDelay, IWebSocketLogger logger)
            : base(logger)
        {
            _noDelay      = noDelay;
            _logger       = logger;
            _globalLogger = logger; // not such a big deal updating this because reference assignments are thread safe

            _conectionCloseWait = new ManualResetEvent(false);
        }
예제 #10
0
파일: HttpService.cs 프로젝트: large/MOTRd
        private const int BufferSize = 5 * 1024 * 1024; //5MB buffer

        public HttpBinaryService(Stream stream, string _sFilePath, string sRoot, string sHeader, IWebSocketLogger logger, bool bIsHead = false)
        {
            _stream       = stream;
            _logger       = logger;
            sFilePath     = _sFilePath;
            sWebroot      = sRoot;
            _mimeTypes    = MimeTypesFactory.GetMimeTypes(sWebroot);
            bSendHeadOnly = bIsHead;
            sHTTPHeader   = sHeader;
        }
예제 #11
0
 internal WebSocketServiceHost(
     string path,
     Func <TBehavior> creator,
     Action <TBehavior> initializer,
     IWebSocketLogger log
     )
     : base(path, log)
 {
     _creator = createCreator(creator, initializer);
 }
예제 #12
0
        internal WebSocketServiceManager(IWebSocketLogger log)
        {
            _log = log;

            _clean    = true;
            _hosts    = new Dictionary <string, WebSocketServiceHost> ();
            _state    = ServerState.Ready;
            _sync     = ((ICollection)_hosts).SyncRoot;
            _waitTime = TimeSpan.FromSeconds(1);
        }
예제 #13
0
        public WebSocketService(Stream stream, TcpClient tcpClient, string header, bool noDelay, IWebSocketLogger logger)
            : base(logger) {
            _stream = stream;
            _header = header;
            _logger = logger;
            _tcpClient = tcpClient;

            // send requests immediately if true (needed for small low latency packets but not a long stream). 
            // Basically, dont wait for the buffer to be full before before sending the packet
            tcpClient.NoDelay = noDelay;
        }
예제 #14
0
 //Stored when created classed
 public MOTR_Webserver(IWebSocketLogger logger, MOTR_Sessions sessions, MOTR_Users users, MOTR_Dirs dirs, MOTR_Queue queue, MOTR_Admin admin, MOTR_Downloads downloads)
 {
     _logger     = logger;
     _sessions   = sessions;
     _users      = users;
     _dirs       = dirs;
     _queue      = queue;
     _admin      = admin;
     _downloads  = downloads;
     pMe         = this; //Stored for the static calls
     aWebservers = new List <MOTR_WebserverObject>();
 }
예제 #15
0
 public ServiceFactory(string webRoot, IWebSocketLogger logger)
 {
     _logger  = logger;
     _webRoot = string.IsNullOrWhiteSpace(webRoot) ? GetWebRoot() : webRoot;
     if (!Directory.Exists(_webRoot))
     {
         _logger.Warning(this.GetType(), "Web root not found: {0}", _webRoot);
     }
     else
     {
         _logger.Information(this.GetType(), "Web root: {0}", _webRoot);
     }
 }
예제 #16
0
        public MOTR_Moviescraper(IWebSocketLogger logger)
        {
            //Set the settings for the scrapper
            MOTRScrapperSettings        = new MOTRMovieDbSettings();
            MOTRScrapperSettings.ApiKey = "73706c8ed57633aeb73e866cd896ff9c";
            MOTRScrapperSettings.ApiUrl = "http://api.themoviedb.org/3/";

            // registration with an implementation of IMovieDbSettings
            MovieDbFactory.RegisterSettings(MOTRScrapperSettings);

            //Store logger at startup
            _logger          = logger;
            movieInformation = null;
        }
예제 #17
0
        public MOTR_WebserverFactoryInitalWizard(string webRoot, MOTR_Users users, MOTR_Admin _admin, IWebSocketLogger logger)
        {
            _logger  = logger;
            _webRoot = string.IsNullOrWhiteSpace(webRoot) ? GetWebRoot() : webRoot;
            m_Users  = users;
            m_Admin  = _admin;

            if (!Directory.Exists(_webRoot))
            {
                _logger.Warning(this.GetType(), "InitalWizard: Web root not found: {0}", _webRoot);
            }
            else
            {
                _logger.Information(this.GetType(), "InitalWizard: Web root: {0}", _webRoot);
            }
        }
예제 #18
0
 public ServiceFactory(string webRoot, IWebSocketLogger logger, String Identification_Alias, WebServer server, BusinessObject My_CommObject)
 {
     _Identification_Alias = Identification_Alias;
     _logger        = logger;
     _webRoot       = string.IsNullOrWhiteSpace(webRoot) ? GetWebRoot() : webRoot;
     _server        = server;
     _My_CommObject = My_CommObject;
     if (!Directory.Exists(_webRoot))
     {
         _logger.Warning("", this.GetType(), "Web root not found: {0}", _webRoot);
     }
     else
     {
         _logger.Information("", this.GetType(), "Web root: {0}", _webRoot);
     }
 }
예제 #19
0
        public HttpPostService(Stream stream, TcpClient tcpClient, string header, IWebSocketLogger logger, WebServer server, String Identification_Alias, BusinessObject My_CommObject) : base(stream, tcpClient, header, true, logger)
        {
            _logger = logger;
            _server = server;
            _stream = stream;
            _Identification_Alias = Identification_Alias;
            _header = header;
            //Response to Client
            RespondSuccess("text/html");

            _My_CommObject = My_CommObject;
            string sValue      = "";
            string sDeviceType = "";

            string[] tokens = _header.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

            if (tokens.Length > 3)//标示有标识内容类型
            {
                foreach (string sTemp in tokens)
                {
                    if ((sTemp.ToUpper().Contains("application/json".ToUpper())) && (sTemp.ToUpper().Contains("Content-Type:".ToUpper())))//Jason format
                    {
                        sValue = tokens[tokens.Length - 1];
                        if (base.IsValidJson(sValue))
                        {
                            JToken  Content = null;
                            JObject JSearch = JObject.Parse(sValue);
                            if (JSearch.TryGetValue("reader_name", out Content))//Zebra FX Reader
                            {
                                sDeviceType = "ZebraFXReader";
                            }
                        }
                    }

                    if ((sTemp.ToUpper().Contains("multipart/form-data;".ToUpper())) && (sTemp.ToUpper().Contains("Content-Type:".ToUpper())))//Jason format
                    {
                        sDeviceType = "ZebraPrinter_HttpPost";
                        sValue      = tokens[tokens.Length - 1];
                    }
                }
                _logger.Information("", this.GetType(), "Got HttpPost request:" + Environment.NewLine + _header);
            }
            else
            {
                _logger.Information("", this.GetType(), "Invalid http request");
            }
        }
예제 #20
0
        private static void Main(string[] args)
        {
            _logger = new WebSocketLogger();

            try
            {
                int    port    = Settings.Default.Port;
                string webRoot = Settings.Default.WebRoot;
                if (!Directory.Exists(webRoot))
                {
                    string baseFolder = AppDomain.CurrentDomain.BaseDirectory;
                    _logger.Warning(typeof(Program), "Webroot folder {0} not found. Using application base directory: {1}", webRoot, baseFolder);
                    webRoot = baseFolder;
                }

                // used to decide what to do with incoming connections
                ServiceFactory serviceFactory = new ServiceFactory(webRoot, _logger);

                using (WebServer server = new WebServer(serviceFactory, _logger))
                {
                    if (port == 443)
                    {
                        X509Certificate2 cert = GetCertificate();
                        server.Listen(port, cert);
                    }
                    else
                    {
                        server.Listen(port);
                    }

                    Thread clientThread = new Thread(new ParameterizedThreadStart(TestClient));
                    clientThread.IsBackground = false;

                    // to enable ssl change the port to 443 in the settings file and use the wss schema below
                    // clientThread.Start("wss://localhost/chat");

                    clientThread.Start("ws://localhost/chat");
                    Console.ReadKey();
                }
            }
            catch (Exception ex)
            {
                _logger.Error(typeof(Program), ex);
                Console.ReadKey();
            }
        }
예제 #21
0
        internal TcpListenerWebSocketContext(
            TcpClient tcpClient,
            string protocol,
            bool secure,
            ServerSslConfiguration sslConfig,
            IWebSocketLogger log
            )
        {
            _tcpClient = tcpClient;
            _secure    = secure;
            _log       = log;

            var netStream = tcpClient.GetStream();

            if (secure)
            {
                var sslStream = new SslStream(
                    netStream,
                    false,
                    sslConfig.ClientCertificateValidationCallback
                    );

                sslStream.AuthenticateAsServer(
                    sslConfig.ServerCertificate,
                    sslConfig.ClientCertificateRequired,
                    sslConfig.EnabledSslProtocols,
                    sslConfig.CheckCertificateRevocation
                    );

                _stream = sslStream;
            }
            else
            {
                _stream = netStream;
            }

            var sock = tcpClient.Client;

            _serverEndPoint = sock.LocalEndPoint;
            _userEndPoint   = sock.RemoteEndPoint;

            _request   = HttpRequest.Read(_stream, 90000);
            _websocket = new WebSocket(this, protocol);
        }
예제 #22
0
        public MOTR_WebserverFactory(string webRoot, MOTR_Sessions sessions, MOTR_Users users, MOTR_Dirs dirs, MOTR_Queue queue, MOTR_Admin _admin, MOTR_Downloads _downloads, IWebSocketLogger logger, MOTR_Webserver _webserver)
        {
            _logger     = logger;
            _webRoot    = string.IsNullOrWhiteSpace(webRoot) ? GetWebRoot() : webRoot;
            m_Sessions  = sessions;
            m_Users     = users;
            m_Dirs      = dirs;
            m_Queue     = queue;
            m_WebServer = _webserver;
            m_Admin     = _admin;
            m_Downloads = _downloads;

            if (!Directory.Exists(_webRoot))
            {
                _logger.Warning(this.GetType(), "Web root not found: {0}", _webRoot);
            }
            else
            {
                _logger.Debug(this.GetType(), "Web root: " + _webRoot);
            }
        }
예제 #23
0
 public BadRequestService(Stream stream, string header, IWebSocketLogger logger)
 {
     _stream = stream;
     _header = header;
     _logger = logger;
 }
예제 #24
0
파일: HttpService.cs 프로젝트: large/MOTRd
 public HttpPostService(Stream stream, int nError, IWebSocketLogger logger)
 {
     _stream    = stream;
     _logger    = logger;
     nErrorCode = nError;
 }
예제 #25
0
 public ChatWebSocketService(Stream stream, TcpClient tcpClient, string header, IWebSocketLogger logger)
     : base(stream, tcpClient, header, true, logger)
 {
     _logger = logger;
 }
예제 #26
0
 public ChatWebSocketClient(bool noDelay, IWebSocketLogger logger) : base(noDelay, logger)
 {
 }
예제 #27
0
 public WebServer(IServiceFactory serviceFactory, IWebSocketLogger logger)
 {
     _serviceFactory  = serviceFactory;
     _logger          = logger;
     _openConnections = new List <IDisposable>();
 }
예제 #28
0
 public WebSocketBase(IWebSocketLogger logger)
 {
     _logger     = logger;
     _sendLocker = new object();
     _isOpen     = false;
 }
예제 #29
0
 public static void initLogger(ListBox debugList, ListBox chatlist)
 {
     _logger = new WebSocketLogger(debugList, chatlist);
 }
예제 #30
0
 public SockHandler(Stream stream, TcpClient tcpClient, string header, IWebSocketLogger logger, MethodMan methodMan)
     : base(stream, tcpClient, header, true, logger)
 {
     _logger        = (WebLogger)logger;
     this.methodMan = methodMan;
 }