Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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);
                }
            });
        }