Example #1
0
        internal AsyncLoadingContext(ITikCommand loadingCommand, TikAsyncLoadingThread loadingThread)
        {
            Guard.ArgumentNotNull(loadingCommand, "loadingCommand");
            Guard.ArgumentNotNull(loadingThread, "loadingThread");

            _loadingCommand = loadingCommand;
            _loadingThread = loadingThread;
        }
        internal AsyncLoadingContext(ITikCommand loadingCommand, TikAsyncLoadingThread loadingThread)
        {
            Guard.ArgumentNotNull(loadingCommand, "loadingCommand");
            Guard.ArgumentNotNull(loadingThread, "loadingThread");

            _loadingCommand = loadingCommand;
            _loadingThread  = loadingThread;
        }
Example #3
0
        public TikAsyncLoadingThread CallCommandAsync(IEnumerable <string> commandRows, string tag,
                                                      Action <ITikSentence> oneResponseCallback)
        {
            Guard.ArgumentNotNullOrEmptyString(tag, "tag");

            commandRows = commandRows.Concat(new string[] { string.Format("{0}={1}", TikSpecialProperties.Tag, tag) });
            lock (_writeLockObj)
            {
                WriteCommand(commandRows);
            }

            TikAsyncLoadingThread result = new TikAsyncLoadingThread(() =>
            {
                try
                {
                    ITikSentence sentence;
                    do
                    {
                        sentence = GetOne(tag);
                        try
                        {
                            oneResponseCallback(sentence);
                        }
                        catch
                        {
                            //Do not crash reading thread because of implementation error in called code
                        }
                    } while (!(sentence is ApiDoneSentence /*|| sentence is ApiTrapSentence*/ || sentence is ApiFatalSentence)); // read sentences via TryGetOne(wait) for TAG until !done or !fatal is returned
                    //NOTE: Should be ended via !done or !trap+!done (called via Cancel() command for specific tag)
                }
                catch
                {
                    //catch all exceptions from GetOne -> thread should end via !done read sentence
                    //TODO: implement "timeoutException" for GetOne and cancell gracefully thraed if this exception happens
                }
            });

            result.Start();

            return(result);
        }
Example #4
0
        public TikAsyncLoadingThread CallCommandAsync(IEnumerable<string> commandRows, string tag, 
            Action<ITikSentence> oneResponseCallback)
        {
            Guard.ArgumentNotNullOrEmptyString(tag, "tag");

            commandRows = commandRows.Concat(new string[] { string.Format("{0}={1}", TikSpecialProperties.Tag, tag) });
            lock (_writeLockObj)
            {
                WriteCommand(commandRows);
            }

            TikAsyncLoadingThread result = new TikAsyncLoadingThread(() =>
            {
                try
                {
                    ITikSentence sentence;
                    do
                    {
                        sentence = GetOne(tag);
                        try
                        {
                            oneResponseCallback(sentence);
                        }
                        catch
                        {
                            //Do not crash reading thread because of implementation error in called code
                        }
                    } while (!(sentence is ApiDoneSentence /*|| sentence is ApiTrapSentence*/ || sentence is ApiFatalSentence)); // read sentences via TryGetOne(wait) for TAG until !done or !fatal is returned
                    //NOTE: Should be ended via !done or !trap+!done (called via Cancel() command for specific tag)
                }
                catch
                {
                    //catch all exceptions from GetOne -> thread should end via !done read sentence
                    //TODO: implement "timeoutException" for GetOne and cancell gracefully thraed if this exception happens
                }
            });
            result.Start();

            return result;
        }