public virtual void OnMarketDataRequest(TWSServerClientHandler client, int reqId, IBContract contract) { if (MarketDataRequest != null) { MarketDataRequest(this, new TWSMarketDataRequestEventArgs(client, reqId, contract)); } }
public virtual void OnTcpClientConnect(IAsyncResult asyn) { TcpClientConnected?.Invoke(this, new TWSTcpClientConnectedEventArgs(this, null)); try { // Here we complete/end the BeginAccept() asynchronous call // by calling EndAccept() - which returns the reference to // a new Socket object var tc = _listener.EndAcceptTcpClient(asyn); _clientCount++; //var s = new BufferedReadStream(tc.GetStream(), DEFAULT_BUFFER_SIZE); var s = tc.GetStream(); var connection = new TWSServerClientHandler(this, s); lock (_clients) { _clients.Add(connection); } connection.Start(); // Since the main Socket is now free, it can go back and wait for // other clients who are attempting to connect _listener.BeginAcceptTcpClient(_connectCallback, null); } catch (ObjectDisposedException) { Debugger.Log(0, "1", "\n OnClientConnection: Socket has been closed\n"); } catch (SocketException se) { OnError(new TWSError(TWSErrors.NO_VALID_CODE, se.Message)); } }
public virtual void OnLogin(TWSServerClientHandler clientState, TWSClientInfo clientInfo, TWSClientId clientId) { if (Login != null) { Login(this, new TWSServerLoginEventArgs(clientState)); } }
public virtual void OnMarketDepthCancel(TWSServerClientHandler client, int reqId, IBContract contract) { if (MarketDataCancel != null) { MarketDataCancel(this, new TWSMarketDataCancelEventArgs(client, reqId, contract)); } }
public virtual void OnMarketDepthRequest(TWSServerClientHandler clientState, int reqId, IBContract contract, int numRows) { if (MarketDepthRequest != null) { MarketDepthRequest(this, new TWSMarketDepthRequestEventArgs(clientState, reqId, contract, numRows)); } }
public TWSServerErrorEventArgs(TWSServerClientHandler clientState, TWSError error) : base(clientState) { Error = error; }
public virtual void OnLogin(TWSServerClientHandler clientState, TWSClientInfo clientInfo, TWSClientId clientId) { if (Login != null) Login(this, new TWSServerLoginEventArgs(clientState)); }
public virtual void OnMarketDepthCancel(TWSServerClientHandler client, int reqId, IBContract contract) { if (MarketDataCancel != null) MarketDataCancel(this, new TWSMarketDataCancelEventArgs(client, reqId, contract)); }
public virtual void OnTWSClientConnect(TWSServerClientHandler client, int clientId) {}
public TWSServerEventArgs(TWSServerClientHandler clientState) { ClientState = clientState; Server = clientState.Server; }
public virtual void OnMarketDataCancel(TWSServerClientHandler client, int reqId, IBContract contract) { MarketDataCancel?.Invoke(this, new TWSMarketDataCancelEventArgs(client, reqId, contract)); }
public virtual void OnTWSClientConnect(TWSServerClientHandler client, int clientId) { }
public TWSMarketDepthRequestEventArgs(TWSServerClientHandler clientState, int reqId, IBContract contract, int numRows) : base(clientState, reqId, contract) { numRows = numRows; }
public virtual void OnContractDetailsRequest(TWSServerClientHandler client, IBContract contract) { }
public TWSMarketDataCancelEventArgs(TWSServerClientHandler clientState, int reqId, IBContract contract) : base(clientState) { Contract = contract; ReqId = reqId; }
public virtual void OnLogin(TWSServerClientHandler clientState, TWSClientInfo clientInfo, TWSClientId clientId) { Login?.Invoke(this, new TWSServerLoginEventArgs(clientState)); }
public TWSServerLoginEventArgs(TWSServerClientHandler clientState) : base(clientState) {}
public virtual void OnTcpClientConnect(IAsyncResult asyn) { if (TcpClientConnected != null) TcpClientConnected(this, new TWSTcpClientConnectedEventArgs(this, null)); try { // Here we complete/end the BeginAccept() asynchronous call // by calling EndAccept() - which returns the reference to // a new Socket object TcpClient tc = _listener.EndAcceptTcpClient(asyn); _clientCount++; //var s = new BufferedReadStream(tc.GetStream(), DEFAULT_BUFFER_SIZE); NetworkStream s = tc.GetStream(); var connection = new TWSServerClientHandler(this, s); lock (_clients) { _clients.Add(connection); } connection.Start(); // Since the main Socket is now free, it can go back and wait for // other clients who are attempting to connect _listener.BeginAcceptTcpClient(_connectCallback, null); } catch (ObjectDisposedException) { Debugger.Log(0, "1", "\n OnClientConnection: Socket has been closed\n"); } catch (SocketException se) { OnError(new TWSError(TWSErrors.NO_VALID_CODE, se.Message)); } }
public virtual void OnMarketDataRequest(TWSServerClientHandler client, int reqId, IBContract contract) { if (MarketDataRequest != null) MarketDataRequest(this, new TWSMarketDataRequestEventArgs(client, reqId, contract)); }
public virtual void OnContractDetailsRequest(TWSServerClientHandler client, IBContract contract) {}
public TWSServerLoginEventArgs(TWSServerClientHandler clientState) : base(clientState) { }
public virtual void OnMarketDepthRequest(TWSServerClientHandler clientState, int reqId, IBContract contract, int numRows) { if (MarketDepthRequest != null) MarketDepthRequest(this, new TWSMarketDepthRequestEventArgs(clientState, reqId, contract, numRows)); }
private void Init() { // Create threads to handle the messages _clientThread = new Thread(ProcessClientMessages); _serverThread = new Thread(ProcessServerMessaages); // Create the suspend/resume mutexes, initially lock them _clientMutex = new Mutex(); _serverMutex = new Mutex(); _clientMutex.WaitOne(); _serverMutex.WaitOne(); // Start the running the threads _serverThread.Start(); _clientThread.Start(); // The encoding class controls which thread runs next // by inspecting the stream content _enc = new TWSPlaybackPlayerEncoding(_logStream, _clientMutex, _serverMutex); // The "local" loop-back server provides a "reversed engineered" view into // what API the client was using and how exactly _loopbackServer = new TWSLoopbackServer(_logStream, _enc); _loopbackServer.Login += LoopbackServer_Login; _loopbackServer.MarketDataRequest += LoopbackServer_MarketDataRequest; _loopbackServer.MarketDepthCancel += LoopbackServer_MarketDepthCancel; }