public async Task <string> QueryPagedAsync([FromQuery] TopicParam param)
        {
            var filter = param.SearchLambda <Topic, TopicParam>();
            var result = await _topicRepository.QueryPagedAsync(param.PageNum, param.PageSize, null, filter);

            var pageData = new PagedDto <Topic>
            {
                Code     = 200,
                Msg      = "获取数据成功",
                Total    = result.TotalResults,
                PageSize = param.PageSize,
                Data     = result.Items.ToList()
            };
            var json = pageData.ToString();

            return(json);
        }
Ejemplo n.º 2
0
        public Task <IObservable <TMessage> > StartAsync(TopicParam param, bool nodelay = true)
        {
            _client = new TcpRosClient();

            var tcs = new TaskCompletionSource <IObservable <TMessage> >();

            _client.ConnectAsync(param.HostName, param.PortNumber)
            .ContinueWith(connectTask =>
            {
                _logger.Debug("StartAsync Connected");

                if (connectTask.Status == TaskStatus.RanToCompletion)
                {
                    try
                    {
                        ConnectToPublisherAsync(nodelay).ContinueWith(connectedTask =>
                        {
                            _logger.Debug("StartAsync ConnectToPublisherAsync");

                            if (connectedTask.Status == TaskStatus.RanToCompletion)
                            {
                                tcs.SetResult(connectedTask.Result);
                            }
                            else if (connectedTask.Status == TaskStatus.Faulted)
                            {
                                tcs.SetException(connectedTask.Exception.InnerException);
                            }
                        });
                    }
                    catch (Exception ex)
                    {
                        _logger.Error("Connect Error", ex);
                        tcs.SetException(ex);
                    }
                }
                else if (connectTask.Status == TaskStatus.Faulted)
                {
                    tcs.SetException(connectTask.Exception.InnerException);
                }
            });

            return(tcs.Task);
        }
Ejemplo n.º 3
0
        private void ConnectServer(TopicParam param, Uri slaveUri)
        {
            var server = new RosTopicServer <TMessage>(NodeId, TopicName, slaveUri);

            lock (_rosTopicServers)
            {
                _rosTopicServers.Add(server);
            }

            server.StartAsync(param, _nodelay).ContinueWith(
                startTask =>
            {
                if (startTask.Status == TaskStatus.RanToCompletion)
                {
                    var lazyDisposable = new SingleAssignmentDisposable();

                    var subs = startTask.Result;

                    var d = subs.Subscribe(
                        x => _aggregateSubject.OnNext(x),
                        ex =>
                    {
                        lock (_rosTopicServers)
                        {
                            var index = _rosTopicServers.FindIndex(x => x.SlaveUri == slaveUri);
                            if (index != -1)
                            {
                                _rosTopicServers.RemoveAt(index);
                                _connectionCounterSubject.OnNext(_rosTopicServers.Count);
                                lazyDisposable.Dispose();
                            }
                        }
                        //_aggregateSubject.OnError(ex);
                    }, () =>
                    {
                        lock (_rosTopicServers)
                        {
                            var index = _rosTopicServers.FindIndex(x => x.SlaveUri == slaveUri);
                            if (index != -1)
                            {
                                _rosTopicServers.RemoveAt(index);
                                _connectionCounterSubject.OnNext(_rosTopicServers.Count);
                                lazyDisposable.Dispose();
                            }
                        }
                        //_aggregateSubject.OnCompleted();
                    });

                    lazyDisposable.Disposable = Disposable.Create(() =>
                    {
                        d.Dispose();
                        lock (_disposables)
                        {
                            _disposables.Remove(d);
                        }
                    });

                    lock (_disposables)
                    {
                        _disposables.Add(d);
                    }
                    lock (_rosTopicServers)
                    {
                        _connectionCounterSubject.OnNext(_rosTopicServers.Count);
                    }
                }
                else if (startTask.Status == TaskStatus.Faulted)
                {
                    _logger.Error("ConnectServer Error", startTask.Exception.InnerException);
                }
            });
        }