Esempio n. 1
0
        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;
        }
Esempio n. 2
0
        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;
        }