public bool SetupLiveContext() { context = null; protectedContext = new CurrentProtectedContext(); try { protectedContext.Initialize(TerminalId); } catch (Exception ex) { Logger.Error("Ошибка инициализации защищенного контекста", ex); throw; } // создать объект proxy try { if (proxyTrade == null) proxyTrade = new TradeSharpServerTrade(callbackProcessor); } catch (Exception ex) { RobotFarm.Instance.AppendLogMessage("Ошибка создания TradeSharpServerTrade: " + ex); return false; } // залогиниться и // получить актуальную информацию по счету Account account; try { var localTime = DateTime.Now.Ticks; var hash = CredentialsHash.MakeCredentialsHash(UserLogin, UserPassword, localTime); int sessionTag; var response = proxyTrade.proxy.Authenticate(UserLogin, hash, TerminalVersionString, TerminalId, localTime, out sessionTag); if (response != AuthenticationResponse.OK) { protectedContext.OnAuthenticateFaulted(); RobotFarm.Instance.AppendLogMessage(string.Format("Ошибка аутентификации ({0}-{1}): {2}", UserLogin, UserPassword, response)); return false; } protectedContext.OnAuthenticated(sessionTag); var opRst = TradeSharpAccount.Instance.proxy.GetAccountInfo(AccountId, false, out account); if (account == null) { RobotFarm.Instance.AppendLogMessage(string.Format("Невозможно получить информацию по счету {0}: {1}", AccountId, opRst)); return false; } Logger.InfoFormat("User {0} authenticated on #{1}", UserLogin, AccountId); } catch (Exception ex) { RobotFarm.Instance.AppendLogMessage( string.Format("Ошибка аутентификации ({0}-{1}): {2}", UserLogin, UserPassword, ex)); return false; } // инициализировать киборгов var countSuccess = robots == null ? 0 : robots.Count; if (robots != null && robots.Count > 0) { // контекст для роботов context = new RobotContextLiveFarm(proxyTrade, account, () => UserLogin, accountData) { robotContextMode = RobotContext.ContextMode.Realtime }; context.OnRobotMessage += (robot, time, messages) => { foreach (var msg in messages) RobotFarm.Instance.AppendLogMessage( "#" + AccountId + ": [" + robot.GetUniqueName() + "] said \"" + msg + "\""); }; // включить каждого робота в контекст foreach (var robot in robots) { try { robot.Initialize(context, protectedContext); context.SubscribeRobot(robot); } catch (Exception ex) { countSuccess--; RobotFarm.Instance.AppendLogMessage("Ошибка инициализации робота " + robot.GetUniqueName() + ": " + ex); } } } // создать объект - обработчик торговых сигалов callbackProcessor.SignalProcessor = new TradeSignalProcessor( () => accountData.GetActualAccount(true), s => RobotFarm.Instance.AppendLogMessage(s), () => accountData.GetActualOrderList(), () => VolumeRoundType.Ближайшее, proxyTrade.proxy, protectedContext, this); return (robots == null || robots.Count <= 0) || countSuccess > 0; }
public bool SetupLiveContext() { context = null; protectedContext = new CurrentProtectedContext(); try { protectedContext.Initialize(TerminalId); } catch (Exception ex) { Logger.Error("Ошибка инициализации защищенного контекста", ex); throw; } // создать объект proxy try { if (proxyTrade == null) { proxyTrade = new TradeSharpServerTrade(callbackProcessor); } } catch (Exception ex) { RobotFarm.Instance.AppendLogMessage("Ошибка создания TradeSharpServerTrade: " + ex); return(false); } // залогиниться и // получить актуальную информацию по счету Account account; try { var localTime = DateTime.Now.Ticks; var hash = CredentialsHash.MakeCredentialsHash(UserLogin, UserPassword, localTime); int sessionTag; var response = proxyTrade.proxy.Authenticate(UserLogin, hash, TerminalVersionString, TerminalId, localTime, out sessionTag); if (response != AuthenticationResponse.OK) { protectedContext.OnAuthenticateFaulted(); RobotFarm.Instance.AppendLogMessage(string.Format("Ошибка аутентификации ({0}-{1}): {2}", UserLogin, UserPassword, response)); return(false); } protectedContext.OnAuthenticated(sessionTag); var opRst = TradeSharpAccount.Instance.proxy.GetAccountInfo(AccountId, false, out account); if (account == null) { RobotFarm.Instance.AppendLogMessage(string.Format("Невозможно получить информацию по счету {0}: {1}", AccountId, opRst)); return(false); } Logger.InfoFormat("User {0} authenticated on #{1}", UserLogin, AccountId); } catch (Exception ex) { RobotFarm.Instance.AppendLogMessage( string.Format("Ошибка аутентификации ({0}-{1}): {2}", UserLogin, UserPassword, ex)); return(false); } // инициализировать киборгов var countSuccess = robots == null ? 0 : robots.Count; if (robots != null && robots.Count > 0) { // контекст для роботов context = new RobotContextLiveFarm(proxyTrade, account, () => UserLogin, accountData, () => { return(robots.SelectMany(r => r.Graphics).Distinct().ToList()); }) { robotContextMode = RobotContext.ContextMode.Realtime }; context.OnRobotMessage += (robot, time, messages) => { foreach (var msg in messages) { RobotFarm.Instance.AppendLogMessage( "#" + AccountId + ": [" + robot.GetUniqueName() + "] said \"" + msg + "\""); } }; // включить каждого робота в контекст foreach (var robot in robots) { try { robot.Initialize(context, protectedContext); context.SubscribeRobot(robot); } catch (Exception ex) { countSuccess--; RobotFarm.Instance.AppendLogMessage("Ошибка инициализации робота " + robot.GetUniqueName() + ": " + ex); } } } // создать объект - обработчик торговых сигалов callbackProcessor.SignalProcessor = new TradeSignalProcessor( () => accountData.GetActualAccount(true), s => RobotFarm.Instance.AppendLogMessage(s), () => accountData.GetActualOrderList(), () => VolumeRoundType.Ближайшее, proxyTrade.proxy, protectedContext, this); return((robots == null || robots.Count <= 0) || countSuccess > 0); }