예제 #1
0
        //public event EventHandler<ClientRequestEventArgs> ClientRequestReceived;
        /// <summary>
        /// Initializes a new instance of the <see cref="SocketManager"/> class.
        /// </summary>
        public SocketManager(SocketServerConfiguration config)
        {
            LoadHandlers(config);

            // TODO: Move filename into configuration
            _socketServer = new SocketServer(new MessageRegistry("messages.desc"));

            _socketServer.ClientConnected += SocketServerClientConnecting;
            _socketServer.ClientDisconnected += SocketServerClientDisconnecting;
            _socketServer.MessageReceived += new EventHandler<MessageEventArgs>(socketServer_MessageReceived);
        }
        /// <summary>
        /// Gets the handler list by type.
        /// </summary>
        /// <returns></returns>
        //public List<IServiceHandler> GetHandlerListByType(Type type)
        //{
        //    List<IServiceHandler> serviceHandlers = HandlerList
        //        .Where(h => h.Metadata.HandlerType == type)
        //        .Select(lz => lz.Value)
        //        .ToList();
        //    return serviceHandlers;
        //}
        /// <summary>
        /// Loads the handlers.
        /// </summary>
        //public void LoadHandlers()
        //{
        ////try
        ////{
        ////    (SocketServiceConfiguration) ConfigurationManager.GetSection("SocketServerConfiguration");
        ////}
        ////catch (Exception)
        ////{
        ////}
        //var aggregateCatalog = new AggregateCatalog();
        //var callingAssembly = Assembly.GetExecutingAssembly();
        //// an assembly catalog to load information about parts from this assembly
        //var assemblyCatalog = new AssemblyCatalog(callingAssembly);
        //var assemblyLocation = Path.GetDirectoryName(callingAssembly.Location);
        //if (assemblyLocation != null)
        //{
        //    var directoryCatalog = new DirectoryCatalog(assemblyLocation, "*.dll");
        //    aggregateCatalog.Catalogs.Add(assemblyCatalog);
        //    aggregateCatalog.Catalogs.Add(directoryCatalog);
        //}
        //// create a container for our catalogs
        //var container = new CompositionContainer(aggregateCatalog);
        //// finally, compose the parts
        //container.ComposeParts(this);
        //}
        private void LoadHandlers(SocketServerConfiguration config)
        {
            foreach (RequestHandlerConfigurationElement element in config.Handlers)
            {
                string key = element.Key;

                Type requestType = ReflectionHelper.FindType(element.RequestType);
                Type handlerType = ReflectionHelper.FindType(element.HandlerType);

                if (handlerType != null && requestType != null)
                {
                    // create an instance of the handler
                    object handler = ReflectionHelper.ActivateObject(handlerType, null);
                    if (handler != null)
                    {
                        Type interfaceType = ReflectionHelper.FindGenericInterfaceMethod(InterfaceName, new Type[] { requestType }, handlerType);
                        if (interfaceType != null)
                        {
                            // we are in business
                            try
                            {
                                MethodInfo mi = interfaceType.GetMethod(MethodName);
                                if (mi != null)
                                {
                                    ServiceHandler helper = new ServiceHandler(handler, mi);
                                    _handlerMap.Add(key, helper);
                                }
                            }
                            catch (Exception ex)
                            {
                                Logger.ErrorFormat("Error in HandleRequest\n. {0}", ex);
                            }
                        }

                        Logger.InfoFormat("Adding handler for request tag {0} - handler type ({1}), request type ({2})", element.Key, element.HandlerType, element.RequestType);
                    }
                }
            }
        }
예제 #3
0
 //private static void ParseRequest(Guid clientId, byte[] requestData)
 //{
 //    MSMQQueueWrapper.QueueCommand(new ParseRequestCommand(clientId, requestData));
 //}
 private void LoadHandlers(SocketServerConfiguration config)
 {
     foreach (RequestHandlerConfigurationElement element in config.Handlers)
     {
         // try to find enum type first
         requestHandlers.Add(element.Key, element);
     }
 }