/// <summary> /// ctor /// </summary> /// <param name="session"></param> public ResponseListener(O2GSession session) { mSession = session; mRequestID = string.Empty; mResponse = null; mOrderMonitor = null; mSyncResponseEvent = new EventWaitHandle(false, EventResetMode.AutoReset); }
private void PrintMonitorResult(OrderMonitor orderMonitor) { if (orderMonitor != null) { OrderMonitor.ExecutionResult result = orderMonitor.Result; ReadOnlyCollection <O2GTradeRow> trades; ReadOnlyCollection <O2GClosedTradeRow> closedTrades; O2GOrderRow order = orderMonitor.Order; String orderID = order.OrderID; trades = orderMonitor.Trades; closedTrades = orderMonitor.ClosedTrades; switch (result) { case OrderMonitor.ExecutionResult.Canceled: if (trades.Count > 0) { PrintTrades(trades, orderID); PrintClosedTrades(closedTrades, orderID); Console.WriteLine("A part of the order has been canceled. Amount = {0}", orderMonitor.RejectAmount); } else { Console.WriteLine("The order: OrderID = {0} has been canceled.", orderID); Console.WriteLine("The cancel amount = {0}.", orderMonitor.RejectAmount); } break; case OrderMonitor.ExecutionResult.FullyRejected: Console.WriteLine("The order has been rejected. OrderID = {0}", orderID); Console.WriteLine("The rejected amount = {0}", orderMonitor.RejectAmount); Console.WriteLine("Rejection cause: {0}", orderMonitor.RejectMessage); break; case OrderMonitor.ExecutionResult.PartialRejected: PrintTrades(trades, orderID); PrintClosedTrades(closedTrades, orderID); Console.WriteLine("A part of the order has been rejected. Amount = {0}", orderMonitor.RejectAmount); Console.WriteLine("Rejection cause: {0} ", orderMonitor.RejectMessage); break; case OrderMonitor.ExecutionResult.Executed: PrintTrades(trades, orderID); PrintClosedTrades(closedTrades, orderID); break; } } }
private StartupWorkflow( bool triggerSocketMonitor, bool triggerOrderMonitor, bool triggerAccountMonitor, bool triggerCandleMonitor, bool triggerStrategyMonitor, bool triggerOverlayMonitor) : this() { // See this link for very detailed explanation of how TaskCompletionSource can block // https://blogs.msdn.microsoft.com/seteplia/2018/10/01/the-danger-of-taskcompletionsourcet-class/ if (triggerSocketMonitor) { SocketMonitor.SetResult(true); } if (triggerOrderMonitor) { OrderMonitor.SetResult(true); } if (triggerAccountMonitor) { AccountMonitor.SetResult(true); } if (triggerCandleMonitor) { CandleMonitor.SetResult(true); } if (triggerStrategyMonitor) { StrategyMonitor.SetResult(true); } if (triggerOverlayMonitor) { OverlayMonitor.SetResult(true); } }
public void onTablesUpdates(O2GResponse data) { O2GResponseReaderFactory factory = mSession.getResponseReaderFactory(); if (factory != null) { O2GTablesUpdatesReader reader = factory.createTablesUpdatesReader(data); for (int ii = 0; ii < reader.Count; ii++) { switch (reader.getUpdateTable(ii)) { case O2GTableType.Accounts: O2GAccountRow account = reader.getAccountRow(ii); //Show balance updates Console.WriteLine("Balance: {0}", account.Balance); break; case O2GTableType.Orders: O2GOrderRow order = reader.getOrderRow(ii); switch (reader.getUpdateType(ii)) { case O2GTableUpdateType.Insert: if ((OrderMonitor.IsClosingOrder(order) || OrderMonitor.IsOpeningOrder(order)) && mOrderMonitor == null) { Console.WriteLine("The order has been added. Order ID: {0}, Rate: {1}, Time In Force: {2}", order.OrderID, order.Rate, order.TimeInForce); mOrderMonitor = new OrderMonitor(order); } break; case O2GTableUpdateType.Delete: if (mOrderMonitor != null) { Console.WriteLine("The order has been deleted. Order ID: {0}", order.OrderID); mOrderMonitor.OnOrderDeleted(order); while (mOrderMonitor.IsOrderCompleted != true) { Thread.Sleep(100); } PrintResult(); mSyncResponseEvent.Set(); } break; } break; case O2GTableType.Trades: O2GTradeRow trade = reader.getTradeRow(ii); if (reader.getUpdateType(ii) == O2GTableUpdateType.Insert) { if (mOrderMonitor != null) { mOrderMonitor.OnTradeAdded(trade); if (mOrderMonitor.IsOrderCompleted) { PrintResult(); mSyncResponseEvent.Set(); } } } break; case O2GTableType.ClosedTrades: O2GClosedTradeRow closedTrade = reader.getClosedTradeRow(ii); if (reader.getUpdateType(ii) == O2GTableUpdateType.Insert) { if (mOrderMonitor != null) { mOrderMonitor.OnClosedTradeAdded(closedTrade); if (mOrderMonitor.IsOrderCompleted) { PrintResult(); mSyncResponseEvent.Set(); } } } break; case O2GTableType.Messages: O2GMessageRow message = reader.getMessageRow(ii); if (reader.getUpdateType(ii) == O2GTableUpdateType.Insert) { if (mOrderMonitor != null) { mOrderMonitor.OnMessageAdded(message); if (mOrderMonitor.IsOrderCompleted) { PrintResult(); mSyncResponseEvent.Set(); } } } break; } } } }
public void onAdded(string sRowID, O2GRow rowData) { O2GTableType type = rowData.TableType; switch (type) { case O2GTableType.Orders: O2GOrderRow orderRow = (O2GOrderRow)rowData; if (mRequestID.Equals(orderRow.RequestID)) { if ((OrderMonitor.IsClosingOrder(orderRow) || OrderMonitor.IsOpeningOrder(orderRow)) && mOrderMonitor == null) { Console.WriteLine("The order has been added. Order ID: {0}, Rate: {1}, Time In Force: {2}", orderRow.OrderID, orderRow.Rate, orderRow.TimeInForce); mOrderMonitor = new OrderMonitor(orderRow); } } break; case O2GTableType.Trades: O2GTradeRow tradeRow = (O2GTradeRow)rowData; if (mOrderMonitor != null) { mOrderMonitor.OnTradeAdded(tradeRow); if (mOrderMonitor.IsOrderCompleted) { PrintResult(); mResponseListener.StopWaiting(); } } break; case O2GTableType.ClosedTrades: O2GClosedTradeRow closedTradeRow = (O2GClosedTradeRow)rowData; if (mOrderMonitor != null) { mOrderMonitor.OnClosedTradeAdded(closedTradeRow); if (mOrderMonitor.IsOrderCompleted) { PrintResult(); mResponseListener.StopWaiting(); } } break; case O2GTableType.Messages: O2GMessageRow messageRow = (O2GMessageRow)rowData; if (mOrderMonitor != null) { mOrderMonitor.OnMessageAdded(messageRow); if (mOrderMonitor.IsOrderCompleted) { PrintResult(); mResponseListener.StopWaiting(); } } break; } }
/// <summary> /// ctor /// </summary> /// <param name="responseListener"></param> public TableListener(ResponseListener responseListener) { mOrderMonitor = null; mResponseListener = responseListener; mRequestID = string.Empty; }