public Boolean Contract_CallBack(POrder order)
        {
            Trace.Assert(_data.LiveOrder == order);

            if (IsOrderContracted(order) &&
                _data.CurEDoorOrderState ==
                EDoorEachMonitorEnterData.EDoorOrderState.ActiveWithoutSweeper)
            {
                // sweeper 생성하고 sweeper에게 나머지 모든일을 맡긴다.
                // 본인은 MonitorState로 간다.

                // centerData를 이렇게 가지고 오는 것이 좋지는 않지만 별수 없다.
                // sweeper를 생성해서 sweeper controller에 넣어준다.
                EDoorEachSweeperController sweeper =
                    new EDoorEachSweeperController(
                        order,
                        Parent.Parent.GetCenterData());

                // sweeper 등록
                Parent.Parent.GetSweeperController().Add(sweeper);

                _data.ClearLiveOrder();
                _monitorEnter = new MonitorState(this);
            }

            return true;
        }
Ejemplo n.º 2
0
        IEDoorEachMonitorEnterState Run(
            EDoorCenterData centerData,
            EDoorEachMonitorEnterData eachData,
            MonitorState.MonitorDataThisTurn monitorData)
        {
            // 리밸런스 해야 하는 상황인지 확인한다.

            String log = "";

            if (IsRebalanceCondition(centerData, eachData, monitorData, ref log))
            {
                // sweeper로 남은 주문 처리하고 모리터링 다시 시작
                EDoorEachSweeperController sweeper =
                    new EDoorEachSweeperController(
                        eachData.LiveOrder,
                        _parent.Parent.Parent.GetCenterData());

                // sweeper 등록
                _parent.Parent.Parent.GetSweeperController().Add(sweeper);

                eachData.ClearLiveOrder();
                logger.Info("Change State Rebalance to MonitorState {0} ({1})", eachData.EI.Name, log);
                IEDoorEachMonitorEnterState next = new MonitorState(_parent);
                return next;
            }
            return this;
        }