示例#1
0
        /// <summary>
        ///     Initializes a new instance of the <see cref="StumpsHost"/> class.
        /// </summary>
        /// <param name="serverFactory">The factory used to initialize new server instances.</param>
        /// <param name="dataAccess">The data access provider used by the instance.</param>
        /// <exception cref="ArgumentNullException">
        /// <paramref name="serverFactory"/> is <c>null</c>.
        /// or
        /// <paramref name="dataAccess"/> is <c>null</c>.
        /// </exception>
        public StumpsHost(IServerFactory serverFactory, IDataAccess dataAccess)
        {
            _serverFactory = serverFactory ?? throw new ArgumentNullException(nameof(serverFactory));;
            _dataAccess    = dataAccess ?? throw new ArgumentNullException(nameof(dataAccess));

            _serverInstances = new ConcurrentDictionary <string, StumpsServerInstance>(StringComparer.OrdinalIgnoreCase);
        }
示例#2
0
        /// <summary>
        /// Creates what might be considered a good "default" server factory, if possible,
        /// or <c>null</c> if no good default was possible. A <c>null</c> value could be returned,
        /// for example, if a user opted to remove all implementations of <see cref="IServer"/> and
        /// the associated <see cref="IServerFactory"/> for security reasons.
        /// </summary>
        public static IServerFactory CreateDefaultServerFactoryOrNull(IExceptionContext ectx)
        {
            Contracts.CheckValue(ectx, nameof(ectx));
            // REVIEW: There should be a better way. There currently isn't,
            // but there should be. This is pretty horrifying, but it is preferable to
            // the alternative of having core components depend on an actual server
            // implementation, since we want those to be removable because of security
            // concerns in certain environments (since not everyone will be wild about
            // web servers popping up everywhere).
            var cat = ModuleCatalog.CreateInstance(ectx);

            ModuleCatalog.ComponentInfo component;
            if (!cat.TryFindComponent(typeof(IServerFactory), "mini", out component))
            {
                return(null);
            }
            IServerFactory factory = (IServerFactory)Activator.CreateInstance(component.ArgumentType);
            var            field   = factory.GetType().GetField("Port");

            if (field?.FieldType != typeof(int))
            {
                return(null);
            }
            field.SetValue(factory, 12345);
            return(factory);
        }
示例#3
0
        /// <summary>
        ///     Initializes a new instance of the <see cref="T:Stumps.Server.StumpsServerInstance"/> class.
        /// </summary>
        /// <param name="serverFactory">The factory used to initialize new server instances.</param>
        /// <param name="serverId">The unique identifier of the Stumps server.</param>
        /// <param name="dataAccess">The data access provider used by the instance.</param>
        public StumpsServerInstance(IServerFactory serverFactory, string serverId, IDataAccess dataAccess)
        {
            if (serverFactory == null)
            {
                throw new ArgumentNullException("serverFactory");
            }

            _serverFactory = serverFactory;

            this.ServerId = serverId;

            _lock = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion);
            _dataAccess = dataAccess;

            // Setup the objects needed to keep track of Stumps.
            _stumpList = new List<StumpContract>();
            _stumpReference = new Dictionary<string, StumpContract>(StringComparer.OrdinalIgnoreCase);

            // Setup the recordings maintained by the server instance.
            this.Recordings = new Recordings();

            // Initialize the server
            InitializeServer();

            // Initialize the Stumps
            InitializeStumps();
        }
示例#4
0
 public DaClient(IServerFactory factory)
 {
     _logger.Trace($".ctor( {factory} )");
     if (factory == null)
     {
         throw new ArgumentNullException(nameof(factory));
     }
     _factory = factory;
 }
        public IWebApplicationBuilder UseServer(IServerFactory factory)
        {
            if (factory == null)
            {
                throw new ArgumentNullException(nameof(factory));
            }

            _serverFactory = factory;
            return this;
        }
示例#6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ServerHost"/> class
        /// with the provided end-point, server factory and logger.
        /// </summary>
        /// <param name="endPoint">Listener end-point</param>
        /// <param name="keepAliveInterval">Interval in seconds to send TCP keepalive packets</param>
        /// <param name="serverFactory">Server factory</param>
        /// <param name="logger">Current logger instance</param>
        public ServerHost(IPEndPoint endPoint, int keepAliveInterval, IServerFactory serverFactory, ILogger logger)
        {
            if (endPoint == null)
            {
                throw new ArgumentNullException(nameof(endPoint));
            }

            if (serverFactory == null)
            {
                throw new ArgumentNullException(nameof(serverFactory));
            }

            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }

            this.serverFactory = serverFactory;
            this.logger        = logger;

            if (keepAliveInterval > 0)
            {
                // Convert to milliseconds
                keepAliveInterval *= 1000;

                keepAliveSettings =
                    new byte[]
                {
                    // onoff
                    1, 0, 0, 0,
                    // keepalivetime
                    (byte)(keepAliveInterval & 255),
                    (byte)(keepAliveInterval >> 8 & 255),
                    (byte)(keepAliveInterval >> 16 & 255),
                    (byte)(keepAliveInterval >> 24 & 255),
                    // keepaliveinterval
                    (byte)(keepAliveInterval & 255),
                    (byte)(keepAliveInterval >> 8 & 255),
                    (byte)(keepAliveInterval >> 16 & 255),
                    (byte)(keepAliveInterval >> 24 & 255)
                };
            }

            socket = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

            socket.Bind(endPoint);
            socket.Listen(ConnectionQueue);

            logger.WriteInfo(TraceResources.ServerStarted);

            socket.BeginAccept(EndAccept, socket);
        }
示例#7
0
        public static IServer CreateGate(this IServerFactory factory, AppFunc app, IScheduler scheduler, IDictionary <string, object> context)
        {
            if (context == null)
            {
                context = new Dictionary <string, object>();
            }

            if (!context.ContainsKey("kayak.Scheduler"))
            {
                context["kayak.Scheduler"] = scheduler;
            }

            return(factory.CreateHttp(new GateRequestDelegate(app, context), scheduler));
        }
示例#8
0
        public ServerClientManager(
            IServerFactory serverFactory,
            TychaiaServer server,
            TychaiaServerWorld world,
            int uniqueID,
            string initialPlayerName,
            MxClient client)
        {
            this.m_Server = server;
            this.m_World = world;

            this.UniqueID = uniqueID;
            this.PlayerName = initialPlayerName;
            this.MxClient = client;
            this.Entities = new List<IServerEntity>();
            this.ClientChunkStateManager = serverFactory.CreateClientChunkStateManager(client);
        }
示例#9
0
        /// <summary>
        ///     Initializes a new instance of the <see cref="T:Stumps.Server.StumpsHost"/> class.
        /// </summary>
        /// <param name="serverFactory">The factory used to initialize new server instances.</param>
        /// <param name="dataAccess">The data access provider used by the instance.</param>
        /// <exception cref="System.ArgumentNullException">
        /// <paramref name="serverFactory"/> is <c>null</c>.
        /// or
        /// <paramref name="dataAccess"/> is <c>null</c>.
        /// </exception>
        public StumpsHost(IServerFactory serverFactory, IDataAccess dataAccess)
        {
            if (serverFactory == null)
            {
                throw new ArgumentNullException("serverFactory");
            }

            if (dataAccess == null)
            {
                throw new ArgumentNullException("dataAccess");
            }

            _serverFactory = serverFactory;
            _dataAccess = dataAccess;

            _serverInstances = new ConcurrentDictionary<string, StumpsServerInstance>(StringComparer.OrdinalIgnoreCase);
        }
        public TcpSocketChannelAndReactorCompatSpecs()
        {
            _clientGroup     = new MultithreadEventLoopGroup(1);
            _serverBootstrap = new ServerBootstrap()
                               .SetTransport(TransportType.Tcp)
                               .SetDecoder(new LengthFieldFrameBasedDecoder(int.MaxValue, 0, 4, 0, 4))
                               .SetEncoder(new LengthFieldPrepender(4, false)).Build();

            _clientBootstrap = new ClientBootstrap()
                               .Channel <TcpSocketChannel>()
                               .Group(_clientGroup)
                               .Handler(new ActionChannelInitializer <TcpSocketChannel>(channel =>
            {
                channel.Pipeline.AddLast(new LengthFieldBasedFrameDecoder(int.MaxValue, 0, 4, 0, 4, true))
                .AddLast(new HeliosBackwardsCompatabilityLengthFramePrepender(4, false))
                .AddLast(new ReadRecorderHandler(_received, _resetEvent, ReadCount));
            }));
        }
        public TcpSocketChannelAndReactorCompatSpecs()
        {
            _clientGroup = new MultithreadEventLoopGroup(1);
            _serverBootstrap = new ServerBootstrap()
                .SetTransport(TransportType.Tcp)
                .SetDecoder(new LengthFieldFrameBasedDecoder(int.MaxValue, 0, 4, 0, 4))
                .SetEncoder(new LengthFieldPrepender(4, false)).Build();

            _clientBootstrap = new ClientBootstrap()
                .Channel<TcpSocketChannel>()
                .Group(_clientGroup)
                .Handler(new ActionChannelInitializer<TcpSocketChannel>(channel =>
                {
                    channel.Pipeline.AddLast(new LengthFieldBasedFrameDecoder(int.MaxValue, 0, 4, 0, 4, true))
                        .AddLast(new HeliosBackwardsCompatabilityLengthFramePrepender(4, false))
                        .AddLast(new ReadRecorderHandler(_received, _resetEvent, ReadCount));
                }));
        }
示例#12
0
        /// <summary>
        ///     Initializes a new instance of the <see cref="StumpsServerInstance"/> class.
        /// </summary>
        /// <param name="serverFactory">The factory used to initialize new server instances.</param>
        /// <param name="serverId">The unique identifier of the Stumps server.</param>
        /// <param name="dataAccess">The data access provider used by the instance.</param>
        public StumpsServerInstance(IServerFactory serverFactory, string serverId, IDataAccess dataAccess)
        {
            _serverFactory = serverFactory ?? throw new ArgumentNullException(nameof(serverFactory));

            this.ServerId = serverId;

            _lock       = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion);
            _dataAccess = dataAccess;

            // Setup the objects needed to keep track of Stumps.
            _stumpList      = new List <StumpContract>();
            _stumpReference = new Dictionary <string, StumpContract>(StringComparer.OrdinalIgnoreCase);

            // Initialize the server
            InitializeServer();

            // Initialize the Stumps
            InitializeStumps();
        }
示例#13
0
        static void Main(string[] args)
        {
            //1.确立通道传送方式
            TcpClientChannel clientChannel = new TcpClientChannel();

            ChannelServices.RegisterChannel(clientChannel, false);

            //因为客户端仅引用了IDemoClass,所以无法通过new 对象的方式创建远程对象。
            //所以无法使用客户端注册远程对象(RemotingConfiguration.RegisterWellKnownClientType)。
            //故而只能采用Activator.GetObject()方式来创建远程对象
            //IDemoClass demo =(IDemoClass)Activator.GetObject(typeof(IDemoClass), "tcp://127.0.0.1:8501/RemovedDemo/ServerActivated");
            //demo.ShowAppDomain();
            //demo.ShowCount("Zhang");

            IServerFactory serverFactory = (IServerFactory)Activator.GetObject(typeof(IServerFactory), "tcp://127.0.0.1:8501/RemovedDemo/ServerFactotyActivated");
            IDemoClass     demo          = serverFactory.GetDemoClass();

            demo.ShowAppDomain();
            demo.ShowCount("Zhang");

            Console.ReadLine();
        }
示例#14
0
 public HttpServerFactory(IServerFactory serverFactory)
 {
     this.serverFactory = serverFactory;
 }
示例#15
0
        /// <summary>
        /// Initialize mock objects.
        /// </summary>
        public PoolTests()
        {
            _jobManagerFactory = Substitute.For<IJobManagerFactory>();
            _jobTrackerFactory = Substitute.For<IJobTrackerFactory>();
            _hashAlgorithmFactory = Substitute.For<IHashAlgorithmFactory>();
            _shareManagerFactory = Substitute.For<IShareManagerFactory>();
            _minerManagerFactory = Substitute.For<IMinerManagerFactory>();
            _serverFactory = Substitute.For<IServerFactory>();
            _serviceFactory = Substitute.For<IServiceFactory>();
            _storageManagerFactory = Substitute.For<IStorageFactory>();
            _globalConfigFactory = Substitute.For<IGlobalConfigFactory>();

            _daemonClient = Substitute.For<IDaemonClient>();
            _minerManager = Substitute.For<IMinerManager>();
            _jobManager = Substitute.For<IJobManager>();
            _jobTracker = Substitute.For<IJobTracker>();
            _shareManager = Substitute.For<IShareManager>();
            _miningServer = Substitute.For<IMiningServer>();
            _rpcService = Substitute.For<IRpcService>();
            _storage = Substitute.For<IStorage>();
        }
示例#16
0
 protected PoolBase(IServerFactory serverFactory)
 {
     ServerFactory = serverFactory;
 }
示例#17
0
        public static IServer CreateHttp(this IServerFactory factory, IHttpRequestDelegate channel, IScheduler scheduler)
        {
            var f = new HttpServerFactory(factory);

            return(f.Create(channel, scheduler));
        }
示例#18
0
 public HttpServerFactory(IServerFactory serverFactory)
 {
     this.serverFactory = serverFactory;
 }
示例#19
0
 public WebHostBuilder UseServer(IServerFactory factory)
 {
     _serverFactory = factory;
     return(this);
 }
示例#20
0
 public static void Register(IServerFactory factory)
 {
     _setting.Register(factory);
 }
示例#21
0
 public static IServer CreateGate(this IServerFactory factory, AppFunc app, IScheduler scheduler)
 {
     return(CreateGate(factory, app, scheduler, null));
 }
示例#22
0
        public TychaiaServerWorld(
            IServerEntityFactory serverEntityFactory,
            IServerFactory serverFactory,
            IPositionScaleTranslation positionScaleTranslation,
            IPredeterminedChunkPositions predeterminedChunkPositions,
            TychaiaServer server,
            ServerChunkManager serverChunkManager)
        {
            this.m_ServerEntityFactory = serverEntityFactory;
            this.m_ServerFactory = serverFactory;
            this.m_PositionScaleTranslation = positionScaleTranslation;
            this.m_PredeterminedChunkPositions = predeterminedChunkPositions;
            this.m_Server = server;
            this.m_ConnectedClients = new Dictionary<MxClient, ServerClientManager>();

            this.m_UniqueIDIncrementer = 1;

            // TODO: Move server chunk manager into entities list.
            this.m_ServerChunkManager = serverChunkManager;

            this.m_Server.ListenForMessage("user input", this.OnUserInput);

            this.m_Server.ListenForMessage(
                "join",
                (client, playerName) =>
                {
                    // The client will repeatedly send join messages until we confirm.
                    if (this.m_ConnectedClients.ContainsKey(client))
                    {
                        return;
                    }

                    var uniqueID = this.m_UniqueIDIncrementer++;

                    Console.WriteLine("Detected \"" + Encoding.ASCII.GetString(playerName) + "\" has joined");
                    this.m_Server.SendMessage("join confirm", BitConverter.GetBytes(uniqueID));
                    var manager = this.m_ServerFactory.CreateServerClientManager(
                        this,
                        this.m_Server,
                        uniqueID,
                        Encoding.ASCII.GetString(playerName),
                        client);
                    this.m_ConnectedClients.Add(
                        client,
                        manager);
                    this.AddPlayer(client, Encoding.ASCII.GetString(playerName));
                });

            server.ListenForMessage(
                "change name",
                (client, newPlayerName) =>
                {
                    // Check to make sure this client is joined.
                    if (!this.m_ConnectedClients.ContainsKey(client))
                    {
                        return;
                    }

                    var existingName = this.m_ConnectedClients[client].PlayerName;
                    var newName = Encoding.ASCII.GetString(newPlayerName);

                    this.m_ConnectedClients[client].PlayerName = newName;
                    Console.WriteLine("\"" + existingName + "\" has changed their name to \"" + newName + "\"");
                    this.ChangePlayerName(client, newName);
                });
        }
示例#23
0
 internal ListenerContext(Socket socket, int maxConnections, IServerFactory serverFactory)
 {
     ListenSocket   = socket;
     MaxConnections = maxConnections;
     ServerFactory  = serverFactory;
 }
 public IWebHostBuilder UseServer(IServerFactory factory)
 {
     _builder.UseServer(factory);
     return(this);
 }
示例#25
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Pool" /> class.
        /// </summary>
        /// <param name="hashAlgorithmFactory">The hash algorithm factory.</param>
        /// <param name="serverFactory">The server factory.</param>
        /// <param name="serviceFactory">The service factory.</param>
        /// <param name="client">The client.</param>
        /// <param name="minerManagerFactory">The miner manager factory.</param>
        /// <param name="jobTrackerFactory"></param>
        /// <param name="jobManagerFactory">The job manager factory.</param>
        /// <param name="shareManagerFactory">The share manager factory.</param>
        /// <param name="storageManagerFactory"></param>
        /// <param name="globalConfigFactory"></param>
        public Pool(
            IHashAlgorithmFactory hashAlgorithmFactory, 
            IServerFactory serverFactory, 
            IServiceFactory serviceFactory,
            IDaemonClient client, 
            IMinerManagerFactory minerManagerFactory, 
            IJobTrackerFactory jobTrackerFactory,
            IJobManagerFactory jobManagerFactory, 
            IShareManagerFactory shareManagerFactory,
            IStorageFactory storageManagerFactory,
            IGlobalConfigFactory globalConfigFactory)
        {
            Enforce.ArgumentNotNull(hashAlgorithmFactory, "IHashAlgorithmFactory");
            Enforce.ArgumentNotNull(serverFactory, "IServerFactory");
            Enforce.ArgumentNotNull(serviceFactory, "IServiceFactory");
            Enforce.ArgumentNotNull(client, "IDaemonClient");
            Enforce.ArgumentNotNull(minerManagerFactory, "IMinerManagerFactory");
            Enforce.ArgumentNotNull(jobTrackerFactory, "IJobTrackerFactory");
            Enforce.ArgumentNotNull(jobManagerFactory, "IJobManagerFactory");
            Enforce.ArgumentNotNull(shareManagerFactory, "IShareManagerFactory");
            Enforce.ArgumentNotNull(storageManagerFactory, "IStorageFactory");
            Enforce.ArgumentNotNull(globalConfigFactory, "IGlobalConfigFactory");

            _daemonClient = client;
            _minerManagerFactory = minerManagerFactory;
            _jobManagerFactory = jobManagerFactory;
            _jobTrackerFactory = jobTrackerFactory;
            _shareManagerFactory = shareManagerFactory;
            _serverFactory = serverFactory;
            _serviceFactory = serviceFactory;
            _hashAlgorithmFactory = hashAlgorithmFactory;
            _storageManagerFactory = storageManagerFactory;
            _globalConfigFactory = globalConfigFactory;

            GenerateInstanceId();
        }
示例#26
0
 public IWebHostBuilder UseServer(IServerFactory factory)
 {
     services.AddSingleton <IServerFactory>(factory);
     return(this);
 }
示例#27
0
 public IosHttpServerFactory(IServerFactory serverFactory, IConnectionWatcher connWatcher)
 {
     this.serverFactory = serverFactory;
     this.connWatcher = connWatcher;
 }
示例#28
0
 public IServerHostBuilder <TContext> UseServer(IServerFactory factory)
 {
     throw new NotImplementedException();
 }
示例#29
0
        static void Main(string[] args)
        {
            Console.ForegroundColor = ConsoleColor.Green;
            ConsoleUtil.SetConsoleCtrlHandler(new ConsoleUtil.ControlCtrlDelegate(HandlerRoutine), true);
            bool success = true;

            Console.WriteLine("正在初始化服务程序......");
            IObjectBuilder builder = new TypeCreator();

            _serverFactory = new ServerFactory();
            try
            {
                GlobalConfig gc = GlobalConfigTool.Load();
                foreach (ServerSuperIO.Config.Server serverCfg in gc.Servers)
                {
                    IServer server = _serverFactory.CreateServer(serverCfg.ServerConfig);
                    server.AddDeviceCompleted    += server_AddDeviceCompleted;
                    server.DeleteDeviceCompleted += server_DeleteDeviceCompleted;
                    server.Start();
                    _serverFactory.AddServer(server);

                    foreach (Config.Device devCfg in serverCfg.Devices)
                    {
                        try
                        {
                            IRunDevice runDev = builder.BuildUp <IRunDevice>(devCfg.AssemblyFile, devCfg.Instance);

                            runDev.DeviceParameter.DeviceID = devCfg.DeviceID;
                            runDev.DeviceDynamic.DeviceID   = devCfg.DeviceID;
                            runDev.CommunicateType          = devCfg.CommunicateType;
                            runDev.Initialize(devCfg.DeviceID);

                            if (server.AddDevice(runDev) != devCfg.DeviceID)
                            {
                                Console.WriteLine("增加设备:" + devCfg.DeviceID + " 失败!");
                            }
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.Message);
                            continue;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                success = false;
                Console.WriteLine(ex.Message);
            }

            if (success)
            {
                Console.WriteLine("初始化服务程序完成");
            }

            while ("exit" == Console.ReadLine())
            {
                _serverFactory.RemoveAllServer();
                break;
            }
        }
示例#30
0
        public static IServer CreateIosHttp(this IServerFactory factory, IHttpRequestDelegate channel, IConnectionWatcher connWatcher, IScheduler scheduler)
        {
            var f = new IosHttpServerFactory(factory, connWatcher);

            return(f.Create(channel, scheduler));
        }
示例#31
0
 public IosHttpServerFactory(IServerFactory serverFactory, IConnectionWatcher connWatcher)
 {
     this.serverFactory = serverFactory;
     this.connWatcher   = connWatcher;
 }
示例#32
0
 public MoneroPool(IServerFactory serverFactory)
     : base(serverFactory)
 {
     _logger = Log.ForContext <MoneroPool>().ForContext("Pool", "XMR");
 }
 /// <summary>
 /// Create server console host
 /// </summary>
 /// <param name="factory"></param>
 /// <param name="logger"></param>
 public ServerConsoleHost(IServerFactory factory, ILogger logger)
 {
     _logger  = logger ?? throw new ArgumentNullException(nameof(logger));
     _factory = factory ?? throw new ArgumentNullException(nameof(factory));
 }
示例#34
0
 public TestServerFactory(IServerFactory wrappedServerFactory)
 {
     _wrappedServerFactory = wrappedServerFactory;
 }