private unsafe void OnMarketSnapshotHandler(MarketDepthSocket socket, ref MarketSnapshotLevel3 marketSnapshot) { _marketSnapshotBuilder.ReBuild(ref marketSnapshot); if (AddMessageToFileLog != null) { StringBuilder log = new StringBuilder($"----- IN MS - {DateTime.Now.ToString("hh:mm:ss.fff")}{Environment.NewLine}"); for (int i = 0; i < MarketSnapshotLevel3.MaxDepth; i++) { log.AppendLine($" BP={marketSnapshot.BidPrices[i].ToString("F11")} BV={marketSnapshot.BidVolumes[i].ToString("F11")}"); log.AppendLine($" SP={marketSnapshot.AskPrices[i].ToString("F11")} SV={marketSnapshot.AskVolumes[i].ToString("F11")}{Environment.NewLine}"); } log.AppendLine($"----- OUT MS"); AddMessageToFileLog?.Invoke(log.ToString()); } }
public void Run(IPAddress serverAddress, int serverPort, ref CancellationTokenSource cancellationTokenSource, ref ManualResetEventSlim enviromentExitWait) { _enviromentExitWait = enviromentExitWait; _cancellationTokenSource = cancellationTokenSource; _marketSnapshotBuilder = new MarketSnapshotBuilder(); var socket = new MarketDepthSocket(); _marketDepthSocket = socket; socket.OnError += OnErrorHandler; socket.OnDisconnected += OnDisconnectedHandler; socket.OnConnected += OnConnectedHandler; socket.OnException += OnExceptionHandler; socket.OnMarketChange += OnMarketChangeHandler; socket.OnMarketSnapshotLevel3 += OnMarketSnapshotHandler; void RunSocket() { try { socket.Connect(new IPEndPoint(serverAddress.MapToIPv4(), serverPort)); socket.WaitResponses(_cancellationTokenSource.Token); } catch { try { socket.Dispose(); } catch { } } finally { Dispose(); } } Task.Factory.StartNew( () => RunSocket(), TaskCreationOptions.LongRunning); }
private void OnMarketChangeHandler(MarketDepthSocket marketDepthSocket, MarketChange marketChange) { _marketSnapshotBuilder.Build(ref marketChange); Interlocked.Increment(ref _countOfDimensions); if (AddMessageToFileLog != null) { string marketChangeType = "??"; switch (marketChange.MarketChangeType) { case MarketChangeTypeCode.AskPriceByAddedOrder: marketChangeType = "AA"; break; case MarketChangeTypeCode.AskPriceByCanceledOrder: marketChangeType = "AC"; break; case MarketChangeTypeCode.AskPriceByExecutedOrder: marketChangeType = "AE"; break; case MarketChangeTypeCode.BidPriceByAddedOrder: marketChangeType = "BA"; break; case MarketChangeTypeCode.BidPriceByCanceledOrder: marketChangeType = "BC"; break; case MarketChangeTypeCode.BidPriceByExecutedOrder: marketChangeType = "BE"; break; case MarketChangeTypeCode.BidVolumeByAddedOrder: case MarketChangeTypeCode.BuyingVolumeByAddedOrder: marketChangeType = "VABuy"; break; case MarketChangeTypeCode.BidVolumeByCanceledOrder: case MarketChangeTypeCode.BuyingVolumeByCanceledOrder: marketChangeType = "VCB"; break; case MarketChangeTypeCode.BidVolumeByExecutedOrder: marketChangeType = "VEB"; break; case MarketChangeTypeCode.BuyingVolumeInfoAdded: marketChangeType = "IVB"; break; case MarketChangeTypeCode.AskVolumeByAddedOrder: case MarketChangeTypeCode.SellingVolumeByAddedOrder: marketChangeType = "VAS"; break; case MarketChangeTypeCode.AskVolumeByCanceledOrder: case MarketChangeTypeCode.SellingVolumeByCanceledOrder: marketChangeType = "VCS"; break; case MarketChangeTypeCode.AskVolumeByExecutedOrder: marketChangeType = "VEA"; break; case MarketChangeTypeCode.SellingVolumeInfoAdded: marketChangeType = "IVS"; break; } AddMessageToFileLog?.Invoke($"{DateTime.Now.ToString("mm:ss.fff")} P={marketChange.Price.ToString("F11")} V={marketChange.Volume.ToString("F11")} {marketChangeType}{Environment.NewLine}"); } }