@@ -205,7 +205,7 @@ protected internal override async Task<IEnumerable<ExchangeMarket>> OnGetMarketS
205
205
206
206
protected override async Task < IEnumerable < string > > OnGetMarketSymbolsAsync ( )
207
207
{
208
- return ( await GetMarketSymbolsMetadataAsync ( ) ) . Select ( market => market . MarketSymbol ) ;
208
+ return ( await GetMarketSymbolsMetadataAsync ( ) ) . Where ( market => market . IsActive ) . Select ( market => market . MarketSymbol ) ;
209
209
}
210
210
211
211
protected override async Task < IReadOnlyDictionary < string , ExchangeCurrency > > OnGetCurrenciesAsync ( )
@@ -436,6 +436,99 @@ private ExchangeTrade ParseTradeWebSocket(JToken token)
436
436
return token . ParseTradeCoinbase ( "size" , "price" , "side" , "time" , TimestampType . Iso8601 , "trade_id" ) ;
437
437
}
438
438
439
+ protected override async Task < IWebSocket > OnUserDataWebSocketAsync ( Action < object > callback )
440
+ {
441
+ return await ConnectPublicWebSocketAsync ( "/" , async ( _socket , msg ) =>
442
+ {
443
+ var token = msg . ToStringFromUTF8 ( ) ;
444
+ var response = JsonConvert . DeserializeObject < BaseMessage > ( token ) ;
445
+ switch ( response . Type )
446
+ {
447
+ case ResponseType . Subscriptions :
448
+ var subscription = JsonConvert . DeserializeObject < Subscription > ( token ) ;
449
+ if ( subscription . Channels == null || ! subscription . Channels . Any ( ) )
450
+ {
451
+ Trace . WriteLine ( $ "{ nameof ( OnUserDataWebSocketAsync ) } () no channels subscribed") ;
452
+ }
453
+ else
454
+ {
455
+ Trace . WriteLine ( $ "{ nameof ( OnUserDataWebSocketAsync ) } () subscribed to " +
456
+ $ "{ string . Join ( "," , subscription . Channels . Select ( c => c . ToString ( ) ) ) } ") ;
457
+ }
458
+ break ;
459
+ case ResponseType . Ticker :
460
+ throw new NotImplementedException ( $ "Not expecting type { response . Type } in { nameof ( OnUserDataWebSocketAsync ) } ()") ;
461
+ case ResponseType . Snapshot :
462
+ throw new NotImplementedException ( $ "Not expecting type { response . Type } in { nameof ( OnUserDataWebSocketAsync ) } ()") ;
463
+ case ResponseType . L2Update :
464
+ throw new NotImplementedException ( $ "Not expecting type { response . Type } in { nameof ( OnUserDataWebSocketAsync ) } ()") ;
465
+ case ResponseType . Heartbeat :
466
+ var heartbeat = JsonConvert . DeserializeObject < Heartbeat > ( token ) ;
467
+ Trace . WriteLine ( $ "{ nameof ( OnUserDataWebSocketAsync ) } () heartbeat received { heartbeat } ") ;
468
+ break ;
469
+ case ResponseType . Received :
470
+ var received = JsonConvert . DeserializeObject < Received > ( token ) ;
471
+ callback ( received . ExchangeOrderResult ) ;
472
+ break ;
473
+ case ResponseType . Open :
474
+ var open = JsonConvert . DeserializeObject < Open > ( token ) ;
475
+ callback ( open . ExchangeOrderResult ) ;
476
+ break ;
477
+ case ResponseType . Done :
478
+ var done = JsonConvert . DeserializeObject < Done > ( token ) ;
479
+ callback ( done . ExchangeOrderResult ) ;
480
+ break ;
481
+ case ResponseType . Match :
482
+ var match = JsonConvert . DeserializeObject < Match > ( token ) ;
483
+ callback ( match . ExchangeOrderResult ) ;
484
+ break ;
485
+ case ResponseType . LastMatch :
486
+ //var lastMatch = JsonConvert.DeserializeObject<LastMatch>(token);
487
+ throw new NotImplementedException ( $ "Not expecting type { response . Type } in { nameof ( OnUserDataWebSocketAsync ) } ()") ;
488
+ case ResponseType . Error :
489
+ var error = JsonConvert . DeserializeObject < Error > ( token ) ;
490
+ throw new APIException ( $ "{ error . Reason } : { error . Message } ") ;
491
+ case ResponseType . Change :
492
+ var change = JsonConvert . DeserializeObject < Change > ( token ) ;
493
+ callback ( change . ExchangeOrderResult ) ;
494
+ break ;
495
+ case ResponseType . Activate :
496
+ var activate = JsonConvert . DeserializeObject < Activate > ( token ) ;
497
+ callback ( activate . ExchangeOrderResult ) ;
498
+ break ;
499
+ case ResponseType . Status :
500
+ //var status = JsonConvert.DeserializeObject<Status>(token);
501
+ throw new NotImplementedException ( $ "Not expecting type { response . Type } in { nameof ( OnUserDataWebSocketAsync ) } ()") ;
502
+ default :
503
+ throw new NotImplementedException ( $ "Not expecting type { response . Type } in { nameof ( OnUserDataWebSocketAsync ) } ()") ;
504
+ }
505
+ } , async ( _socket ) =>
506
+ {
507
+ var marketSymbols = ( await GetMarketSymbolsAsync ( ) ) . ToArray ( ) ;
508
+ var nonce = await GetNoncePayloadAsync ( ) ;
509
+ string timestamp = nonce [ "nonce" ] . ToStringInvariant ( ) ;
510
+ byte [ ] secret = CryptoUtility . ToBytesBase64Decode ( PrivateApiKey ) ;
511
+ string toHash = timestamp + "GET" + "/users/self/verify" ;
512
+ var subscribeRequest = new
513
+ {
514
+ type = "subscribe" ,
515
+ channels = new object [ ]
516
+ {
517
+ new
518
+ {
519
+ name = "user" ,
520
+ product_ids = marketSymbols ,
521
+ }
522
+ } ,
523
+ signature = CryptoUtility . SHA256SignBase64 ( toHash , secret ) , // signature base 64 string
524
+ key = PublicApiKey . ToUnsecureString ( ) ,
525
+ passphrase = CryptoUtility . ToUnsecureString ( Passphrase ) ,
526
+ timestamp = timestamp
527
+ } ;
528
+ await _socket . SendMessageAsync ( subscribeRequest ) ;
529
+ } ) ;
530
+ }
531
+
439
532
protected override async Task OnGetHistoricalTradesAsync ( Func < IEnumerable < ExchangeTrade > , bool > callback , string marketSymbol , DateTime ? startDate = null , DateTime ? endDate = null , int ? limit = null )
440
533
{
441
534
/*
@@ -627,7 +720,7 @@ protected override async Task<ExchangeOrderResult> OnGetOrderDetailsAsync(string
627
720
protected override async Task < IEnumerable < ExchangeOrderResult > > OnGetOpenOrderDetailsAsync ( string marketSymbol = null )
628
721
{
629
722
List < ExchangeOrderResult > orders = new List < ExchangeOrderResult > ( ) ;
630
- JArray array = await MakeJsonRequestAsync < JArray > ( "orders?status=open, pending, active" + ( string . IsNullOrWhiteSpace ( marketSymbol ) ? string . Empty : "&product_id=" + marketSymbol ) , null , await GetNoncePayloadAsync ( ) , "GET" ) ;
723
+ JArray array = await MakeJsonRequestAsync < JArray > ( "orders?status=open&status= pending&status= active" + ( string . IsNullOrWhiteSpace ( marketSymbol ) ? string . Empty : "&product_id=" + marketSymbol ) , null , await GetNoncePayloadAsync ( ) , "GET" ) ;
631
724
foreach ( JToken token in array )
632
725
{
633
726
orders . Add ( ParseOrder ( token ) ) ;
0 commit comments