public void Start() { lock (ListenerLock) { if (_listener == null) { _stop.Reset(); _listener = new TcpListener(IPAddress.Any, _port); _listener.Server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); _messages = new BlockingCollection <RtspMessage>(); _listener.Start(); _dispatcher.Init(); LOG.Info($"Started RTSP server on '{_port}'"); ThreadPool.QueueUserWorkItem(Accept); ThreadPool.QueueUserWorkItem(ProcessMessages); } } }
/// <summary> /// Initializes a new instance of a Server composed of the specified IReceiverManager to receive client connections, /// IMessageFactory to wrap requests in the Smoke message protocol and IRequestDispatcher to handle incoming messages /// </summary> /// <param name="receiverManager">Manages client connections</param> /// <param name="messageFactory">Wraps requests in the Smoke message protocol</param> /// <param name="requestDispatcher">Handles incoming messages</param> public Server(IReceiverManager receiverManager, IMessageFactory messageFactory, IRequestDispatcher requestDispatcher, String name) { if (messageFactory == null) throw new ArgumentNullException("IMessageFactory"); if (receiverManager == null) throw new ArgumentNullException("IReceiverManager"); if (requestDispatcher == null) throw new ArgumentNullException("IRequestHandlerFactory"); if (name == null || name == default(String) || name.Length == 0) throw new ArgumentNullException("Name"); this.messageFactory = messageFactory; this.receiverManager = receiverManager; this.requestDispatcher = requestDispatcher; this.serverInfo.Name = name; // Initialize dependencies requestDispatcher.Init(this); }