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; }
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; }