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); } }
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(); }
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); }
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); }
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); } }