Example #1
0
        private void StartUp()
        {
            // default configuration
            EnvId env = IntClient.Target.ClientInfo.ConfigEnv;

            // derived configuration
            _serverPort = OtherSettings.GetValue(WFPropName.Port, EnvHelper.SvcPort(env, SvcId.GridSwitch));
            _nodeId     = OtherSettings.GetValue(WFPropName.NodeId, Guid.NewGuid());
            // create router/worker worksteps
            Routers = GridWorksteps.Create().ToArray();
            Workers = GridWorksteps.Create().ToArray();
            // start discovery endpoint
            string endpoint = ServiceHelper.FormatEndpoint(WcfConst.NetTcp, _serverPort);
            string svcName  = EnvHelper.SvcPrefix(SvcId.GridSwitch);

            _discoServerHost = new CustomServiceHost <IDiscoverV111, DiscoverRecverV111>(
                Logger, new DiscoverRecverV111(this), endpoint,
                svcName, typeof(IDiscoverV111).Name, true);
            IWorkContext context = new WorkContext(Logger, IntClient.Target, HostInstance, ServerInstance);

            // start gridswitch endpoints - routers before workers
            foreach (IWorkstep router in Routers)
            {
                router.Initialise(context);
                router.EnableGrid(GridLevel.Router, _nodeId, _serverPort, null);
            }
            foreach (IWorkstep worker in Workers)
            {
                worker.Initialise(context);
                worker.EnableGrid(GridLevel.Worker, _nodeId, _serverPort, null);
            }
        }
Example #2
0
        public WorkflowClient(IWorkContext context, NamedValueSet settings)
        {
            // default configuration
            const SvcId svc    = SvcId.GridSwitch;
            EnvId       env    = EnvHelper.ParseEnvName(BuildConst.BuildEnv);
            Guid        nodeId = Guid.NewGuid();

            // custom configuration
            if (settings != null)
            {
                // environment
                env = (EnvId)settings.GetValue(WFPropName.EnvId, (int)env);
            }
            env = EnvHelper.CheckEnv(env);
            // derived configuration
            string hosts = null;
            int    port  = EnvHelper.SvcPort(env, svc);

            if (settings != null)
            {
                port   = settings.GetValue(WFPropName.Port, port);
                hosts  = settings.GetValue(WFPropName.Hosts, hosts);
                nodeId = settings.GetValue(WFPropName.NodeId, nodeId);
            }
            string svcName = EnvHelper.SvcPrefix(svc);

            string[] serviceAddrs = EnvHelper.GetServiceAddrs(env, svc, false);
            if (hosts != null)
            {
                serviceAddrs = hosts.Split(";".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
            }
            ServiceAddress resolvedServer = V111Helpers.ResolveServer(context.Logger, svcName, new ServiceAddresses(WcfConst.AllProtocols, serviceAddrs, port),
                                                                      new[] { typeof(IDiscoverV111).FullName });
            // initialise worksteps
            List <IWorkstep> worksteps = GridWorksteps.Create();

            foreach (IWorkstep workstep in worksteps)
            {
                workstep.Initialise(context);
                workstep.EnableGrid(GridLevel.Client, nodeId, resolvedServer.Port, resolvedServer.Host);
            }
            Clients = worksteps.ToArray();
        }
Example #3
0
        protected override void OnServerStarted()
        {
            // default configuration
            _activeProviders = new[] { MDSProviderId.Bloomberg };
            // custom configuration
            string[] enabledProviders = OtherSettings.GetArray <string>(MdsPropName.EnabledProviders);
            if (enabledProviders != null && enabledProviders.Length > 0)
            {
                _activeProviders = enabledProviders.Select(providerName => EnumHelper.Parse <MDSProviderId>(providerName, true)).ToArray();
            }
            // derived configuration
            EnvId  envId   = IntClient.Target.ClientInfo.ConfigEnv;
            string envName = EnvHelper.EnvName(envId);
            var    port    = OtherSettings.GetValue(MdsPropName.Port, EnvHelper.SvcPort(envId, SvcId.MarketData));
            // service endpoints
            string transEndpoints = ServiceHelper.FormatEndpoint(WcfConst.NetTcp, port);
            string discoEndpoints = ServiceHelper.FormatEndpoint(WcfConst.NetTcp, port);

            transEndpoints = OtherSettings.GetValue(MdsPropName.Endpoints, transEndpoints);
            // add default port to endpoints if required
            var tempEndpoints = new List <string>();

            foreach (string ep in transEndpoints.Split(';'))
            {
                var epParts = ep.Split(':');
                var scheme  = epParts[0];
                var tport   = port;
                if (epParts.Length > 1)
                {
                    tport = Int32.Parse(epParts[1]);
                }
                tempEndpoints.Add($"{scheme}:{tport}");
            }
            transEndpoints = String.Join(";", tempEndpoints.ToArray());
            // get user identity and full name
            WindowsIdentity winIdent  = WindowsIdentity.GetCurrent();
            UserPrincipal   principal = null;

            try
            {
                var principalContext = new PrincipalContext(ContextType.Domain);
                principal = UserPrincipal.FindByIdentity(principalContext, IdentityType.SamAccountName, winIdent.Name);
            }
            catch (PrincipalException principalException)
            {
                // swallow - can occur on machines not connected to domain controller
                Logger.LogWarning("UserPrincipal.FindByIdentity failed: {0}: {1}", principalException.GetType().Name, principalException.Message);
            }
            string userFullName = null;

            if (principal != null)
            {
                userFullName = principal.GivenName + " " + principal.Surname;
            }
            _serverCfg = new ServerCfg(
                new ModuleInfo(envName, Guid.NewGuid(), winIdent.Name, userFullName, null, null),
                transEndpoints, discoEndpoints);
            foreach (MDSProviderId providerId in _activeProviders)
            {
                _providers[(int)providerId] = new MarketDataRealtimeClient(LoggerRef, MainThreadQueue, IntClient.Target, providerId);
            }
            string svcName = EnvHelper.SvcPrefix(SvcId.MarketData);

            // V2.2
            _mrktDataV221ServerHost = new CustomServiceHost <IMrktDataV221, MrktDataRecverV221>(
                Logger, new MrktDataRecverV221(this), _serverCfg.TransEndpoints,
                svcName, typeof(IMrktDataV221).Name, true);
            _sessCtrlV131ServerHost = new CustomServiceHost <ISessCtrlV131, SessCtrlRecverV131>(
                Logger, new SessCtrlRecverV131(this), _serverCfg.DiscoEndpoints,
                svcName, typeof(ISessCtrlV131).Name, true);
            _discoServerHostV111 = new CustomServiceHost <IDiscoverV111, DiscoverRecverV111>(
                Logger, new DiscoverRecverV111(this), _serverCfg.DiscoEndpoints,
                svcName, typeof(IDiscoverV111).Name, true);
        }
Example #4
0
        protected override void OnStart()
        {
            // restore un-expired connections
            Logger.LogDebug("Restoring connections...");
            DateTimeOffset    dtNow     = DateTimeOffset.Now;
            List <CommonItem> connItems = _cacheEngine.GetCacheItems(
                null, ItemKind.Local, typeof(ClientConnectionState).FullName, null, 0, dtNow, true, false);

            foreach (CommonItem item in connItems)
            {
                try
                {
                    var oldConn = XmlSerializerHelper.DeserializeFromString <ClientConnectionState>(
                        CompressionHelper.DecompressToString(item.YData));
                    IConnection connection = null;
                    if (oldConn.Contract == typeof(ITransferV341).FullName)
                    {
                        var clientId = new Guid(oldConn.SourceId);
                        connection = new ConnectionV34(
                            Logger, _cacheEngine, _serverCfg,
                            clientId, oldConn.ReplyAddress, NodeType.Client);
                        connection.ExtendExpiry();
                        _connectionIndex.Set(clientId, connection);
                    }
                    if (connection != null)
                    {
                        Logger.LogDebug("Restored connection:");
                        Logger.LogDebug("  Client Id. : {0}", connection.ClientId);
                        Logger.LogDebug("  Client Addr: {0}", connection.ReplyAddress);
                    }
                    else
                    {
                        Logger.LogDebug("Ignoring unsupported connection: '{0}'", oldConn.ReplyAddress);
                    }
                }
                catch (Exception e)
                {
                    // failed, however the show must go on
                    Logger.Log(e);
                }
            }
            // restore subscriptions
            Logger.LogDebug("Restoring subscriptions...");
            List <CommonItem> subsItems = _cacheEngine.GetCacheItems(
                null, ItemKind.Local, typeof(ClientSubscriptionState).FullName, null, 0, dtNow, true, false);

            foreach (CommonItem item in subsItems)
            {
                try
                {
                    var oldSubscription = XmlSerializerHelper.DeserializeFromString <ClientSubscriptionState>(
                        CompressionHelper.DecompressToString(item.YData));
                    var         subscription = new ClientSubscription(oldSubscription);
                    var         clientId     = new Guid(oldSubscription.ConnectionId);
                    IConnection connection   = GetValidConnection(clientId);
                    if (connection != null)
                    {
                        _cacheEngine.RestoreSubscription(subscription);
                        Logger.LogDebug("Restored subscription:");
                        Logger.LogDebug("  Client Id: {0}", connection.ClientId);
                        Logger.LogDebug("  Address  : {0}", connection.ReplyAddress);
                        Logger.LogDebug("  Subs. Id : {0}", subscription.SubscriptionId);
                        Logger.LogDebug("  AppScopes: {0}", (subscription.AppScopes == null) ? "*" : String.Join(",", subscription.AppScopes));
                        Logger.LogDebug("  ItemKind : {0}", (subscription.ItemKind == ItemKind.Undefined) ? "(any)" : subscription.ItemKind.ToString());
                        Logger.LogDebug("  DataType : {0}", subscription.DataTypeName ?? "(any)");
                        Logger.LogDebug("  Query    : {0}", subscription.Expression.DisplayString());
                        Logger.LogDebug("  MinimumUSN > : {0}", subscription.MinimumUSN);
                        Logger.LogDebug("  Excl.Deleted?: {0}", (subscription.ExcludeDeleted));
                        Logger.LogDebug("  Excl.DataBody: {0}", subscription.ExcludeDataBody);
                    }
                    else
                    {
                        _cacheEngine.DeleteSubscriptionState(subscription.SubscriptionId);
                        Logger.LogDebug("Ignoring expired subscription id: {0}", oldSubscription.SubscriptionId);
                    }
                }
                catch (Exception e)
                {
                    // failed, however the show must go on
                    Logger.Log(e);
                }
            }
            string svcName = EnvHelper.SvcPrefix(SvcId.CoreServer);

            // discovery service
            _discoverV111ServerHost = new CustomServiceHost <IDiscoverV111, DiscoverRecverV111>(
                Logger, new DiscoverRecverV111(this), _serverCfg.V31DiscoEndpoints,
                svcName, typeof(IDiscoverV111).Name, true);
            // V3.4 services
            _sessCtrlV131ServerHost = new CustomServiceHost <ISessCtrlV131, SessCtrlRecverV131>(
                Logger, new SessCtrlRecverV131(this), _serverCfg.V31DiscoEndpoints,
                svcName, typeof(ISessCtrlV131).Name, true);
            _transferV341ServerHost = new CustomServiceHost <ITransferV341, TransferRecverV341>(
                Logger, new TransferRecverV341(this), _serverCfg.V31AsyncEndpoints,
                svcName, typeof(ITransferV341).Name, true);
            // start housekeeping timer
            _housekeepTimer = new Timer(DispatchHousekeepTimeout, null, ServerCfg.CommsHousekeepInterval, ServerCfg.CommsHousekeepInterval);
        }
Example #5
0
        protected override void OnStart(string[] args)
        {
            // start the service
            ILogger svcLogger = new ServiceLogger(base.EventLog);

            try
            {
                // - set current directory to the install location
                // - get executable name for file logger
                Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;
                ProcessModule pm         = Process.GetCurrentProcess().MainModule;
                string        moduleName = pm.ModuleName.Split('.')[0];
                _loggerRef = Reference <ILogger> .Create(new MultiLogger(
                                                             svcLogger,
                                                             new FileLogger(@"C:\_qds\logs\" + moduleName + ".{dddd}.log")));

                const EnvId env      = EnvId.Dev_Development; // hack
                var         settings = new NamedValueSet(EnvHelper.GetAppSettings(env, EnvHelper.SvcPrefix(SvcId.CoreServer), true));
                DisposeHelper.SafeDispose(ref _server);
                _server = new CoreServer(_loggerRef, settings);
                _server.Start();
            }
            catch (Exception ex)
            {
                svcLogger.Log(ex);
            }
        }