public Boolean Run(Dictionary<String, FoxRawDataEachCollector> rawDataEachControllers, ref FoxCaptureSlideController slideController) { Boolean bCreateSlideController = false; if (_mute.On()) { // 대기. 1초 안에 캡쳐 기록 시작한 것이 있어서 일단 좀 대기한다. } else { // 선물의 속도를 측정하고 선물의 속도가 일정 속도 이상(가령, 2틱/1sec)인 경우라면 // Capture를 하여 기록한다. double futureVelocity = GetFutureVelocity(_policy.VelocityTimeUnitMilliSec, rawDataEachControllers); if (Math.Abs(futureVelocity) >= _policy.FutureLowerBound) { // CaptureSlide를 만들고 mute한다. // 기록을 시작하면 1초 정도는 속도 측정을 하지 않도록 한다. slideController = RegisterCaptureSlide(futureVelocity, rawDataEachControllers, this.IsToDB_InRunning); bCreateSlideController = true; _mute.Reset(); } } // 등록된 CaptureSlide를 실행하여 Capture를 계속 진행하도록 한다. RunRegisteredCaptureSlides(rawDataEachControllers); return bCreateSlideController; }
FoxCaptureSlideController RegisterCaptureSlide( double futureVelocity, Dictionary<String, FoxRawDataEachCollector> rawDataEachControllers, Boolean bToDB_InRunning) { const int CAPTURE_SLIDE_TIME_OFFSET = 5; int groupID = FoxCaptureSlideCollection.GetGroupID_and_IncreaseByOne(); FoxCaptureSlideController slideController = new FoxCaptureSlideController( futureVelocity, groupID, CAPTURE_SLIDE_TIME_OFFSET, _policy, bToDB_InRunning); slideController.SaveCaptureSlide(); slideController.SaveBeforeData(rawDataEachControllers); _liveCaptureSlides.Add(slideController); return slideController; }
// 실전에서는 이곳을 호출하도록 한다. public Boolean UpdateDataAndMonitorChance(ref FoxCaptureSlideController brandNewController) { foreach (FoxRawDataEachCollector eachDataController in _eachDataControllers.Values) { eachDataController.Run(); } if (_foxCaptureController.Run(_eachDataControllers, ref brandNewController)) { // 새로 SlideController가 생겼다. return true; } return false; }