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); }
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); }
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); } }); }