public void HandleMessage(IBMessage message) //This is the "UI entry point" and as such will handle the UI update by another thread { if (this.InvokeRequired) { MessageHandlerDelegate callback = new MessageHandlerDelegate(HandleMessage); this.Invoke(callback, new object[] { message }); } else { UpdateUI(message); } }
private void UpdateUI(IBMessage message) { // http://nlog-project.org/download/ A logging lib ShowMessageOnPanel("(UpdateUI) Message type: " + message.Type.ToString()); switch (message.Type) { case MessageType.ConnectionStatus: { ConnectionStatusMessage statusMessage = (ConnectionStatusMessage)message; if (statusMessage.IsConnected) { status_CT.Text = "Connected! Your client Id: " + ibClient.ClientId; button1.Text = "Disconnect"; } else { status_CT.Text = "Disconnected..."; button1.Text = "Connect"; } break; } case MessageType.Error: { ErrorMessage error = (ErrorMessage)message; ShowMessageOnPanel("Request " + error.RequestId + ", Code: " + error.ErrorCode + " - " + error.Message); HandleErrorMessage(error); break; } case MessageType.TickOptionComputation: case MessageType.TickPrice: case MessageType.TickSize: { //HandleTickMessage((MarketDataMessage)message); break; } case MessageType.MarketDepth: case MessageType.MarketDepthL2: { //deepBookManager.UpdateUI(message); break; } case MessageType.HistoricalData: case MessageType.HistoricalDataEnd: { //historicalDataManager.UpdateUI(message); break; } case MessageType.RealTimeBars: { //realTimeBarManager.UpdateUI(message); break; } case MessageType.ScannerData: case MessageType.ScannerParameters: { //scannerManager.UpdateUI(message); break; } case MessageType.OpenOrder: case MessageType.OpenOrderEnd: case MessageType.OrderStatus: case MessageType.ExecutionData: case MessageType.CommissionsReport: { //orderManager.UpdateUI(message); break; } case MessageType.ManagedAccounts: { //orderManager.ManagedAccounts = ((ManagedAccountsMessage)message).ManagedAccounts; //accountManager.ManagedAccounts = ((ManagedAccountsMessage)message).ManagedAccounts; //exerciseAccount.Items.AddRange(((ManagedAccountsMessage)message).ManagedAccounts.ToArray()); break; } case MessageType.AccountSummaryEnd: { //accSummaryRequest.Text = "Request"; //accountManager.UpdateUI(message); break; } case MessageType.AccountDownloadEnd: { break; } case MessageType.AccountUpdateTime: { //accUpdatesLastUpdateValue.Text = ((UpdateAccountTimeMessage)message).Timestamp; break; } case MessageType.PortfolioValue: { //accountManager.UpdateUI(message); //if (exerciseAccount.SelectedItem != null) // optionsManager.HandlePosition((UpdatePortfolioMessage)message); break; } case MessageType.AccountSummary: case MessageType.AccountValue: case MessageType.Position: case MessageType.PositionEnd: { //accountManager.UpdateUI(message); break; } case MessageType.ContractDataEnd: { //searchContractDetails.Enabled = true; contractManager.UpdateUI(message); break; } case MessageType.ContractData: { HandleContractDataMessage((ContractDetailsMessage)message); // *********************** var z = (ContractDetailsMessage)message; ShowMessageOnPanel("SYMBOL: " + z.ContractDetails.Summary.Symbol + " successfully found at: " + z.ContractDetails.Summary.PrimaryExch + " exchange"); break; } case MessageType.FundamentalData: { //fundamentalsQueryButton.Enabled = true; contractManager.UpdateUI(message); break; } case MessageType.ReceiveFA: { //advisorManager.UpdateUI((AdvisorDataMessage)message); break; } case MessageType.PositionMulti: case MessageType.AccountUpdateMulti: case MessageType.PositionMultiEnd: case MessageType.AccountUpdateMultiEnd: { //acctPosMultiManager.UpdateUI(message); break; } case MessageType.SecurityDefinitionOptionParameter: case MessageType.SecurityDefinitionOptionParameterEnd: { //optionsManager.UpdateUI(message); break; } case MessageType.SoftDollarTiers: { //orderManager.UpdateUI(message); break; } default: { HandleMessage(new ErrorMessage(-1, -1, message.ToString())); // Default message break; } } }