Пример #1
0
        /// <summary>
        /// 初始化Socket Server
        /// </summary>
        /// <param name="config"></param>
        static public void Init(Config.SocketServerConfig config)
        {
            if (config == null)
            {
                throw new ArgumentNullException("config");
            }
            if (config.Servers == null)
            {
                return;
            }

            foreach (Config.Server serverConfig in config.Servers)
            {
                //inti protocol
                var objProtocol = GetProtocol(serverConfig.Protocol);
                if (objProtocol == null)
                {
                    throw new InvalidOperationException("protocol");
                }

                //init custom service
                var tService = Type.GetType(serverConfig.ServiceType, false);
                if (tService == null)
                {
                    throw new InvalidOperationException("serviceType");
                }

                var tAbsService = tService;
                while (true)
                {
                    tAbsService = tAbsService.BaseType;
                    if (tAbsService.Name == typeof(AbsSocketService <>).Name)
                    {
                        break;
                    }
                }

                var objService = Activator.CreateInstance(tService);
                if (objService == null)
                {
                    throw new InvalidOperationException("serviceType");
                }

                //init host.
                var host = Activator.CreateInstance(typeof(SocketServer <>).MakeGenericType(
                                                        tAbsService.GetGenericArguments()),
                                                    objService,
                                                    objProtocol,
                                                    serverConfig.SocketBufferSize,
                                                    serverConfig.MessageBufferSize,
                                                    serverConfig.MaxMessageSize,
                                                    serverConfig.MaxConnections) as AbsSocketServer;

                host.AddListener(serverConfig.Name, new IPEndPoint(IPAddress.Any, serverConfig.Port));

                _listHosts.Add(host);
                _dicHosts[serverConfig.Name] = host;
            }
        }
Пример #2
0
        /// <summary>
        /// 初始化Socket Server
        /// </summary>
        /// <param name="config"></param>
        static public void Init(Config.SocketServerConfig config)
        {
            if (config == null)
            {
                throw new ArgumentNullException("config");
            }
            if (config.Servers == null)
            {
                return;
            }

            foreach (Config.Server serverConfig in config.Servers)
            {
                //inti protocolHandlerFactory
                var objProtocolHandlerFactory = GetProtocolHandlerFactory(serverConfig.ProtocolHandlerFactory);
                if (objProtocolHandlerFactory == null)
                {
                    throw new InvalidOperationException("protocolHandlerFactory");
                }

                //init custom service
                var tService = Type.GetType(serverConfig.ServiceType, false);
                if (tService == null)
                {
                    throw new InvalidOperationException("serviceType");
                }

                var objService = Activator.CreateInstance(tService);
                if (objService == null)
                {
                    throw new InvalidOperationException("serviceType");
                }

                var messageTypes     = objProtocolHandlerFactory.GetType().GetInterface(typeof(IProtocolHandlerFactory <, ,>).Name).GetGenericArguments();
                var socketServerType = typeof(SocketServer <,>).MakeGenericType(messageTypes[1], messageTypes[2]);

                //init host.
                _connectionManagerCollection.Add(serverConfig.Name, Activator.CreateInstance(
                                                     socketServerType,
                                                     serverConfig.Port,
                                                     objService,
                                                     objProtocolHandlerFactory,
                                                     serverConfig.SocketBufferSize,
                                                     serverConfig.MessageBufferSize,
                                                     serverConfig.MaxMessageSize,
                                                     serverConfig.MaxConnections) as SocketBase.IConnectionManager);
            }
        }
Пример #3
0
        /// <summary>
        /// 初始化Socket Server
        /// </summary>
        /// <param name="config"></param>
        static public void Init(Config.SocketServerConfig config)
        {
            if (config == null)
            {
                throw new ArgumentNullException("config");
            }
            if (config.Servers == null)
            {
                return;
            }

            foreach (Config.Server serverConfig in config.Servers)
            {
                //inti protocol
                var objProtocol = GetProtocol(serverConfig.Protocol);
                if (objProtocol == null)
                {
                    throw new InvalidOperationException("protocol");
                }

                //init custom service
                var tService = Type.GetType(serverConfig.ServiceType, false);
                if (tService == null)
                {
                    throw new InvalidOperationException("serviceType");
                }

                var objService = Activator.CreateInstance(tService);
                if (objService == null)
                {
                    throw new InvalidOperationException("serviceType");
                }

                //init host.
                _dicHosts.Add(serverConfig.Name, Activator.CreateInstance(
                                  typeof(SocketServer <>).MakeGenericType(
                                      objProtocol.GetType().GetInterface(typeof(Protocol.IProtocol <>).Name).GetGenericArguments()),
                                  serverConfig.Port,
                                  objService,
                                  objProtocol,
                                  serverConfig.SocketBufferSize,
                                  serverConfig.MessageBufferSize,
                                  serverConfig.MaxMessageSize,
                                  serverConfig.MaxConnections) as SocketBase.IHost);
            }
        }