Advertisement
Hulkstance

Untitled

Sep 1st, 2022
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.97 KB | None | 0 0
  1. public interface IOrderStatePublisher : IActor
  2. {
  3. }
  4.  
  5. public class OrderStatePublisher : IOrderStatePublisher
  6. {
  7.     private readonly IConnectionMultiplexer _redis;
  8.     private readonly string _publishChannel;
  9.  
  10.     public OrderStatePublisher(
  11.         IConnectionMultiplexer redis,
  12.         RedisConfiguration redisConfig)
  13.     {
  14.         _redis = redis;
  15.         _publishChannel = redisConfig.Channels.Updates;
  16.     }
  17.  
  18.     public async Task ReceiveAsync(IContext ctx)
  19.     {
  20.         switch (ctx.Message)
  21.         {
  22.             case OrderState state:
  23.                 await _redis.GetSubscriber().PublishAsync(
  24.                     _publishChannel,
  25.                     JsonSerializer.Serialize(ToWire(state)));
  26.                 break;
  27.  
  28.             case (OrderState state, string msg):
  29.                 await _redis.GetSubscriber().PublishAsync(
  30.                     _publishChannel,
  31.                     JsonSerializer.Serialize(ToWire(state, msg)));
  32.                 break;
  33.         }
  34.     }
  35.  
  36.     private WireOrderState ToWire(OrderState state, string? msg = null)
  37.     {
  38.         return new WireOrderState(
  39.             state.Id.ToString(),
  40.             state.ExchangeId ?? string.Empty,
  41.             state.Status.ToString(),
  42.             state.Exchange.ToString(),
  43.             state.Account,
  44.             state.Side.ToString(),
  45.             state.Symbol,
  46.             state.Quantity,
  47.             state.Fills,
  48.             state.ExpirationTimestamp,
  49.             state.CreatedTimestamp,
  50.             state.LastUpdateTimestamp,
  51.             msg ?? string.Empty);
  52.     }
  53.  
  54.     private record WireOrderState(
  55.         string Id,
  56.         string? ExchangeId,
  57.         string Status,
  58.         string Exchange,
  59.         string Account,
  60.         string Side,
  61.         string Symbol,
  62.         decimal Quantity,
  63.         List<Fill> Fills,
  64.         DateTimeOffset? ExpirationTimestamp,
  65.         DateTimeOffset CreatedTimestamp,
  66.         DateTimeOffset LastUpdateTimestamp,
  67.         string Message);
  68. }
  69.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement