// ГЛАВНЫЙ ЦИКЛ public void Run() { while (!m_stop) { try { // создаем соединение с роутером connect.Connect(); try { while (!m_stop) { try { if (m_streamAggregates.State == TDataStreamState.DS_STATE_ERROR || m_streamAggregates.State == TDataStreamState.DS_STATE_CLOSE) { if (m_streamAggregates.State == TDataStreamState.DS_STATE_ERROR) { m_streamAggregates.Close(); } // открываем поток репликации m_streamAggregates.TableSet.set_rev("orders_aggr", curr_rev + 1); m_streamAggregates.Open(connect); } if (m_streamTrades.State == TDataStreamState.DS_STATE_ERROR || m_streamTrades.State == TDataStreamState.DS_STATE_CLOSE) { if (m_streamTrades.State == TDataStreamState.DS_STATE_ERROR) { m_streamTrades.Close(); } // открываем поток репликации m_streamTrades.TableSet.set_rev("deal", curr_rev_deal + 1); m_streamTrades.Open(connect); } } catch (System.Runtime.InteropServices.COMException e) { LogWriteLine("Exception {0} {1:X}", e.Message, e.ErrorCode); } uint cookie; // обрабатываем пришедшее сообщение. Обработка идет в интерфейсах обратного вызова connect.ProcessMessage(out cookie, 100); } } catch (System.Runtime.InteropServices.COMException e) { LogWriteLine("Exception {0} {1:X}", e.Message, e.ErrorCode); } if (m_streamAggregates.State != TDataStreamState.DS_STATE_CLOSE) { try { m_streamAggregates.Close(); } catch (System.Runtime.InteropServices.COMException e) { LogWriteLine("Exception {0} {1:X}", e.Message, e.ErrorCode); } } if (m_streamTrades.State != TDataStreamState.DS_STATE_CLOSE) { try { m_streamTrades.Close(); } catch (System.Runtime.InteropServices.COMException e) { LogWriteLine("Exception {0} {1:X}", e.Message, e.ErrorCode); } } connect.Disconnect(); } catch (System.Runtime.InteropServices.COMException e) { LogWriteLine("Exception {0} {1:X}", e.Message, e.ErrorCode); } catch (System.Exception e) { LogWriteLine("System Exception {0} {1}", e.Message, e.Source); } } }