internal void EndScan(MatchScanner matchScanner, bool scanFinished, bool scanHasNoMoreWork) { Log.TraceInformation("Ending current scan"); if (_scanner != matchScanner) { throw new InvalidOperationException("The scanner that's being ended doesn't match the currently active scanner"); } if (OnScannerEnd != null) { OnScannerEnd(matchScanner, scanFinished, scanHasNoMoreWork); } _scanner = null; }
async Task<IDistributedTaskWorker> IDistributedTaskWorkerFactory.CreateInstanceAsync(IDistributedTask task) { Log.TraceInformation("Detected a new scan, creating a scanner"); if (_scanner != null) { throw new InvalidOperationException("This coordinator already has a running scanner"); } var storage = await _storageFactory.CreateInstanceAsync().ConfigureAwait(false); var participationHandle = await task.JoinAsync(this._workerId).ConfigureAwait(false); Log.TraceInformation("Parsing param string: {0}", task.ParamString); ScanTraits traits = ParseTaskParamString(task.ParamString); Log.TraceInformation("Creating a new scanner, workerid={0}, eventId={1}, resultCollection={2}", _workerId, traits.EventId, traits.ResultCollection); _scanner = new MatchScanner( this, participationHandle, storage, _resultsProviderFactory.CreateInstance(traits.GameId), traits, _workerId, _scannerConfig, _startTasksSuspended); if (OnScannerStart != null) { OnScannerStart(_scanner); } return _scanner; }