예제 #1
0
        public CommandRouter(RequestHandlerDirectory requestHandlers)
        {
            if (requestHandlers == null)
            {
                throw new ArgumentNullException("requestHandlers");
            }

            if (requestHandlers.Count == 0)
            {
                throw new ArgumentException("No request handlers were found in the directory.", "requestHandlers");
            }

            foreach (RequestHandlerMapping mapping in requestHandlers)
            {
                var handlerInfo = new RequestHandlerInfo()
                {
                    RequestHandlerType = mapping.RequestHandlerType, ReentrantInstance = null
                };

                try
                {
                    _HandlerDirectory.Add(mapping.Command, handlerInfo);
                }
                catch (ArgumentException)
                {
                    throw new ArgumentException("The same command was mapped to more than one request handler.", "requestHandlers");
                }
            }
        }
예제 #2
0
        public RequestManager()
        {
            if (!HttpListener.IsSupported)
            {
                throw new InvalidOperationException("Windows XP SP2, Windows Server 2003, or later is required to run this service.");
            }

            var requestHandlers = new RequestHandlerDirectory();

            requestHandlers.AddHandler <ScheduleRequestHandler>("Schedule");
            requestHandlers.AddHandler <CancelRequestHandler>("Cancel");
            requestHandlers.AddHandler <StatusRequestHandler>("Status");

            _Router          = new CommandRouter(requestHandlers);
            _ListeningThread = new Thread(new ThreadStart(Listen));
        }