コード例 #1
0
ファイル: SimHTS.cs プロジェクト: HongSeokHwan/legacy
        public void HandleCallBackData()
        {
            Queue<String> postponeData = new Queue<string>();

            while (true)
            {
                String rawData = "";

                lock (_callBackData)
                {
                    if (_callBackData.Count > 0)
                    {
                        rawData = _callBackData.Dequeue();
                    }
                    else
                    {
                        break;
                    }
                }

                PowerBaseResultData resultData = new PowerBaseResultData(rawData, this.PT, IsReal());

                if (!this._account.ContractPacketCallBackFromPB(resultData))
                {
                    postponeData.Enqueue(rawData);
                }
            }

            if (postponeData.Count > 0)
            {
                // 외부에서 주문을 내는 경우 당연히 생긴다.
                // 계속 시도는 해보고 대신 에러 상황이라고 단정 내리지는 말자
                lock (_callBackData)
                {
                    while (_callBackData.Count > 0)
                    {
                        postponeData.Enqueue(_callBackData.Dequeue());
                    }
                    _callBackData = postponeData;
                }
            }
        }
コード例 #2
0
ファイル: Account.cs プロジェクト: HongSeokHwan/legacy
        public Boolean ContractPacketCallBackFromPB(PowerBaseResultData resultData)
        {
            UpdateOrderIn();

            주문처리유형_플래그 ott = GetOrderResult(resultData.주문처리유형);
            String orderActionType = resultData.호가구분;

            if (resultData.정상_정정_취소 == 2 && ott == 주문처리유형_플래그.확인) // 취소된 것이 확인되었다.
            {
                // 취소되었고 완료 되었다.
                // 원주문번호에게 주문이 취소되었다고 알려주도록 한다.
                long originNumber = resultData.원주문번호;
                long totalCancelCount = resultData.원주문정정취소수량;
                if (_inProgressOrders.ContainsKey(originNumber))
                {
                    POrder po = _inProgressOrders[originNumber];
                    po.UpdateCancelMessage(resultData.원주문정정취소수량);

                    if (!po.IsDone())
                    {
                        logger.Error("Does not finish after cancel packet");
                        Util.KillWithNotice("Does not finish after cancel packet");
                        return true;
                    }
                    else
                    {
                        logger.Debug("Cancel complete. #({0})", resultData.원주문번호);
                        CompleteOrdering(po);
                    }
                }
                else
                {
                    logger.Warn("Cancel packet is received after price order gone");
                    return true;
                }
            }
            else if (resultData.정상_정정_취소 == 0 && ott == 주문처리유형_플래그.일부체결) // 일부 체결
            {
                if (_completeOrders.ContainsKey(resultData.주문번호))
                {
                    // 할일이 없다.
                    return true;
                }

                if (_inProgressOrders.ContainsKey(resultData.주문번호))
                {
                    POrder o = _inProgressOrders[resultData.주문번호];
                    o.Update(resultData.전체체결수량, resultData.평균단가, false);
                    ReturnBackContractCallBack(o);

                    logger.Debug("Contract. #({0}), {1:n0}", resultData.주문번호, resultData.전체체결수량);
                }
                else
                {
                    // _completeOrders, _inProgressOrders 모두 안 들어있다. 유보한다.
                    return false;
                }
            }
            else if (resultData.정상_정정_취소 == 0 && ott == 주문처리유형_플래그.전량체결) // 전량 체결
            {
                if (_completeOrders.ContainsKey(resultData.주문번호))
                {
                    // 할일이 없다.
                    return true;
                }

                if (_inProgressOrders.ContainsKey(resultData.주문번호))
                {
                    POrder o = _inProgressOrders[resultData.주문번호];
                    o.Update(resultData.전체체결수량, resultData.평균단가, true);
                    CompleteOrdering(o);

                    logger.Debug("Contract complete. #({0}), {1:n0}", resultData.주문번호, resultData.전체체결수량);
                }
                else
                {
                    // _completeOrders, _inProgressOrders 모두 안 들어있다. 유보한다.
                    return false;
                }
            }
            return true;
        }