public void SetUp() { _host = new Host <TradeServiceStartup>(); _app = _host.Build(); _app.Start(); _configuration = AppCore.Instance.Get <IServiceConfiguration>(); var jsonSettings = new AppJsonSerializer(); var jsonSerializer = JsonSerializer.Create(jsonSettings); AppCore.Instance.ObjectProvider.Configure(conf => conf.For <JsonSerializerSettings>().Use(jsonSettings)); AppCore.Instance.ObjectProvider.Configure(conf => conf.For <JsonSerializer>().Use(jsonSerializer)); _traderToken = ApiServiceBuilder <IUserService> .Build("http://localhost:8080") .Create() .Login(new Credentials() { Username = "******", Password = "******" }).Result; _tradeClient = ApiServiceBuilder <ITradeService> .Build("http://localhost:8080") .AddAuthorizationHeader(() => _traderToken.Digest) .Create(); _priceClient = AppCore.Instance.GetService <IPriceService>(); Task.Delay(1000); var publisher = AppCore.Instance.Get <IPublisher>(); publisher.Stop().Wait(); }
public Task <TradeServiceToken> Login(Credentials credentials) { var now = DateTime.Now; var secret = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_serviceConfiguration.Key)); var issuer = _serviceConfiguration.Name; var identity = GetUser(credentials); var handler = new JwtSecurityTokenHandler(); var signingCreds = new SigningCredentials(secret, SecurityAlgorithms.HmacSha256); var token = handler.CreateJwtSecurityToken(issuer, null, identity, now, DateTime.Now.AddDays(1), now, signingCreds); var encoded = handler.WriteToken(token); var result = new TradeServiceToken() { Username = credentials.Username, Digest = encoded }; return(Task.FromResult(result)); }
public MainViewModel() { Events = new ObservableCollection <string>(); _authService = ApiServiceBuilder <IUserService> .Build(TradeServiceReferential.ServiceHost) .Create(); _userToken = _authService.Login(new Credentials() { Username = "******", Password = "******" }).Result; AppCore.Instance.ObjectProvider.Configure(config => config.For <TradeServiceToken>().Use(_userToken)); _tradeService = ApiServiceBuilder <ITradeService> .Build(TradeServiceReferential.ServiceHost) .AddAuthorizationHeader(() => _userToken.Digest) .Create(); _priceEventService = SignalRServiceBuilder <Price, PriceRequest> .Create() .Build(new PriceRequest((p) => true), (opts) => { opts.AccessTokenProvider = () => Task.FromResult(_userToken.Digest); }); _priceEventService .Connect(Scheduler.Default, 1000) .Subscribe((priceEvent) => { foreach (var trade in Trades.Where(trade => trade.Asset == priceEvent.Asset).ToList()) { Application.Current.Dispatcher.Invoke(() => trade.CurrentPrice = priceEvent.Value); } var ev = MakeEvent("PRICE", "PRICE", priceEvent.Asset, priceEvent.Value); this.Notify(ev); }); _tradeEventService = SignalRServiceBuilder <TradeEvent, TradeEventRequest> .Create() .Build(new TradeEventRequest((p) => true), (opts) => { opts.AccessTokenProvider = () => Task.FromResult(_userToken.Digest); }); _tradeEventService .Connect(Scheduler.Default, 500) .Subscribe((tradeEvent) => { Application.Current.Dispatcher.Invoke(() => { var trade = Trades.FirstOrDefault(t => t.Id == tradeEvent.TradeId); if (null == trade) { return; } trade.Status = tradeEvent.Status; }); this.Notify(MakeEvent("TRADE", _tradeEventService.Current.Endpoint, tradeEvent.TradeId, tradeEvent.Status)); }); Trades = new ObservableCollection <TradeViewModel>(); MakeTrade = new Command(async() => { var asset = TradeServiceReferential.Assets.Random(); var counterparty = TradeServiceReferential.Counterparties.Random(); var rand = new Random(); var request = new TradeCreationRequest() { Counterparty = counterparty, Asset = asset.Name, Price = asset.Price, Volume = rand.Next(1, 50), Way = TradeWay.Buy }; var tradeEvent = await _tradeService.CreateTrade(request); var trade = await _tradeService.GetTradeById(tradeEvent.TradeId); Application.Current.Dispatcher.Invoke(() => Trades.Add(new TradeViewModel(trade))); }); Application.Current.Dispatcher.Invoke(async() => { var trades = await _tradeService.GetAllTrades(); foreach (var trade in trades) { var vm = new TradeViewModel(trade); Trades.Add(vm); } }); }