public MessagingService(IConfiguration configuration) { if (Server == null) { try { short Port = Int16.Parse(configuration["MessagingPort"]); if (Port <= 0) { Port = 2021; } if (configuration["WSProtocol"] == "wss") { string pass = configuration["CertificatePassword"]; var context = new SslContext(SslProtocols.Tls12, new X509Certificate2("server.pfx", pass)); _serv = new SMessagingServer(context, IPAddress.Any, Port); } else { _serv = new MessagingServer(IPAddress.Any, Port); } } catch (Exception e) { log.Info(e.ToString()); } } }
public void Init() { if (Server == null) { try { var Port = short.Parse(configuration["MessagingPort"]); if (Port <= 0) { Port = 2021; } if (configuration["WSProtocol"] == "wss") { var pass = configuration["CertificatePassword"]; var context = new SslContext(SslProtocols.Tls12, new X509Certificate2("server.pfx", pass)); _serv = new SMessagingServer(context, IPAddress.Any, Port); } else { _serv = new MessagingServer(IPAddress.Any, Port); } } catch (Exception e) { log.Info(e.ToString()); } } if (LocalServer == null) { try { var Port = short.Parse(configuration["TcpPort"]); if (Port <= 0) { Port = 2022; } Thread.Sleep(100); _localserv = new TMessagingServer(IPAddress.Any, Port); } catch (Exception e) { log.Info(e.ToString()); } } }
private static void Configure(string profile) { // read configuration values var builder = new Microsoft.Extensions.Configuration.ConfigurationBuilder() .SetBasePath(AppDomain.CurrentDomain.BaseDirectory) .AddJsonFile("appsettings.json", false) .AddJsonFile($"{profile}.json", false); var configurationRoot = builder.Build(); // configure logging _loggerFactory = new LoggerFactory(); _loggerFactory.AddConsole(configurationRoot.GetSection("Logging")); _loggerFactory.AddNLog(); LogManager.Configuration = new XmlLoggingConfiguration("nlog.config", true); _logger = _loggerFactory.CreateLogger("TestServer"); // configure caching var distributedCache = DistributedCacheFactory.Create(); // set up address registry var addressRegistrySettings = new AddressRegistrySettings(); configurationRoot.GetSection("AddressRegistrySettings").Bind(addressRegistrySettings); addressRegistrySettings.WcfConfiguration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); var addressRegistry = new AddressRegistry(addressRegistrySettings, distributedCache); // set up collaboration registry var collaborationProtocolRegistrySettings = new CollaborationProtocolRegistrySettings(); configurationRoot.GetSection("CollaborationProtocolRegistrySettings").Bind(collaborationProtocolRegistrySettings); collaborationProtocolRegistrySettings.WcfConfiguration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); var collaborationProtocolRegistry = new CollaborationProtocolRegistry(collaborationProtocolRegistrySettings, distributedCache, addressRegistry); _serverSettings = new ServerSettings(); configurationRoot.GetSection("ServerSettings").Bind(_serverSettings); // set up messaging var messagingSettings = new MessagingSettings(); configurationRoot.GetSection("MessagingSettings").Bind(messagingSettings); messagingSettings.ServiceBus.Synchronous.ReplyQueueMapping.Add(Environment.MachineName, "DUMMY"); // we just need a value, it will never be used messagingSettings.LogPayload = true; _messagingServer = new MessagingServer(messagingSettings, _logger, _loggerFactory, collaborationProtocolRegistry, addressRegistry); _messagingServer.RegisterAsynchronousMessageReceivedStartingCallback((m) => { MappedDiagnosticsLogicalContext.Set("correlationId", m.MessageId); }); _messagingServer.RegisterAsynchronousMessageReceivedCallback((m) => { if (m.Payload.ToString().Contains("ThrowException")) { throw new InvalidOperationException(); } var path = Path.Combine(_serverSettings.DestinationDirectory, "Asynchronous"); if (Directory.Exists(path) == false) { Directory.CreateDirectory(path); } var fileName = Path.Combine(path, m.MessageId + ".xml"); using (var sw = File.CreateText(fileName)) { m.Payload.Save(sw); } }); _messagingServer.RegisterAsynchronousMessageReceivedCompletedCallback((m) => { MappedDiagnosticsLogicalContext.Set("correlationId", m.MessageId); }); _messagingServer.RegisterSynchronousMessageReceivedStartingCallback((m) => { MappedDiagnosticsLogicalContext.Set("correlationId", string.Empty);// reset correlation id }); _messagingServer.RegisterSynchronousMessageReceivedCallback((m) => { var path = Path.Combine(_serverSettings.DestinationDirectory, "Synchronous"); if (Directory.Exists(path) == false) { Directory.CreateDirectory(path); } var fileName = Path.Combine(path, m.MessageId + ".xml"); using (var sw = File.CreateText(fileName)) { m.Payload.Save(sw); } return(new XDocument(new XElement("DummyResponse"))); }); _messagingServer.RegisterSynchronousMessageReceivedCompletedCallback((m) => { MappedDiagnosticsLogicalContext.Set("correlationId", string.Empty); // reset correlation id }); }
public PositionsTester() { server = Program.Container.Resolve <IMessagingServer>(); _positions = GeneratePositions(); _timer = new Timer(UpdatePosition, null, _updateInterval, _updateInterval); }
public void PostSignal(SignalInfo signal, IMessagingServer server) { if ((SignalFlags)signal.Flags == SignalFlags.Cluster) { xtrade.PostSignalTo(signal); return; } switch ((EnumSignals)signal.Id) { case EnumSignals.SIGNAL_POST_LOG: { if (string.IsNullOrEmpty(signal.Data)) { break; } MainService.thisGlobal.DoLog(signal); } break; case EnumSignals.SIGNAL_CHECK_HEALTH: if (Utils.IsDebug()) { log.Info("CheckHealth: " + signal.Flags); } break; case EnumSignals.SIGNAL_DEALS_HISTORY: { List <DealInfo> deals = Utils.ExtractList <DealInfo>(signal.Data); xtrade.SaveDeals(deals); } break; case EnumSignals.SIGNAL_CHECK_BALANCE: { if (signal.Data == null) { break; } var jList = Utils.ExtractList <BalanceInfo>(signal.Data); if (Utils.HasAny(jList)) { BalanceInfo info = jList.FirstOrDefault(); xtrade.UpdateBalance((int)info.Account, info.Balance, info.Equity); } } break; case EnumSignals.SIGNAL_UPDATE_RATES: { try { var jRates = Utils.ExtractList <RatesInfo>(signal.Data); if (Utils.HasAny(jRates)) { var usdbynrateTask = GetBYNRates(); var usdbynrate = usdbynrateTask.Result; if (usdbynrate > 0) { var rate = new RatesInfo(); rate.Ask = usdbynrate; rate.Bid = usdbynrate; rate.Symbol = "USDBYN"; jRates.Add(rate); } } xtrade.UpdateRates(jRates); } catch (Exception e) { log.Info(string.Format($"GetBYNUSDRates Error: {0}", e)); } } break; case EnumSignals.SIGNAL_ACTIVE_ORDERS: { List <PositionInfo> positions = Utils.ExtractList <PositionInfo>(signal.Data); var terminals = MainService.thisGlobal.Container.Resolve <ITerminalEvents>(); terminals.UpdatePositions(signal.ObjectId, signal.Value, positions); } break; case EnumSignals.SIGNAL_ADD_ORDERS: { List <PositionInfo> orders = Utils.ExtractList <PositionInfo>(signal.Data); if (Utils.HasAny(orders)) { var terminals = MainService.thisGlobal.Container.Resolve <ITerminalEvents>(); terminals.AddOrders(signal.ObjectId, signal.Value, orders); } } break; case EnumSignals.SIGNAL_DELETE_ORDERS: { List <PositionInfo> orders = Utils.ExtractList <PositionInfo>(signal.Data); if (Utils.HasAny(orders)) { var terminals = MainService.thisGlobal.Container.Resolve <ITerminalEvents>(); terminals.DeleteOrders(signal.ObjectId, signal.Value, orders); } } break; case EnumSignals.SIGNAL_UPDATE_ORDERS: { List <PositionInfo> orders = Utils.ExtractList <PositionInfo>(signal.Data); if (Utils.HasAny(orders)) { var terminals = MainService.thisGlobal.Container.Resolve <ITerminalEvents>(); terminals.UpdateOrders(signal.ObjectId, signal.Value, orders); } } break; case EnumSignals.SIGNAL_WARN_NEWS: break; case EnumSignals.SIGNAL_DEINIT_EXPERT: { var expert = JsonConvert.DeserializeObject <ExpertInfo>(signal.Data); xtrade.DeInitExpert(expert); } break; case EnumSignals.SIGNAL_DEINIT_TERMINAL: { var expert = JsonConvert.DeserializeObject <ExpertInfo>(signal.Data); xtrade.DeInitTerminal(expert); } break; case EnumSignals.SIGNAL_LEVELS4SYMBOL: { var symbol = signal.Sym; var levelsString = xtrade.Levels4Symbol(symbol); var result = xtrade.CreateSignal(SignalFlags.Expert, signal.ObjectId, (EnumSignals)signal.Id, signal.ChartId); result.Sym = symbol; result.SetData(levelsString); var send = JsonConvert.SerializeObject(result); if (server != null) { server.MulticastText(send); } } break; case EnumSignals.SIGNAL_SAVELEVELS4SYMBOL: { var levels = signal.Data; xtrade.SaveLevels4Symbol(signal.Sym, levels); log.Info($"Levels Saved For Symbol {signal.Sym}: {levels}"); } break; default: if (server != null) { var result = xtrade.SendSignal(signal); if (result != null) { var send = JsonConvert.SerializeObject(result); server.MulticastText(send); } } break; } }
public void ProcessMessage(WsMessage wsMessage, IMessagingServer server) { switch (wsMessage.Type) { case WsMessageType.GetAllText: { wsMessage.Message = log.GetAllText(); wsMessage.Type = WsMessageType.GetAllText; var send = JsonConvert.SerializeObject(wsMessage); server.MulticastText(send); } break; case WsMessageType.ClearLog: { log.ClearLog(); } break; case WsMessageType.WriteLog: { log.Info(wsMessage.Message); } break; case WsMessageType.GetAllPositions: { var message = new WsMessage(); message.From = wsMessage.From; message.Type = WsMessageType.GetAllPositions; var terminals = MainService.thisGlobal.Container.Resolve <ITerminalEvents>(); message.Message = JsonConvert.SerializeObject(terminals.GetAllPositions()); var send = JsonConvert.SerializeObject(message); server.MulticastText(send); } break; case WsMessageType.GetAllPerformance: { var message = new WsMessage(); message.From = wsMessage.From; message.Type = WsMessageType.GetAllPerformance; message.Message = "[]"; var ds = MainService.thisGlobal.Container.Resolve <DataService>(); var month = int.Parse(wsMessage.Message); ds.StartPerf(month); var send = JsonConvert.SerializeObject(message); server.MulticastText(send); } break; case WsMessageType.GetAllCapital: { var message = new WsMessage(); message.From = wsMessage.From; message.Type = WsMessageType.GetAllCapital; message.Message = "[]"; var result = JsonConvert.DeserializeObject <Dictionary <string, string> >(wsMessage.Message); var wallet = int.Parse(result["WalletId"]); var dateTimeFrom = DateTime.Parse(result["from"]); var dateTimeTo = DateTime.Parse(result["to"]); xtrade.GetWalletBalanceRangeAsync(wallet, dateTimeFrom, dateTimeTo); var send = JsonConvert.SerializeObject(message); server.MulticastText(send); } break; case WsMessageType.UpdatePosition: { var result = JsonConvert.DeserializeObject <PositionInfo>(wsMessage.Message); if (result != null) { var terminals = MainService.thisGlobal.Container.Resolve <ITerminalEvents>(); terminals.UpdatePositionFromClient(result); } } break; case WsMessageType.GetLevels: { wsMessage.From = "Server"; wsMessage.Message = xtrade.Levels4Symbol(wsMessage.Message); wsMessage.Type = WsMessageType.GetLevels; var send = JsonConvert.SerializeObject(wsMessage); server.MulticastText(send); } break; default: { log.Info("Undefined Message"); // Multicast message to all connected sessions // ((WsServer)Server).MulticastText(message); } break; } }
public SMessageSession(WssServer server, ILog l, ISignalHandler signalHandler) : base(server) { log = l; handler = signalHandler; mServer = (IMessagingServer)server; }
public void PostSignal(SignalInfo signal, IMessagingServer server) { if ((SignalFlags)signal.Flags == SignalFlags.Cluster) { xtrade.PostSignalTo(signal); return; } switch ((EnumSignals)signal.Id) { case EnumSignals.SIGNAL_POST_LOG: { if (signal.Data == null) { break; } MainService.thisGlobal.DoLog(signal); } break; case EnumSignals.SIGNAL_CHECK_HEALTH: if (xtrade.IsDebug()) { log.Info("CheckHealth: " + signal.Flags); } break; case EnumSignals.SIGNAL_DEALS_HISTORY: { List <DealInfo> deals = null; if (signal.Data != null) { deals = JsonConvert.DeserializeObject <List <DealInfo> >(signal.Data.ToString()); } else { deals = new List <DealInfo>(); } xtrade.SaveDeals(deals); } break; case EnumSignals.SIGNAL_CHECK_BALANCE: { if (signal.Data == null) { break; } JArray jarray = (JArray)signal.Data; if (jarray == null || jarray.Count == 0) { break; } decimal balance = jarray.First.Value <decimal?>("Balance") ?? 0; decimal equity = jarray.First.Value <decimal?>("Equity") ?? 0; int Account = jarray.First.Value <int?>("Account") ?? 0; xtrade.UpdateBalance(Account, balance, equity); } break; case EnumSignals.SIGNAL_UPDATE_RATES: { try { List <RatesInfo> rates = null; if (signal.Data != null) { rates = JsonConvert.DeserializeObject <List <RatesInfo> >(signal.Data.ToString()); } if (rates != null) { var usdbynrateTask = GetBYNRates(); double usdbynrate = usdbynrateTask.Result; if (usdbynrate > 0) { RatesInfo rate = new RatesInfo(); rate.Ask = usdbynrate; rate.Bid = usdbynrate; rate.Symbol = "USDBYN"; rates.Add(rate); } } xtrade.UpdateRates(rates); } catch (Exception e) { log.Info(String.Format($"GetBYNUSDRates Error: {0}", e.ToString())); } } break; case EnumSignals.SIGNAL_ACTIVE_ORDERS: { List <PositionInfo> positions = null; if (signal.Data != null) { positions = JsonConvert.DeserializeObject <List <PositionInfo> >(signal.Data.ToString()); } else { positions = new List <PositionInfo>(); } var terminals = MainService.thisGlobal.Container.Resolve <ITerminalEvents>(); terminals.UpdatePositions(signal.ObjectId, signal.Value, positions); } break; /* * case EnumSignals.SIGNAL_UPDATE_SLTP: * { * List<PositionInfo> positions = null; * if (signal.Data != null) * positions = JsonConvert.DeserializeObject<List<PositionInfo>>(signal.Data.ToString()); * else * positions = new List<PositionInfo>(); * terminals.UpdateSLTP(signal.ObjectId, signal.Value, positions); * } * break; */ case EnumSignals.SIGNAL_WARN_NEWS: break; case EnumSignals.SIGNAL_DEINIT_EXPERT: { ExpertInfo expert = JsonConvert.DeserializeObject <ExpertInfo>(signal.Data.ToString()); xtrade.DeInitExpert(expert); } break; case EnumSignals.SIGNAL_DEINIT_TERMINAL: { ExpertInfo expert = JsonConvert.DeserializeObject <ExpertInfo>(signal.Data.ToString()); xtrade.DeInitTerminal(expert); } break; case EnumSignals.SIGNAL_LEVELS4SYMBOL: { string symbol = signal.Sym; string levelsString = xtrade.Levels4Symbol(symbol); var result = xtrade.CreateSignal(SignalFlags.Expert, signal.ObjectId, (EnumSignals)signal.Id, signal.ChartId); result.Sym = symbol; result.Data = levelsString; var send = JsonConvert.SerializeObject(result); if (server != null) { server.MulticastText(send); } } break; default: if (server != null) { var result = xtrade.SendSignal(signal); if (result != null) { var send = JsonConvert.SerializeObject(result); server.MulticastText(send); } } break; } }