public int Cancel(EntrustCommandItem cmdItem, List <EntrustSecurityItem> entrustItems) { int ret = -1; UFXBasketWithdrawRequest request = new UFXBasketWithdrawRequest { BatchNo = cmdItem.BatchNo, }; List <UFXBasketWithdrawRequest> requests = new List <UFXBasketWithdrawRequest>(); requests.Add(request); Callbacker callbacker = new Callbacker { Token = new CallerToken { SubmitId = cmdItem.SubmitId, CommandId = cmdItem.CommandId, WaitEvent = new AutoResetEvent(false), }, DataHandler = WithdrawBasketCallback, }; var result = _securityBLL.WithdrawBasket(requests, callbacker); callbacker.Token.WaitEvent.WaitOne(30 * 1000); if (result == Model.ConnectionCode.Success) { ret = 1; } return(ret); }
static void Main(string[] args) { //var callback = new StatusCallback(); //callback.online_callback = () => Console.WriteLine("Callback"); //callback.ext_callback1 = (v, v1, v2, v3, v4) => Console.WriteLine($"ext1 called: {v.ToString()}, v1: {v1.ToString()}, v2: {v2.ToString()}, v3: {v3.ToString()}"); //callback.ext_callback2 = v => Console.WriteLine($"ext2 called: {v.ToString()}"); //callback.ext_callback3 = v => Console.WriteLine($"ext3 called: {v.ToString()}"); //SetCallback(callback); // 查找回调函数数量 var callback = new Callbacker(); callback.c1 = () => Console.WriteLine($"c1"); callback.c2 = () => Console.WriteLine($"c2"); callback.c3 = () => Console.WriteLine($"c3"); callback.c4 = () => Console.WriteLine($"c4"); callback.c5 = () => Console.WriteLine($"c5"); callback.c6 = () => Console.WriteLine($"c6"); callback.c7 = () => Console.WriteLine($"c7"); callback.c8 = () => Console.WriteLine($"c8"); callback.c9 = () => Console.WriteLine($"c9"); callback.c10 = () => Console.WriteLine($"c10"); //callback.c11 = () => Console.WriteLine($"c11"); //callback.c12 = () => Console.WriteLine($"c12"); //callback.c13 = () => Console.WriteLine($"c13"); //callback.c14 = () => Console.WriteLine($"c14"); //callback.c15 = () => Console.WriteLine($"c15"); //callback.c16 = () => Console.WriteLine($"c16"); FindCallback(callback); Console.WriteLine($"End"); Console.ReadLine(); }
public BLLResponse Withdraw(Model.Database.EntrustCommand cmdItem, CallerCallback callerCallback) { BLLResponse bllResponse = new BLLResponse(); UFXBasketWithdrawRequest request = new UFXBasketWithdrawRequest { BatchNo = cmdItem.BatchNo, }; Callbacker callbacker = new Callbacker { Token = new CallerToken { SubmitId = cmdItem.SubmitId, CommandId = cmdItem.CommandId, WaitEvent = new AutoResetEvent(false), Caller = callerCallback, }, DataHandler = WithdrawDataHandler, }; var result = _securityBLL.WithdrawBasket(request, callbacker); if (result == Model.ConnectionCode.Success) { if (callbacker.Token.WaitEvent.WaitOne(_timeOut)) { var errorResponse = callbacker.Token.ErrorResponse as UFXErrorResponse; if (errorResponse != null && T2ErrorHandler.Success(errorResponse.ErrorCode)) { bllResponse.Code = Model.ConnectionCode.Success; bllResponse.Message = "Success Withdraw"; } else { bllResponse.Code = Model.ConnectionCode.FailWithdraw; bllResponse.Message = errorResponse.ErrorMessage; } } else { bllResponse.Code = Model.ConnectionCode.FailTimeoutWithdraw; bllResponse.Message = "Fail to submit the basket withdraw to UFX!"; } } else { bllResponse.Code = Model.ConnectionCode.FailSubmit; bllResponse.Message = "Fail to submit the basket withdraw to UFX!"; } return(bllResponse); }
public void Run() { //var callback = new StatusCallback(); //callback.online_callback = () => Console.WriteLine("Callback"); //callback.ext_callback1 = (v, v1, v2, v3, v4) => Console.WriteLine($"ext1 called: {v.ToString()}, v1: {v1.ToString()}, v2: {v2.ToString()}, v3: {v3.ToString()}"); //callback.ext_callback2 = v => Console.WriteLine($"ext2 called: {v.ToString()}"); //callback.ext_callback3 = v => Console.WriteLine($"ext3 called: {v.ToString()}"); //SetCallback(callback); // 查找回调函数数量 var callback = new Callbacker(); callback.c1 = () => Console.WriteLine($"{DateTime.Now}: Call successded"); callback.c2 = () => Console.WriteLine($"{DateTime.Now}: Call successded"); callback.c3 = () => Console.WriteLine($"{DateTime.Now}: Call successded"); callback.c4 = () => Console.WriteLine($"{DateTime.Now}: Call successded"); var size = Marshal.SizeOf <Callbacker>(); var ptr = Marshal.AllocHGlobal(size); Marshal.StructureToPtr(callback, ptr, true); while (true) { Console.WriteLine("通过指针or结构体调用?1:指针, 2:结构体"); var s = Console.ReadLine(); var i = int.Parse(s); if (i == 1) { // 传递指针 Console.WriteLine("传递指针"); FindCallback(ptr); } else if (i == 2) { // 传递结构体 Console.WriteLine("传递结构体"); FindCallback(callback); } } Console.WriteLine($"End"); Console.ReadLine(); }
public int Query() { int ret = -1; //var portfolio = LoginManager.Instance.GetPortfolio(tradeCommandItem.PortfolioCode); //var stockholder = LoginManager.Instance.GetHolder(tradeCommandItem. var ufxRequests = new List <UFXHoldingRequest>(); var ufxRequest = new UFXHoldingRequest { CombiNo = "30", }; ufxRequests.Add(ufxRequest); Callbacker callbacker = new Callbacker { Token = new CallerToken { SubmitId = 90000, CommandId = 90001, WaitEvent = new AutoResetEvent(false), }, DataHandler = DataHandlerCallback, }; var result = _securityBLL.QueryMultipleHolding(ufxRequests, callbacker); if (result == Model.ConnectionCode.Success) { if (callbacker.Token.WaitEvent.WaitOne(_timeOut)) { var errorResponse = callbacker.Token.ErrorResponse as UFXErrorResponse; if (errorResponse != null && T2ErrorHandler.Success(errorResponse.ErrorCode)) { ret = 1; } } else { ret = -1; } } return(ret); }
public List <EntrustFlowItem> QueryHistory(List <Portfolio> portfolios, DateTime startDate, DateTime endDate, int timeOut, CallerCallback callback) { List <EntrustFlowItem> entrustItems = new List <EntrustFlowItem>(); int intStart = DateUtil.GetIntDate(startDate); int intEnd = DateUtil.GetIntDate(endDate); foreach (var portfolio in portfolios) { List <UFXQueryFuturesHistEntrustRequest> requests = new List <UFXQueryFuturesHistEntrustRequest>(); UFXQueryFuturesHistEntrustRequest request = new UFXQueryFuturesHistEntrustRequest(); request.StartDate = intStart; request.EndDate = intEnd; request.CombiNo = portfolio.PortfolioNo; requests.Add(request); Callbacker callbacker = new Callbacker { Token = new CallerToken { SubmitId = -2, CommandId = -2, InArgs = portfolio, OutArgs = entrustItems, WaitEvent = new AutoResetEvent(false), Caller = callback, }, DataHandler = QueryDataHandler, }; var result = _securityBLL.QueryFuturesEntrustHistory(requests, callbacker); BLLResponse bllResponse = new BLLResponse(); if (result == Model.ConnectionCode.Success) { if (callbacker.Token.WaitEvent.WaitOne(timeOut)) { var errorResponse = callbacker.Token.ErrorResponse as UFXErrorResponse; if (errorResponse != null && T2ErrorHandler.Success(errorResponse.ErrorCode)) { bllResponse.Code = ConnectionCode.Success; bllResponse.Message = "Success Entrust"; } else { bllResponse.Code = ConnectionCode.FailEntrust; bllResponse.Message = "Fail Entrust: " + errorResponse.ErrorMessage; } } else { bllResponse.Code = ConnectionCode.FailEntrust; bllResponse.Message = "Fail Entrust: Timeout"; } } else { bllResponse.Code = result; bllResponse.Message = "Fail to submit in ufx."; } } return(entrustItems); }
public List <DealFlowItem> QueryToday(List <Portfolio> portfolios, int timeOut, CallerCallback callback) { List <DealFlowItem> dealItems = new List <DealFlowItem>(); foreach (var portfolio in portfolios) { List <UFXQueryDealRequest> requests = new List <UFXQueryDealRequest>(); UFXQueryDealRequest request = new UFXQueryDealRequest(); request.AccountCode = portfolio.FundCode; request.CombiNo = portfolio.PortfolioNo; requests.Add(request); Callbacker callbacker = new Callbacker { Token = new CallerToken { SubmitId = -1, CommandId = -1, InArgs = portfolio, OutArgs = dealItems, WaitEvent = new AutoResetEvent(false), Caller = callback, }, DataHandler = QueryDataHandler, }; var result = _securityBLL.QueryDeal(requests, callbacker); BLLResponse bllResponse = new BLLResponse(); if (result == Model.ConnectionCode.Success) { if (callbacker.Token.WaitEvent.WaitOne(timeOut)) { var errorResponse = callbacker.Token.ErrorResponse as UFXErrorResponse; if (errorResponse != null && T2ErrorHandler.Success(errorResponse.ErrorCode)) { bllResponse.Code = ConnectionCode.Success; bllResponse.Message = "Success QueryDeal"; } else { bllResponse.Code = ConnectionCode.FailQueryDeal; bllResponse.Message = "Fail QueryDeal: " + errorResponse.ErrorMessage; } } else { bllResponse.Code = ConnectionCode.FailTimeoutQueryDeal; bllResponse.Message = "Fail QueryDeal: Timeout!"; } } else { bllResponse.Code = result; bllResponse.Message = "Fail to QueryDeal in ufx."; } } return(dealItems); }
public extern static void FindCallback(Callbacker callback);
public BLLResponse Submit(Model.Database.EntrustCommand cmdItem, List <EntrustSecurity> entrustItems, CallerCallback callerCallback) { var cmdEntrustItems = entrustItems.Where(p => p.CommandId == cmdItem.CommandId && p.SubmitId == cmdItem.SubmitId).ToList(); if (cmdEntrustItems == null || cmdEntrustItems.Count == 0) { return(new BLLResponse(ConnectionCode.EmptyEntrustItem, "Empty EntrustCommandItem or EntrustSecurityItem.")); } UpdateUFXSetting(); var tradeCommandItem = _tradeCommandBLL.GetTradeCommand(cmdItem.CommandId); var portfolio = LoginManager.Instance.GetPortfolio(tradeCommandItem.PortfolioCode); //var stockholder = LoginManager.Instance.GetHolder(tradeCommandItem. var ufxRequests = new List <UFXBasketEntrustRequest>(); var futuItem = cmdEntrustItems.Find(p => p.SecuType == Model.SecurityInfo.SecurityType.Futures); foreach (var secuItem in cmdEntrustItems) { UFXBasketEntrustRequest request = new UFXBasketEntrustRequest { StockCode = secuItem.SecuCode, EntrustPrice = secuItem.EntrustPrice, EntrustAmount = secuItem.EntrustAmount, PriceType = EntrustRequestHelper.GetEntrustPriceType(secuItem.EntrustPriceType), ExtSystemId = secuItem.RequestId, ThirdReff = EntrustRequestHelper.GenerateThirdReff(secuItem.CommandId, secuItem.SubmitId, secuItem.RequestId), LimitEntrustRatio = _limitEntrustRatio, FutuLimitEntrustRatio = _futuLimitEntrustRatio, OptLimitEntrustRatio = _optLimitEntrustRatio, }; if (secuItem.SecuType == Model.SecurityInfo.SecurityType.Stock) { request.EntrustDirection = EntrustRequestHelper.GetEntrustDirection(secuItem.EntrustDirection); request.FuturesDirection = string.Empty; } else if (secuItem.SecuType == Model.SecurityInfo.SecurityType.Futures) { request.EntrustDirection = EntrustRequestHelper.GetEntrustDirection(secuItem.EntrustDirection); request.FuturesDirection = EntrustRequestHelper.GetFuturesDirection(secuItem.EntrustDirection); } var secuInfo = SecurityInfoManager.Instance.Get(secuItem.SecuCode, secuItem.SecuType); if (secuInfo != null) { request.MarketNo = EntrustRequestHelper.GetMarketNo(secuInfo.ExchangeCode); } if (tradeCommandItem != null) { request.AccountCode = tradeCommandItem.AccountCode; request.CombiNo = tradeCommandItem.PortfolioCode; } ufxRequests.Add(request); } Callbacker callbacker = new Callbacker { Token = new CallerToken { SubmitId = cmdItem.SubmitId, CommandId = cmdItem.CommandId, Caller = callerCallback, WaitEvent = new AutoResetEvent(false), }, DataHandler = EntrustDataHandler, }; var result = _securityBLL.EntrustBasket(ufxRequests, callbacker); BLLResponse bllResponse = new BLLResponse(); if (result == Model.ConnectionCode.Success) { if (callbacker.Token.WaitEvent.WaitOne(_timeOut)) { var errorResponse = callbacker.Token.ErrorResponse as UFXErrorResponse; if (errorResponse != null && T2ErrorHandler.Success(errorResponse.ErrorCode)) { bllResponse.Code = ConnectionCode.Success; bllResponse.Message = "Success Entrust"; } else { bllResponse.Code = ConnectionCode.FailEntrust; bllResponse.Message = "Fail Entrust: " + errorResponse.ErrorCode + " " + errorResponse.ErrorMessage + " " + errorResponse.MessageDetail; } } else { bllResponse.Code = ConnectionCode.FailTimeoutEntrust; bllResponse.Message = "Timeout to entrust."; } } else { bllResponse.Code = result; bllResponse.Message = "Fail to submit in ufx."; } return(bllResponse); }
//TODO: async to sumbit the command, it can emit the latency. public BLLResponse SubmitAsync(Model.Database.EntrustCommand cmdItem, List <EntrustSecurity> entrustItems, CallerCallback callerCallback, EventWaitHandle waitHandle) { var cmdEntrustItems = entrustItems.Where(p => p.CommandId == cmdItem.CommandId && p.SubmitId == cmdItem.SubmitId).ToList(); if (cmdEntrustItems == null || cmdEntrustItems.Count == 0) { return(new BLLResponse(ConnectionCode.EmptyEntrustItem, "Empty EntrustCommandItem or EntrustSecurityItem.")); } UpdateUFXSetting(); var tradeCommandItem = _tradeCommandBLL.GetTradeCommand(cmdItem.CommandId); var portfolio = LoginManager.Instance.GetPortfolio(tradeCommandItem.PortfolioCode); //var stockholder = LoginManager.Instance.GetHolder(tradeCommandItem. var ufxRequests = new List <UFXBasketEntrustRequest>(); var futuItem = cmdEntrustItems.Find(p => p.SecuType == Model.SecurityInfo.SecurityType.Futures); foreach (var secuItem in cmdEntrustItems) { UFXBasketEntrustRequest request = new UFXBasketEntrustRequest { StockCode = secuItem.SecuCode, EntrustPrice = secuItem.EntrustPrice, EntrustAmount = secuItem.EntrustAmount, PriceType = EntrustRequestHelper.GetEntrustPriceType(secuItem.EntrustPriceType), ExtSystemId = secuItem.RequestId, ThirdReff = EntrustRequestHelper.GenerateThirdReff(secuItem.CommandId, secuItem.SubmitId, secuItem.RequestId), LimitEntrustRatio = _limitEntrustRatio, FutuLimitEntrustRatio = _futuLimitEntrustRatio, OptLimitEntrustRatio = _optLimitEntrustRatio, }; if (secuItem.SecuType == Model.SecurityInfo.SecurityType.Stock) { request.EntrustDirection = EntrustRequestHelper.GetEntrustDirection(secuItem.EntrustDirection); request.FuturesDirection = string.Empty; } else if (secuItem.SecuType == Model.SecurityInfo.SecurityType.Futures) { request.EntrustDirection = EntrustRequestHelper.GetEntrustDirection(secuItem.EntrustDirection); request.FuturesDirection = EntrustRequestHelper.GetFuturesDirection(secuItem.EntrustDirection); } var secuInfo = SecurityInfoManager.Instance.Get(secuItem.SecuCode, secuItem.SecuType); if (secuInfo != null) { request.MarketNo = EntrustRequestHelper.GetMarketNo(secuInfo.ExchangeCode); } if (tradeCommandItem != null) { request.AccountCode = tradeCommandItem.AccountCode; request.CombiNo = tradeCommandItem.PortfolioCode; } ufxRequests.Add(request); } Callbacker callbacker = new Callbacker { Token = new CallerToken { SubmitId = cmdItem.SubmitId, CommandId = cmdItem.CommandId, Caller = callerCallback, WaitEvent = waitHandle, }, DataHandler = EntrustDataHandler, }; var result = _securityBLL.EntrustBasket(ufxRequests, callbacker); return(new BLLResponse(result, "Finish to entrust.")); }
/// <summary> /// Withdraw the entrusted securites. /// NOTE: the entrust_no is necessary. /// </summary> /// <param name="submitId">The entrustsecurity SubmitId.</param> /// <param name="commandId">The tradingcommand CommandId.</param> /// <param name="entrustItems">The entrustsecurity item.</param> /// <param name="callerCallback"></param> /// <returns></returns> public BLLResponse Withdraw(int submitId, int commandId, List <EntrustSecurity> entrustItems, CallerCallback callerCallback) { BLLResponse bllResponse = new BLLResponse(); List <UFXWithdrawRequest> requests = new List <UFXWithdrawRequest>(); foreach (var entrustItem in entrustItems) { UFXWithdrawRequest request = new UFXWithdrawRequest { EntrustNo = entrustItem.EntrustNo, }; requests.Add(request); } Callbacker callbacker = new Callbacker { Token = new CallerToken { SubmitId = submitId, CommandId = commandId, WaitEvent = new AutoResetEvent(false), Caller = callerCallback, }, DataHandler = WithdrawDataHandler, }; var result = _securityBLL.Withdraw(requests, callbacker); if (result == Model.ConnectionCode.Success) { if (callbacker.Token.WaitEvent.WaitOne(_timeOut)) { var errorResponse = callbacker.Token.ErrorResponse as UFXErrorResponse; if (errorResponse != null && T2ErrorHandler.Success(errorResponse.ErrorCode)) { bllResponse.Code = Model.ConnectionCode.Success; bllResponse.Message = "Success Withdraw"; } else { bllResponse.Code = Model.ConnectionCode.FailWithdraw; bllResponse.Message = errorResponse.ErrorMessage; } } else { bllResponse.Code = Model.ConnectionCode.FailTimeoutWithdraw; bllResponse.Message = "Fail to submit the basket withdraw to UFX: Timeout"; } } else { bllResponse.Code = Model.ConnectionCode.FailSubmit; bllResponse.Message = "Fail to submit the basket withdraw to UFX!"; } return(bllResponse); }
public List <UFXHoldingResponse> Query(CallerCallback callback) { List <UFXHoldingResponse> holdingItems = new List <UFXHoldingResponse>(); var portfolios = _productBLL.GetAll(); foreach (var portfolio in portfolios) { var ufxRequests = new List <UFXHoldingRequest>(); var ufxRequest = new UFXHoldingRequest { CombiNo = portfolio.PortfolioNo, }; ufxRequests.Add(ufxRequest); Callbacker callbacker = new Callbacker { Token = new CallerToken { SubmitId = 90000, CommandId = 90001, InArgs = portfolio.PortfolioNo, OutArgs = holdingItems, WaitEvent = new AutoResetEvent(false), Caller = callback, }, DataHandler = DataHandlerCallback, }; var result = _securityBLL.QueryHolding(ufxRequests, callbacker); BLLResponse bllResponse = new BLLResponse(); if (result == Model.ConnectionCode.Success) { if (callbacker.Token.WaitEvent.WaitOne(_timeOut)) { var errorResponse = callbacker.Token.ErrorResponse as UFXErrorResponse; if (errorResponse != null && T2ErrorHandler.Success(errorResponse.ErrorCode)) { bllResponse.Code = ConnectionCode.Success; bllResponse.Message = "Success QueryHolding"; } else { bllResponse.Code = ConnectionCode.FailQueryHolding; bllResponse.Message = "Fail QueryHolding: " + errorResponse.ErrorMessage; } } else { bllResponse.Code = ConnectionCode.FailTimeoutQueryHolding; bllResponse.Message = "Fail QueryHolding: Timeout"; } } else { bllResponse.Code = result; bllResponse.Message = "Fail to QueryHolding in ufx."; } } return(holdingItems); }
public int Submit(EntrustCommandItem cmdItem, List <EntrustSecurityItem> entrustItems) { int ret = -1; var cmdEntrustItems = entrustItems.Where(p => p.CommandId == cmdItem.CommandId && p.SubmitId == cmdItem.SubmitId).ToList(); if (cmdEntrustItems == null || cmdEntrustItems.Count == 0) { return(ret); } var tradeCommandItem = _tradeCommandBLL.GetTradeCommandItem(cmdItem.CommandId); var portfolio = LoginManager.Instance.GetPortfolio(tradeCommandItem.PortfolioCode); //var stockholder = LoginManager.Instance.GetHolder(tradeCommandItem. var ufxRequests = new List <UFXBasketEntrustRequest>(); var futuItem = cmdEntrustItems.Find(p => p.SecuType == Model.SecurityInfo.SecurityType.Futures); foreach (var secuItem in cmdEntrustItems) { UFXBasketEntrustRequest request = new UFXBasketEntrustRequest { StockCode = secuItem.SecuCode, EntrustPrice = secuItem.EntrustPrice, EntrustAmount = secuItem.EntrustAmount, PriceType = EntrustRequestHelper.GetEntrustPriceType(secuItem.EntrustPriceType), ExtSystemId = secuItem.RequestId, ThirdReff = EntrustRequestHelper.GenerateThirdReff(secuItem.CommandId, secuItem.SubmitId, secuItem.RequestId), LimitEntrustRatio = 100, FutuLimitEntrustRatio = 100, OptLimitEntrustRatio = 100, }; if (secuItem.SecuType == Model.SecurityInfo.SecurityType.Stock) { request.EntrustDirection = EntrustRequestHelper.GetEntrustDirection(secuItem.EntrustDirection); request.FuturesDirection = string.Empty; } else if (secuItem.SecuType == Model.SecurityInfo.SecurityType.Futures) { request.EntrustDirection = EntrustRequestHelper.GetEntrustDirection(secuItem.EntrustDirection); request.FuturesDirection = EntrustRequestHelper.GetFuturesDirection(secuItem.EntrustDirection); } var secuInfo = SecurityInfoManager.Instance.Get(secuItem.SecuCode, secuItem.SecuType); if (secuInfo != null) { request.MarketNo = EntrustRequestHelper.GetMarketNo(secuInfo.ExchangeCode); } if (tradeCommandItem != null) { request.AccountCode = tradeCommandItem.FundCode; request.CombiNo = tradeCommandItem.PortfolioCode; } ufxRequests.Add(request); } Callbacker callbacker = new Callbacker { Token = new CallerToken { SubmitId = cmdItem.SubmitId, CommandId = cmdItem.CommandId, InArgs = cmdItem, WaitEvent = new AutoResetEvent(false), }, DataHandler = EntrustBasketCallback, }; var result = _securityBLL.EntrustBasket(ufxRequests, callbacker); if (result == Model.ConnectionCode.Success) { callbacker.Token.WaitEvent.WaitOne(); var errorResponse = callbacker.Token.OutArgs as UFXErrorResponse; if (errorResponse != null && T2ErrorHandler.Success(errorResponse.ErrorCode)) { ret = 1; } } return(ret); }