private bool OnProcessResponse(IBSocket socket) { var str = socket.ReadStr(false); if (str.IsEmpty()) { socket.AddErrorLog(LocalizedStrings.Str2524); return false; } var message = (ResponseMessages)str.To<int>(); socket.AddDebugLog("Msg: {0}", message); if (message == ResponseMessages.Error) return false; var version = (ServerVersions)socket.ReadInt(); switch (message) { case ResponseMessages.CurrentTime: { // http://www.interactivebrokers.com/en/software/api/apiguide/java/currenttime.htm var time = socket.ReadLongDateTime(); OnProcessTimeShift(TimeHelper.NowWithOffset - time); break; } case ResponseMessages.ErrorMessage: { if (version < ServerVersions.V2) { OnProcessMarketDataError(socket.ReadStr()); } else { var id = socket.ReadInt(); var code = socket.ReadInt(); var msg = socket.ReadStr(); socket.AddInfoLog(() => msg); if (id == -1) break; switch ((NotifyCodes)code) { case NotifyCodes.OrderCancelled: { OnProcessOrderCancelled(id); break; } case NotifyCodes.OrderCannotTransmit: case NotifyCodes.OrderCannotTransmitId: case NotifyCodes.OrderCannotTransmitIncomplete: case NotifyCodes.OrderDuplicateId: case NotifyCodes.OrderFilled: case NotifyCodes.OrderNotMatchPrev: case NotifyCodes.OrderPriceOutOfRange: case NotifyCodes.OrderSubmitFailed: case NotifyCodes.OrderVolumeTooSmall: case NotifyCodes.Rejected: { OnProcessOrderError(id, msg); break; } case NotifyCodes.SecurityNoDefinition: OnProcessSecurityLookupNoFound(id); break; default: OnProcessMarketDataError(LocalizedStrings.Str2525Params.Put(msg, id, code)); break; } } break; } case ResponseMessages.VerifyMessageApi: { /*int version =*/ socket.ReadInt(); /*var apiData = */ socket.ReadStr(); //eWrapper().verifyMessageAPI(apiData); break; } case ResponseMessages.VerifyCompleted: { /*int version =*/ socket.ReadInt(); var isSuccessfulStr = socket.ReadStr(); var isSuccessful = "true".CompareIgnoreCase(isSuccessfulStr); /*var errorText = */ socket.ReadStr(); if (isSuccessful) { throw new NotSupportedException(); //m_parent.startAPI(); } //eWrapper().verifyCompleted(isSuccessful, errorText); break; } case ResponseMessages.DisplayGroupList: { /*int version =*/ socket.ReadInt(); /*var reqId = */ socket.ReadInt(); /*var groups = */ socket.ReadStr(); //eWrapper().displayGroupList(reqId, groups); break; } case ResponseMessages.DisplayGroupUpdated: { /*int version =*/ socket.ReadInt(); /*var reqId = */ socket.ReadInt(); /*var contractInfo = */ socket.ReadStr(); //eWrapper().displayGroupUpdated(reqId, contractInfo); break; } default: { if (!message.IsDefined()) return false; var handled = ProcessTransactionResponse(socket, message, version); if (!handled) handled = ProcessMarketDataResponse(socket, message, version); if (!handled) throw new InvalidOperationException(LocalizedStrings.Str1622Params.Put(message)); break; } } return true; }