public void Clear() { _req = new BrowseRequest(); _req.Offset = 0; _req.Count = 5; _req.FetchStoredFields = true; _qString = null; }
/// <summary> /// Method executes when the SelectionChanged command is invoked. /// The parameter <paramref name="p"/> can be an array of objects /// containing objects of the <seealso cref="IFolderItemViewModel"/> type /// or p can also be string. /// /// Each parameter item that adheres to the above types results in /// a OnCurrentPathChanged event being fired with the folder path /// as parameter. /// /// This mwthod can typically be invoked by: /// 1> Edit the text portion + Enter in the control or /// 2> By selecting an entry from the drop down list of the combobox. /// </summary> /// <param name="p"></param> private async Task SelectionChanged_ExecutedAsync(object p) { if (p == null) { return; } // Check if the given parameter is a string, fire a corresponding event if so... if (p is string) { IPathModel param = null; try { param = PathFactory.Create(p as string); } catch { return; // Control will refuse to select an unknown/non-existing item } // This breaks a possible recursion, if a new view is requested even though its // already available, because this could, otherwise, change the SelectedItem // which in turn could request another PopulateView(...) -> SelectedItem etc ... if (SelectedItem != null) { if (SelectedItem.Equals(param)) { return; } } if (param != null) { var request = new BrowseRequest(param); await InternalPopulateViewAsync(request, true); } } else { if (p is object[]) { var param = p as object[]; if (param != null) { if (param.Length > 0) { var newPath = param[param.Length - 1] as IFolderItemViewModel; if (newPath != null) { IPathModel location = null; IPathModel selectedItemModel = null; try { location = PathFactory.Create(newPath.ItemPath, newPath.ItemType); selectedItemModel = PathFactory.Create(SelectedItem.ItemPath, SelectedItem.ItemType); } catch { } if (location == null || selectedItemModel == null) { return; } // This breaks a possible recursion, if a new view is requested even though its // already available, because this could, otherwise, change the SelectedItem // which in turn could request another PopulateView(...) -> SelectedItem etc ... if (location.Equals(selectedItemModel)) { return; } var request = new BrowseRequest(location); await InternalPopulateViewAsync(request, true); } } } } } }
/// <summary> /// Discovers the References of a specified Node. /// </summary> /// <param name="channel">A instance of <see cref="IRequestChannel"/>.</param> /// <param name="request">A <see cref="BrowseRequest"/>.</param> /// <returns>A <see cref="Task"/> representing the asynchronous operation that returns a <see cref="BrowseResponse"/>.</returns> public static async Task <BrowseResponse> BrowseAsync(this IRequestChannel channel, BrowseRequest request, CancellationToken token = default) { if (request == null) { throw new ArgumentNullException(nameof(request)); } return((BrowseResponse)await channel.RequestAsync(request, token).ConfigureAwait(false)); }
private void BrowseForChatServers() { BrowseRequest req = new BrowseRequest(_sm.LocalUser.ServerJID); _sm.BeginSend(req.ToPacket, new AsyncCallback(BrowseCompleteCallback)); }
/// <summary> /// Invokes the Browse service. /// </summary> public virtual ResponseHeader Browse( RequestHeader requestHeader, ViewDescription view, uint requestedMaxReferencesPerNode, BrowseDescriptionCollection nodesToBrowse, out BrowseResultCollection results, out DiagnosticInfoCollection diagnosticInfos) { BrowseRequest request = new BrowseRequest(); BrowseResponse response = null; request.RequestHeader = requestHeader; request.View = view; request.RequestedMaxReferencesPerNode = requestedMaxReferencesPerNode; request.NodesToBrowse = nodesToBrowse; UpdateRequestHeader(request, requestHeader == null, "Browse"); try { if (UseTransportChannel) { IServiceResponse genericResponse = TransportChannel.SendRequest(request); if (genericResponse == null) { throw new ServiceResultException(StatusCodes.BadUnknownResponse); } ValidateResponse(genericResponse.ResponseHeader); response = (BrowseResponse)genericResponse; } else { BrowseResponseMessage responseMessage = InnerChannel.Browse(new BrowseMessage(request)); if (responseMessage == null || responseMessage.BrowseResponse == null) { throw new ServiceResultException(StatusCodes.BadUnknownResponse); } response = responseMessage.BrowseResponse; ValidateResponse(response.ResponseHeader); } results = response.Results; diagnosticInfos = response.DiagnosticInfos; } finally { RequestCompleted(request, response, "Browse"); } return response.ResponseHeader; }
private BrowseResult PerformSearch(Query query, string indexPath, IEnumerable<Models.SelectionGroup> selectionGroups) { string[] FieldNames = new string[] { "Material", "Style", "Mounting", "Brand" }; var handlers = new List<FacetHandler>(); foreach (string field in FieldNames) { handlers.Add(new SimpleFacetHandler(field)); } // Run the search // create the index reader var directory = FSDirectory.Open(new System.IO.DirectoryInfo(indexPath)); var indexReader = DirectoryReader.Open(directory, true); //// This is how to get a searcher for executing the search, not for working with facets //IndexSearcher indexSearcher = new IndexSearcher(directory, true); //indexSearcher.Search( // Decorate it with the Bobo index reader BoboIndexReader boboReader = BoboIndexReader.GetInstance(indexReader, handlers); // create a browse request BrowseRequest browseRequest = new BrowseRequest(); // NOTE: these must be used in production to page the results browseRequest.Count = 50; browseRequest.Offset = 0; browseRequest.FetchStoredFields = true; //Query query = new QueryParser( // Lucene.Net.Util.Version.LUCENE_29, // "title", // new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29) // ).Parse(model.Phrase); if (selectionGroups != null) { // Add the selections to the search foreach (var group in selectionGroups) { BrowseSelection sel = new BrowseSelection(group.Name); foreach (var value in group.Selections) { sel.AddValue(value); } browseRequest.AddSelection(sel); } } browseRequest.Query = query; //// add the facet output specs //FacetSpec brandSpec = new FacetSpec(); //brandSpec.OrderBy = FacetSpec.FacetSortSpec.OrderHitsDesc; //browseRequest.SetFacetSpec("Brand", brandSpec); foreach (var name in FieldNames) { // add the facet output specs FacetSpec spec = new FacetSpec(); //spec.OrderBy = FacetSpec.FacetSortSpec.OrderHitsDesc; // NOTE: if this is a secondary search, we want to get the facets with 0 // hits so the checkboxes can be set on the UI...or otherwise program the UI // to disable and set to 0 all of the selections that aren't in the result if (selectionGroups != null) { spec.MinHitCount = 0; } browseRequest.SetFacetSpec(name, spec); } // perform browse IBrowsable browser = new BoboBrowser(boboReader); BrowseResult result = browser.Browse(browseRequest); return result; }
private static async Task TestAsync() { var discoveryUrl = "opc.tcp://*****:*****@"%LOCALAPPDATA%\Workstation.ConsoleApp\pki")), userIdentity, remoteEndpoint)) { try { await session.OpenAsync(); } catch (ServiceResultException ex) { if ((uint)ex.HResult == StatusCodes.BadSecurityChecksFailed) { Console.WriteLine("Error connecting to endpoint. Did the server reject our certificate?"); } throw ex; } Console.WriteLine("Step 5 - Browse the server namespace."); Console.WriteLine("+ Root"); BrowseRequest browseRequest = new BrowseRequest { NodesToBrowse = new BrowseDescription[] { new BrowseDescription { NodeId = NodeId.Parse(ObjectIds.RootFolder), BrowseDirection = BrowseDirection.Forward, ReferenceTypeId = NodeId.Parse(ReferenceTypeIds.HierarchicalReferences), NodeClassMask = (uint)NodeClass.Variable | (uint)NodeClass.Object | (uint)NodeClass.Method, IncludeSubtypes = true, ResultMask = (uint)BrowseResultMask.All } }, }; BrowseResponse browseResponse = await session.BrowseAsync(browseRequest); foreach (var rd1 in browseResponse.Results[0].References ?? new ReferenceDescription[0]) { Console.WriteLine(" + {0}: {1}, {2}", rd1.DisplayName, rd1.BrowseName, rd1.NodeClass); browseRequest = new BrowseRequest { NodesToBrowse = new BrowseDescription[] { new BrowseDescription { NodeId = ExpandedNodeId.ToNodeId(rd1.NodeId, session.NamespaceUris), BrowseDirection = BrowseDirection.Forward, ReferenceTypeId = NodeId.Parse(ReferenceTypeIds.HierarchicalReferences), NodeClassMask = (uint)NodeClass.Variable | (uint)NodeClass.Object | (uint)NodeClass.Method, IncludeSubtypes = true, ResultMask = (uint)BrowseResultMask.All } }, }; browseResponse = await session.BrowseAsync(browseRequest); foreach (var rd2 in browseResponse.Results[0].References ?? new ReferenceDescription[0]) { Console.WriteLine(" + {0}: {1}, {2}", rd2.DisplayName, rd2.BrowseName, rd2.NodeClass); browseRequest = new BrowseRequest { NodesToBrowse = new BrowseDescription[] { new BrowseDescription { NodeId = ExpandedNodeId.ToNodeId(rd2.NodeId, session.NamespaceUris), BrowseDirection = BrowseDirection.Forward, ReferenceTypeId = NodeId.Parse(ReferenceTypeIds.HierarchicalReferences), NodeClassMask = (uint)NodeClass.Variable | (uint)NodeClass.Object | (uint)NodeClass.Method, IncludeSubtypes = true, ResultMask = (uint)BrowseResultMask.All } }, }; browseResponse = await session.BrowseAsync(browseRequest); foreach (var rd3 in browseResponse.Results[0].References ?? new ReferenceDescription[0]) { Console.WriteLine(" + {0}: {1}, {2}", rd3.DisplayName, rd3.BrowseName, rd3.NodeClass); } } } Console.WriteLine("Press any key to continue..."); Console.ReadKey(true); Console.WriteLine("Step 6 - Create a subscription."); var subscriptionRequest = new CreateSubscriptionRequest { RequestedPublishingInterval = 1000, RequestedMaxKeepAliveCount = 10, RequestedLifetimeCount = 30, PublishingEnabled = true }; var subscriptionResponse = await session.CreateSubscriptionAsync(subscriptionRequest).ConfigureAwait(false); var id = subscriptionResponse.SubscriptionId; Console.WriteLine("Step 7 - Add items to the subscription."); var itemsToCreate = new MonitoredItemCreateRequest[] { new MonitoredItemCreateRequest { ItemToMonitor = new ReadValueId { NodeId = NodeId.Parse("i=2258"), AttributeId = AttributeIds.Value }, MonitoringMode = MonitoringMode.Reporting, RequestedParameters = new MonitoringParameters { ClientHandle = 12345, SamplingInterval = -1, QueueSize = 0, DiscardOldest = true } } }; var itemsRequest = new CreateMonitoredItemsRequest { SubscriptionId = id, ItemsToCreate = itemsToCreate, }; var itemsResponse = await session.CreateMonitoredItemsAsync(itemsRequest).ConfigureAwait(false); Console.WriteLine("Step 8 - Publish the subscription."); var publishRequest = new PublishRequest { SubscriptionAcknowledgements = new SubscriptionAcknowledgement[0] }; Console.WriteLine("Press any key to delete the subscription..."); while (!Console.KeyAvailable) { var publishResponse = await session.PublishAsync(publishRequest).ConfigureAwait(false); // loop thru all the data change notifications var dcns = publishResponse.NotificationMessage.NotificationData.OfType <DataChangeNotification>(); foreach (var dcn in dcns) { foreach (var min in dcn.MonitoredItems) { Console.WriteLine($"clientHandle: {min.ClientHandle}; value: {min.Value}"); } } publishRequest = new PublishRequest { SubscriptionAcknowledgements = new[] { new SubscriptionAcknowledgement { SequenceNumber = publishResponse.NotificationMessage.SequenceNumber, SubscriptionId = publishResponse.SubscriptionId } } }; } Console.ReadKey(true); Console.WriteLine("Step 9 - Delete the subscription."); var request = new DeleteSubscriptionsRequest { SubscriptionIds = new uint[] { id } }; await session.DeleteSubscriptionsAsync(request).ConfigureAwait(false); Console.WriteLine("Press any key to close the session..."); Console.ReadKey(true); Console.WriteLine("Step 10 - Close the session."); await session.CloseAsync(); } }
public virtual BrowseResult Browse(BrowseRequest req) // throws BrowseException { return(BrowseServiceFactory.CreateBrowseService(_reader).Browse(req)); }
//public void Browse(string ObjectID, string BrowseFlag, string Filter, ulong StartingIndex, ulong RequestedCount, string SortCriteria, out string Result, out ulong NumberReturned, out ulong TotalMatches, out ulong UpdateID) //{ // Result = null; // NumberReturned = 0; // TotalMatches = 0; // UpdateID = 0; //} public BrowseResponse Browse(BrowseRequest request) { return(new BrowseResponse { NumberReturned = 0, Result = null, TotalMatches = 0, UpdateID = 0 }); }
/// <summary> /// Fills the CurrentItems property for display in ItemsControl /// based view (ListBox, ListView etc.). /// /// This method wraps a parameterized version of the same method /// with a call that contains the standard data field. /// </summary> /// <param name="request"></param> /// <param name="browseEvent">Defines whether a request should result /// in an explicit event relayed to a controller or not.</param> protected FinalBrowseResult PopulateView(BrowseRequest request, bool browseEvent) { Logger.DebugFormat("PopulateView method"); Logger.DebugFormat("Populating view for request id: {0} - '{1}'", request.RequestId, request.NewLocation.Path); // This can happen when the viewmodel is configured at start-up // but the current folder is not configured, yet if (request == null) { return(FinalBrowseResult.FromRequest(request, BrowseResult.InComplete)); } IPathModel newPathToNavigateTo = request.NewLocation; bool result = false; IsBrowsing = true; try { if (newPathToNavigateTo != null && browseEvent == true) { if (this.BrowseEvent != null) { this.BrowseEvent(this, new BrowsingEventArgs(newPathToNavigateTo, true)); } } DirectoryInfo cur = new DirectoryInfo(newPathToNavigateTo.Path); if (cur.Exists == false) { return(FinalBrowseResult.FromRequest(request, BrowseResult.InComplete)); } CurrentItemClear(); result = InternalPopulateView(_ParsedFilter, cur, ShowIcons); if (result == true) { SetCurrentLocation(newPathToNavigateTo); return(FinalBrowseResult.FromRequest(request, BrowseResult.Complete)); } return(FinalBrowseResult.FromRequest(request, BrowseResult.InComplete)); } catch (Exception exp) { var bresult = FinalBrowseResult.FromRequest(request, BrowseResult.InComplete); bresult.UnexpectedError = exp; return(bresult); } finally { if (newPathToNavigateTo != null && browseEvent == true) { if (this.BrowseEvent != null) { this.BrowseEvent(this, new BrowsingEventArgs(newPathToNavigateTo, false, (result == true ? BrowseResult.Complete : BrowseResult.InComplete))); } } IsBrowsing = false; } }
/// <summary> /// Sends the browse command. /// </summary> /// <param name="sessionId">The session id.</param> /// <param name="command">The command.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>Task.</returns> public Task SendBrowseCommand(Guid sessionId, BrowseRequest command, CancellationToken cancellationToken) { var session = GetSessionForRemoteControl(sessionId); return(session.SessionController.SendBrowseCommand(command, cancellationToken)); }
public async Task BrowseObjectFolder() { // describe this client application. var clientDescription = new ApplicationDescription { ApplicationName = "Workstation.UaClient.FeatureTests", ApplicationUri = $"urn:{System.Net.Dns.GetHostName()}:Workstation.UaClient.FeatureTests", ApplicationType = ApplicationType.Client }; // place to store certificates var certificateStore = new DirectoryStore("./pki"); // create a 'UaTcpSessionChannel', a client-side channel that opens a 'session' with the server. var channel = new UaTcpSessionChannel( clientDescription, certificateStore, new AnonymousIdentity(), "opc.tcp://localhost:48010"); // the endpoint of Unified Automation's UaCPPServer. try { // try opening a session and reading a few nodes. await channel.OpenAsync(); Console.WriteLine($"Opened session with endpoint '{channel.RemoteEndpoint.EndpointUrl}'."); Console.WriteLine($"SecurityPolicy: '{channel.RemoteEndpoint.SecurityPolicyUri}'."); Console.WriteLine($"SecurityMode: '{channel.RemoteEndpoint.SecurityMode}'."); Console.WriteLine($"UserIdentityToken: '{channel.UserIdentity}'."); // build a BrowseRequest. See 'OPC UA Spec Part 4' section 5.8.2 var browseRequest = new BrowseRequest { NodesToBrowse = new[] { new BrowseDescription { // gather references of this nodeid. NodeId = NodeId.Parse(ObjectIds.ObjectsFolder), // include just 'Forward' references BrowseDirection = BrowseDirection.Forward, // include 'HierarchicalReferences' ReferenceTypeId = NodeId.Parse(ReferenceTypeIds.HierarchicalReferences), // include 'HierarchicalReferences' and all subtypes of 'HierarchicalReferences' IncludeSubtypes = true, // include all classes of node NodeClassMask = (uint)NodeClass.Unspecified, // return reference descriptions with all the fields filled out ResultMask = (uint)BrowseResultMask.All, } }, RequestedMaxReferencesPerNode = 1000 }; // send the request to the server var browseResponse = await channel.BrowseAsync(browseRequest).ConfigureAwait(false); Console.WriteLine("\n+ Objects, 0:Objects, Object, i=85"); Assert.IsNotNull(browseResponse.Results[0].References); foreach (var rd in browseResponse.Results[0].References) { Console.WriteLine(" + {0}, {1}, {2}, {3}", rd.DisplayName, rd.BrowseName, rd.NodeClass, rd.NodeId); } // it is good practice to be prepared to receive a continuationPoint. // ContinuationPoints are returned when the server has more information // than can be delivered in current response. // To test this code, you can reduce the above RequestedMaxReferencesPerNode // to 1. var cp = browseResponse.Results[0].ContinuationPoint; while (cp != null) { var browseNextRequest = new BrowseNextRequest { ContinuationPoints = new[] { cp }, ReleaseContinuationPoints = false }; var browseNextResponse = await channel.BrowseNextAsync(browseNextRequest); Assert.IsNotNull(browseNextResponse.Results[0].References); foreach (var rd in browseNextResponse.Results[0].References) { Console.WriteLine(" + {0}, {1}, {2}", rd.DisplayName, rd.BrowseName, rd.NodeClass); } cp = browseNextResponse.Results[0].ContinuationPoint; } Console.WriteLine($"\nClosing session '{channel.SessionId}'."); await channel.CloseAsync(); } catch (Exception ex) { await channel.AbortAsync(); Console.WriteLine(ex.Message); } }
public static IDictionary <string, IFacetAccessible> MergeSimpleFacetContainers(IEnumerable <IDictionary <string, IFacetAccessible> > subMaps, BrowseRequest req) { Dictionary <string, Dictionary <object, BrowseFacet> > counts = new Dictionary <string, Dictionary <object, BrowseFacet> >(); foreach (Dictionary <string, IFacetAccessible> subMap in subMaps) { foreach (KeyValuePair <string, IFacetAccessible> entry in subMap) { Dictionary <object, BrowseFacet> count = counts[entry.Key]; if (count == null) { count = new Dictionary <object, BrowseFacet>(); counts.Add(entry.Key, count); } foreach (BrowseFacet facet in entry.Value.GetFacets()) { string val = facet.Value; BrowseFacet oldValue = count[val]; if (oldValue == null) { count.Add(val, new BrowseFacet(val, facet.FacetValueHitCount)); } else { oldValue.FacetValueHitCount = oldValue.FacetValueHitCount + facet.FacetValueHitCount; } } } } Dictionary <string, IFacetAccessible> mergedFacetMap = new Dictionary <string, IFacetAccessible>(); foreach (string facet in counts.Keys) { FacetSpec fs = req.GetFacetSpec(facet); FacetSpec.FacetSortSpec sortSpec = fs.OrderBy; IComparer <BrowseFacet> comparer; if (FacetSpec.FacetSortSpec.OrderValueAsc.Equals(sortSpec)) { comparer = FACET_VAL_COMPARER; } else if (FacetSpec.FacetSortSpec.OrderHitsDesc.Equals(sortSpec)) { comparer = FacetHitcountComparerFactory.FACET_HITS_COMPARER; } else { comparer = fs.CustomComparerFactory.NewComparer(); } Dictionary <object, BrowseFacet> facetValueCounts = counts[facet]; BrowseFacet[] facetArray = facetValueCounts.Values.ToArray(); Array.Sort(facetArray, comparer); int numToShow = facetArray.Length; if (req != null) { FacetSpec fspec = req.GetFacetSpec(facet); if (fspec != null) { int maxCount = fspec.MaxCount; if (maxCount > 0) { numToShow = Math.Min(maxCount, numToShow); } } } BrowseFacet[] facets; if (numToShow == facetArray.Length) { facets = facetArray; } else { facets = new BrowseFacet[numToShow]; Array.Copy(facetArray, 0, facets, 0, numToShow); } MappedFacetAccessible mergedFacetAccessible = new MappedFacetAccessible(facets); mergedFacetMap.Add(facet, mergedFacetAccessible); } return(mergedFacetMap); }
public void QueueTask(BrowseRequest <IDirectoryBrowser> request) { TaskQueue.AddTaskToQueue(request); }
/// <summary> /// Most important method - reading the tags. /// </summary> public async Task <List <Tag> > OPCReadAsync(string OPCAdress) { //Preparing data to connect to OPC server Tags = new List <Tag>(); var loggerFactory = new LoggerFactory(); var appDescription = new ApplicationDescription() { ApplicationName = "OPC", ApplicationUri = $"urn:{System.Net.Dns.GetHostName()}:OPC", ApplicationType = ApplicationType.Client, }; var certificateStore = new DirectoryStore( Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Workstation.ConsoleApp", "pki")); var channel = new UaTcpSessionChannel( appDescription, certificateStore, new AnonymousIdentity(), //by now doesn't support signing in OPCAdress, loggerFactory: loggerFactory); try { Stopwatch stopwatch = new Stopwatch(); //measuring operations time stopwatch.Start(); await channel.OpenAsync(); //opening channel OnNewEvent(new LogEventArgs("Connected to OPC Server")); //opening OPC tree branches to find actual tags - only proper for B&R X20 PLC BrowseRequest browseRequest = new BrowseRequest { NodesToBrowse = new BrowseDescription[] { new BrowseDescription { NodeId = NodeId.Parse(ObjectIds.RootFolder), BrowseDirection = BrowseDirection.Forward, ReferenceTypeId = NodeId.Parse(ReferenceTypeIds.HierarchicalReferences), NodeClassMask = (uint)NodeClass.Variable | (uint)NodeClass.Object | (uint)NodeClass.Method, IncludeSubtypes = true, ResultMask = (uint)BrowseResultMask.All } }, }; BrowseResponse browseResponse = await channel.BrowseAsync(browseRequest); browseRequest = new BrowseRequest { NodesToBrowse = new BrowseDescription[] { new BrowseDescription { NodeId = ExpandedNodeId.ToNodeId(browseResponse.Results[0].References[0].NodeId, channel.NamespaceUris), BrowseDirection = BrowseDirection.Forward, ReferenceTypeId = NodeId.Parse(ReferenceTypeIds.HierarchicalReferences), NodeClassMask = (uint)NodeClass.Variable | (uint)NodeClass.Object | (uint)NodeClass.Method, IncludeSubtypes = true, ResultMask = (uint)BrowseResultMask.All } }, }; browseResponse = await channel.BrowseAsync(browseRequest); browseRequest = new BrowseRequest { NodesToBrowse = new BrowseDescription[] { new BrowseDescription { NodeId = ExpandedNodeId.ToNodeId(browseResponse.Results[0].References[1].NodeId, channel.NamespaceUris), BrowseDirection = BrowseDirection.Forward, ReferenceTypeId = NodeId.Parse(ReferenceTypeIds.HierarchicalReferences), NodeClassMask = (uint)NodeClass.Variable | (uint)NodeClass.Object | (uint)NodeClass.Method, IncludeSubtypes = true, ResultMask = (uint)BrowseResultMask.All } }, }; browseResponse = await channel.BrowseAsync(browseRequest); browseRequest = new BrowseRequest { NodesToBrowse = new BrowseDescription[] { new BrowseDescription { NodeId = ExpandedNodeId.ToNodeId(browseResponse.Results[0].References[0].NodeId, channel.NamespaceUris), BrowseDirection = BrowseDirection.Forward, ReferenceTypeId = NodeId.Parse(ReferenceTypeIds.HierarchicalReferences), NodeClassMask = (uint)NodeClass.Variable | (uint)NodeClass.Object | (uint)NodeClass.Method, IncludeSubtypes = true, ResultMask = (uint)BrowseResultMask.All } }, }; browseResponse = await channel.BrowseAsync(browseRequest); browseRequest = new BrowseRequest { NodesToBrowse = new BrowseDescription[] { new BrowseDescription { NodeId = ExpandedNodeId.ToNodeId(browseResponse.Results[0].References[0].NodeId, channel.NamespaceUris), BrowseDirection = BrowseDirection.Forward, ReferenceTypeId = NodeId.Parse(ReferenceTypeIds.HierarchicalReferences), NodeClassMask = (uint)NodeClass.Variable | (uint)NodeClass.Object | (uint)NodeClass.Method, IncludeSubtypes = true, ResultMask = (uint)BrowseResultMask.All } }, }; browseResponse = await channel.BrowseAsync(browseRequest); browseRequest = new BrowseRequest { NodesToBrowse = new BrowseDescription[] { new BrowseDescription { NodeId = ExpandedNodeId.ToNodeId(browseResponse.Results[0].References[1].NodeId, channel.NamespaceUris), BrowseDirection = BrowseDirection.Forward, ReferenceTypeId = NodeId.Parse(ReferenceTypeIds.HierarchicalReferences), NodeClassMask = (uint)NodeClass.Variable | (uint)NodeClass.Object | (uint)NodeClass.Method, IncludeSubtypes = true, ResultMask = (uint)BrowseResultMask.All } }, }; browseResponse = await channel.BrowseAsync(browseRequest); browseRequest = new BrowseRequest { NodesToBrowse = new BrowseDescription[] { new BrowseDescription { NodeId = ExpandedNodeId.ToNodeId(browseResponse.Results[0].References[10].NodeId, channel.NamespaceUris), BrowseDirection = BrowseDirection.Forward, ReferenceTypeId = NodeId.Parse(ReferenceTypeIds.HierarchicalReferences), NodeClassMask = (uint)NodeClass.Variable | (uint)NodeClass.Object | (uint)NodeClass.Method, IncludeSubtypes = true, ResultMask = (uint)BrowseResultMask.All } }, }; BrowseResponse browseResponse0 = await channel.BrowseAsync(browseRequest); int nestingLevel = 0; //nesting level counter Tag tag = new Tag(); //initializing first tag int allTagsCount = browseResponse0.Results[0].References.Length - 1; //for counting progress percentage for (int i = browseResponse0.Results[0].References.Length - 1; i >= 0; i--) //first level loop { var rd = browseResponse0.Results[0].References[i]; if (Tags.Count > 0 && rd.DisplayName.ToString() == Tags[0].Name) { break; } //to avoid getting the same tags second time nestingLevel = 0; ReadValueId[] items = new ReadValueId[1]; items[0] = new ReadValueId { NodeId = NodeId.Parse(rd.NodeId.ToString()), AttributeId = AttributeIds.DataType }; ReadRequest readRequest = new ReadRequest { NodesToRead = items }; ReadResponse readResponse = await channel.ReadAsync(readRequest); if (string.IsNullOrEmpty(tag.Name)) { tag = new Tag(rd.DisplayName.ToString()); } if (readResponse.Results[0].Value != null) { tag.ConversionFunction = Typ(readResponse.Results[0].Value.ToString()); } browseRequest = new BrowseRequest { NodesToBrowse = new BrowseDescription[] { new BrowseDescription { NodeId = ExpandedNodeId.ToNodeId(rd.NodeId, channel.NamespaceUris), BrowseDirection = BrowseDirection.Forward, ReferenceTypeId = NodeId.Parse(ReferenceTypeIds.HierarchicalReferences), NodeClassMask = (uint)NodeClass.Variable | (uint)NodeClass.Object | (uint)NodeClass.Method, IncludeSubtypes = true, ResultMask = (uint)BrowseResultMask.All } }, }; browseResponse = await channel.BrowseAsync(browseRequest); foreach (var rd1 in browseResponse.Results[0].References ?? new ReferenceDescription[0]) //second level loop (nesting=1) { if (!rd1.NodeId.ToString().Contains("#")) { nestingLevel = 1; tag = await ReadTag(new ReferenceDescription[] { rd, rd1 }, channel, tag); browseRequest = new BrowseRequest { NodesToBrowse = new BrowseDescription[] { new BrowseDescription { NodeId = ExpandedNodeId.ToNodeId(rd1.NodeId, channel.NamespaceUris), BrowseDirection = BrowseDirection.Forward, ReferenceTypeId = NodeId.Parse(ReferenceTypeIds.HierarchicalReferences), NodeClassMask = (uint)NodeClass.Variable | (uint)NodeClass.Object | (uint)NodeClass.Method, IncludeSubtypes = true, ResultMask = (uint)BrowseResultMask.All } }, }; browseResponse = await channel.BrowseAsync(browseRequest); foreach (var rd2 in browseResponse.Results[0].References ?? new ReferenceDescription[0]) //third level loop (nesting=2) { if (!rd2.NodeId.ToString().Contains("#")) { nestingLevel = 2; tag = await ReadTag(new ReferenceDescription[] { rd, rd1, rd2 }, channel, tag); browseRequest = new BrowseRequest { NodesToBrowse = new BrowseDescription[] { new BrowseDescription { NodeId = ExpandedNodeId.ToNodeId(rd2.NodeId, channel.NamespaceUris), BrowseDirection = BrowseDirection.Forward, ReferenceTypeId = NodeId.Parse(ReferenceTypeIds.HierarchicalReferences), NodeClassMask = (uint)NodeClass.Variable | (uint)NodeClass.Object | (uint)NodeClass.Method, IncludeSubtypes = true, ResultMask = (uint)BrowseResultMask.All } }, }; browseResponse = await channel.BrowseAsync(browseRequest); foreach (var rd3 in browseResponse.Results[0].References ?? new ReferenceDescription[0]) //fourth level loop (nesting=3) { if (!rd3.NodeId.ToString().Contains("#")) { nestingLevel = 3; tag = await ReadTag(new ReferenceDescription[] { rd, rd1, rd2, rd3 }, channel, tag); } else if (rd3.NodeId.ToString().Contains("#EngineeringUnits")) { await ReadUnit(new ReferenceDescription[] { rd, rd1, rd2, rd3 }, channel, tag); } if (nestingLevel == 3 && !string.IsNullOrEmpty(tag.Name)) { tag = SaveTag(tag); } } } else if (rd2.NodeId.ToString().Contains("#EngineeringUnits")) { await ReadUnit(new ReferenceDescription[] { rd, rd1, rd2 }, channel, tag); } if (nestingLevel == 2 && !string.IsNullOrEmpty(tag.Name)) { tag = SaveTag(tag); } } } else if (rd1.NodeId.ToString().Contains("#EngineeringUnits")) { await ReadUnit(new ReferenceDescription[] { rd, rd1 }, channel, tag); } if (nestingLevel == 1 && !string.IsNullOrEmpty(tag.Name)) { tag = SaveTag(tag); } } if (nestingLevel == 0 && !string.IsNullOrEmpty(tag.Name)) { tag = SaveTag(tag); } OnProgressChanged(new ProgressChangedArgs((allTagsCount - i) * 100 / allTagsCount)); //computing progress percentage } await channel.CloseAsync(); //closing the channel stopwatch.Stop(); OnNewEvent(new LogEventArgs(Tags.Count + " tags read, time elapsed: " + stopwatch.Elapsed.TotalSeconds.ToString("F3") + " s")); } catch (Exception ex) { OnNewEvent(new LogEventArgs("Error connecting to OPC server.")); await channel.AbortAsync(); } return(Tags); }
private async Task LoadChildrenAsync(ReferenceDescriptionViewModel parent) { try { var token = this.cts.Token; await [email protected](token); this.NotifyPropertyChanged("IsLoading"); try { do { try { if (this.session == null || this.session.State != CommunicationState.Opened) { var getEndpointsRequest = new GetEndpointsRequest { EndpointUrl = this.endpointUrl, ProfileUris = new[] { TransportProfileUris.UaTcpTransport } }; var getEndpointsResponse = await UaTcpDiscoveryClient.GetEndpointsAsync(getEndpointsRequest); token.ThrowIfCancellationRequested(); var selectedEndpoint = getEndpointsResponse.Endpoints.OrderByDescending(e => e.SecurityLevel).First(); if (selectedEndpoint.UserIdentityTokens.Any(p => p.TokenType == UserTokenType.Anonymous)) { this.HideLoginPanel(); this.userIdentity = new AnonymousIdentity(); } else if (selectedEndpoint.UserIdentityTokens.Any(p => p.TokenType == UserTokenType.UserName)) { if (!this.showingLoginPanel) { this.ShowLoginPanel(); return; } else if (!this.ValidateLoginCredentials()) { return; } else { this.userIdentity = new UserNameIdentity(this.userName, this.password); } } else { throw new NotImplementedException("Browser supports only UserName and Anonymous identity, for now."); } this.session = new UaTcpSessionChannel( this.localDescription, this.CertificateStore, this.userIdentity, selectedEndpoint); await this.session.OpenAsync(); } token.ThrowIfCancellationRequested(); var browseRequest = new BrowseRequest { NodesToBrowse = new[] { new BrowseDescription { NodeId = ExpandedNodeId.ToNodeId(parent.NodeId, this.session.NamespaceUris), ReferenceTypeId = NodeId.Parse(ReferenceTypeIds.HierarchicalReferences), ResultMask = (uint)BrowseResultMask.All, NodeClassMask = (uint)NodeClass.Variable | (uint)NodeClass.Object | (uint)NodeClass.Method, BrowseDirection = BrowseDirection.Forward, IncludeSubtypes = true } }, RequestedMaxReferencesPerNode = 64 }; var browseResponse = await this.session.BrowseAsync(browseRequest); var refs = browseResponse.Results.Where(result => result.References != null).SelectMany(result => result.References).ToArray(); if (refs.Length == 0) { return; } var nodes = refs.Select(r => ExpandedNodeId.ToNodeId(r.NodeId, this.session.NamespaceUris)).ToArray(); var readTypeRequest = new ReadRequest { NodesToRead = nodes.Select(n => new ReadValueId { NodeId = n, AttributeId = AttributeIds.DataType }).ToArray() }; var readTypeResponse = await this.session.ReadAsync(readTypeRequest); var readRankRequest = new ReadRequest { NodesToRead = nodes.Select(n => new ReadValueId { NodeId = n, AttributeId = AttributeIds.ValueRank }).ToArray() }; var readRankResponse = await this.session.ReadAsync(readRankRequest); var readNotifierRequest = new ReadRequest { NodesToRead = nodes.Select(n => new ReadValueId { NodeId = n, AttributeId = AttributeIds.EventNotifier }).ToArray() }; var readNotifierResponse = await this.session.ReadAsync(readNotifierRequest); var readAccessLevelRequest = new ReadRequest { NodesToRead = nodes.Select(n => new ReadValueId { NodeId = n, AttributeId = AttributeIds.UserAccessLevel }).ToArray() }; var readAccessLevelResponse = await this.session.ReadAsync(readAccessLevelRequest); NodeId dataTypeNode; Type dataType; int valueRank; EventNotifierFlags notifier; AccessLevelFlags accessLevel; ExpandedNodeId dataTypeId; ReferenceDescription dataTypeRef; for (int i = 0; i < refs.Length; i++) { dataTypeNode = readTypeResponse.Results[i].GetValueOrDefault(NodeId.Null); if (dataTypeNode != NodeId.Null) { dataTypeId = NodeId.ToExpandedNodeId(dataTypeNode, this.session.NamespaceUris); if (!UaTcpSecureChannel.DataTypeIdToTypeDictionary.TryGetValue(dataTypeId, out dataType)) { do { dataTypeNode = ExpandedNodeId.ToNodeId(dataTypeId, this.session.NamespaceUris); var browseRequest2 = new BrowseRequest { NodesToBrowse = new[] { new BrowseDescription { NodeId = dataTypeNode, ReferenceTypeId = NodeId.Parse(ReferenceTypeIds.HasSubtype), ResultMask = (uint)BrowseResultMask.None, NodeClassMask = (uint)NodeClass.DataType, BrowseDirection = BrowseDirection.Inverse, IncludeSubtypes = false } } }; var browseResponse2 = await this.session.BrowseAsync(browseRequest2); dataTypeRef = browseResponse2.Results[0].References?.FirstOrDefault(); dataTypeId = dataTypeRef?.NodeId; }while (dataTypeId != null && !UaTcpSecureChannel.DataTypeIdToTypeDictionary.TryGetValue(dataTypeId, out dataType)); if (dataTypeId == null) { dataType = typeof(object); } } valueRank = readRankResponse.Results[i].GetValueOrDefault(-1); if (valueRank == 1) { dataType = dataType.MakeArrayType(); } if (valueRank > 1) { dataType = dataType.MakeArrayType(valueRank); } } else { dataType = typeof(object); } notifier = (EventNotifierFlags)Enum.ToObject(typeof(EventNotifierFlags), readNotifierResponse.Results[i].GetValueOrDefault <byte>()); accessLevel = (AccessLevelFlags)Enum.ToObject(typeof(AccessLevelFlags), readAccessLevelResponse.Results[i].GetValueOrDefault <byte>()); parent.Children.Add(new ReferenceDescriptionViewModel(refs[i], dataType, accessLevel, notifier, parent, this.LoadChildrenAsync)); await Task.Yield(); } var continuationPoints = browseResponse.Results.Select(br => br.ContinuationPoint).Where(cp => cp != null).ToArray(); while (continuationPoints.Length > 0) { token.ThrowIfCancellationRequested(); var browseNextRequest = new BrowseNextRequest { ContinuationPoints = continuationPoints, ReleaseContinuationPoints = false }; var browseNextResponse = await this.session.BrowseNextAsync(browseNextRequest); refs = browseNextResponse.Results.Where(result => result.References != null).SelectMany(result => result.References).ToArray(); if (refs.Length == 0) { return; } nodes = refs.Select(r => ExpandedNodeId.ToNodeId(r.NodeId, this.session.NamespaceUris)).ToArray(); readTypeRequest = new ReadRequest { NodesToRead = nodes.Select(n => new ReadValueId { NodeId = n, AttributeId = AttributeIds.DataType }).ToArray() }; readTypeResponse = await this.session.ReadAsync(readTypeRequest); readRankRequest = new ReadRequest { NodesToRead = nodes.Select(n => new ReadValueId { NodeId = n, AttributeId = AttributeIds.ValueRank }).ToArray() }; readRankResponse = await this.session.ReadAsync(readRankRequest); readNotifierRequest = new ReadRequest { NodesToRead = nodes.Select(n => new ReadValueId { NodeId = n, AttributeId = AttributeIds.EventNotifier }).ToArray() }; readNotifierResponse = await this.session.ReadAsync(readNotifierRequest); readAccessLevelRequest = new ReadRequest { NodesToRead = nodes.Select(n => new ReadValueId { NodeId = n, AttributeId = AttributeIds.UserAccessLevel }).ToArray() }; readAccessLevelResponse = await this.session.ReadAsync(readAccessLevelRequest); for (int i = 0; i < refs.Length; i++) { dataTypeNode = readTypeResponse.Results[i].GetValueOrDefault(NodeId.Null); if (dataTypeNode != NodeId.Null) { dataTypeId = NodeId.ToExpandedNodeId(dataTypeNode, this.session.NamespaceUris); if (!UaTcpSecureChannel.DataTypeIdToTypeDictionary.TryGetValue(dataTypeId, out dataType)) { do { dataTypeNode = ExpandedNodeId.ToNodeId(dataTypeId, this.session.NamespaceUris); var browseRequest2 = new BrowseRequest { NodesToBrowse = new[] { new BrowseDescription { NodeId = dataTypeNode, ReferenceTypeId = NodeId.Parse(ReferenceTypeIds.HasSubtype), ResultMask = (uint)BrowseResultMask.None, NodeClassMask = (uint)NodeClass.DataType, BrowseDirection = BrowseDirection.Inverse, IncludeSubtypes = false } } }; var browseResponse2 = await this.session.BrowseAsync(browseRequest2); dataTypeRef = browseResponse2.Results[0].References?.FirstOrDefault(); dataTypeId = dataTypeRef?.NodeId; }while (dataTypeId != null && !UaTcpSecureChannel.DataTypeIdToTypeDictionary.TryGetValue(dataTypeId, out dataType)); if (dataTypeId == null) { dataType = typeof(object); } } valueRank = readRankResponse.Results[i].GetValueOrDefault(-1); if (valueRank == 1) { dataType = dataType.MakeArrayType(); } if (valueRank > 1) { dataType = dataType.MakeArrayType(valueRank); } } else { dataType = typeof(object); } notifier = (EventNotifierFlags)Enum.ToObject(typeof(EventNotifierFlags), readNotifierResponse.Results[i].GetValueOrDefault <byte>()); accessLevel = (AccessLevelFlags)Enum.ToObject(typeof(AccessLevelFlags), readAccessLevelResponse.Results[i].GetValueOrDefault <byte>()); parent.Children.Add(new ReferenceDescriptionViewModel(refs[i], dataType, accessLevel, notifier, parent, this.LoadChildrenAsync)); await Task.Yield(); } continuationPoints = browseNextResponse.Results.Select(br => br.ContinuationPoint).Where(cp => cp != null).ToArray(); } break; } catch (OperationCanceledException) { } catch (ServiceResultException ex) { Trace.TraceInformation("ServiceResultException: {0}", ex); if (this.session != null) { await this.session.AbortAsync(token); this.session = null; } if (ex.HResult == unchecked ((int)StatusCodes.BadSessionIdInvalid)) { continue; } } catch (Exception ex) { Trace.TraceInformation("Exception {0}", ex); if (this.session != null) { await this.session.AbortAsync(token); this.session = null; } } try { await Task.Delay(5000, token); } catch (OperationCanceledException) { } }while (!token.IsCancellationRequested); } catch (Exception ex) { Trace.TraceInformation("Exception {0}", ex); } finally { [email protected](); this.NotifyPropertyChanged("IsLoading"); } } catch (OperationCanceledException) { } }
public Task SendBrowseCommand(BrowseRequest command, CancellationToken cancellationToken) { return(Task.FromResult(true)); }
/// <summary> /// Master controler interface method to navigate all views /// to the folder indicated in <paramref name="folder"/> /// - updates all related viewmodels. /// </summary> /// <param name="request"></param> /// <param name="requestor"</param> private async Task <FinalBrowseResult> NavigateToFolderAsync(BrowseRequest request, object sender) { // Make sure the task always processes the last input but is not started twice await _SlowStuffSemaphore.WaitAsync(); try { var newPath = request.NewLocation; var cancel = request.CancelTok; if (cancel != null) { cancel.ThrowIfCancellationRequested(); } FolderItemsView.SetExternalBrowsingState(true); FolderTextPath.SetExternalBrowsingState(true); FinalBrowseResult browseResult = null; if (FolderTextPath != sender) { // Navigate Folder ComboBox to this folder browseResult = await FolderTextPath.NavigateToAsync(request); } if (cancel != null) { cancel.ThrowIfCancellationRequested(); } if (FolderItemsView != sender && browseResult.Result == BrowseResult.Complete) { // Navigate Folder/File ListView to this folder browseResult = await FolderItemsView.NavigateToAsync(request); } if (cancel != null) { cancel.ThrowIfCancellationRequested(); } if (browseResult.Result == BrowseResult.Complete) { SelectedFolder = newPath.Path; NaviHistory.Forward(newPath); // Log location into history of recent locations } return(browseResult); } catch (Exception exp) { var result = FinalBrowseResult.FromRequest(request, BrowseResult.InComplete); result.UnexpectedError = exp; return(result); } finally { FolderItemsView.SetExternalBrowsingState(false); FolderTextPath.SetExternalBrowsingState(false); _SlowStuffSemaphore.Release(); } }
/// <summary> /// Initializes the message with the body. /// </summary> public BrowseMessage(BrowseRequest BrowseRequest) { this.BrowseRequest = BrowseRequest; }
private BrowseResult PerformAutoCompleteLookup(string prefix, string indexPath) { FacetHandler handler = new MultiValueFacetHandler("title"); Directory directory = FSDirectory.Open(new System.IO.DirectoryInfo(indexPath)); IndexReader indexReader = IndexReader.Open(directory, true); // decorate it with a bobo index reader BoboIndexReader boboReader = BoboIndexReader.GetInstance(indexReader, new FacetHandler[] { handler }); BrowseRequest browseRequest = new BrowseRequest(); browseRequest.Count = 8; browseRequest.Offset = 0; browseRequest.FetchStoredFields = true; // add a selection BrowseSelection sel = new BrowseSelection("title"); //sel.AddValue("alexey"); browseRequest.AddSelection(sel); // parse a query // NOTE: this was "Entity" originally QueryParser parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "title", new KeywordAnalyzer()); Query q = parser.Parse("SPListItem"); browseRequest.Query = q; // add the facet output specs FacetSpec spec = new FacetSpec(); spec.Prefix = prefix; spec.OrderBy = FacetSpec.FacetSortSpec.OrderHitsDesc; browseRequest.SetFacetSpec("title", spec); // perform browse IBrowsable browser = new BoboBrowser(boboReader); BrowseResult result = browser.Browse(browseRequest); return result; //// Showing results now //Dictionary<String, IFacetAccessible> facetMap = result.FacetMap; //IFacetAccessible colorFacets = facetMap["Body"]; //IEnumerable<BrowseFacet> facetVals = colorFacets.GetFacets(); //Debug.WriteLine("Facets:"); //int count = 0; //foreach (BrowseFacet facet in facetVals) //{ // count++; // Debug.WriteLine(facet.ToString()); //} //Debug.WriteLine("Total = " + count); }
/// <summary> /// Controller can start browser process if IsBrowsing = false /// </summary> /// <param name="request"></param> /// <returns></returns> FinalBrowseResult INavigateable.NavigateTo(BrowseRequest request) { return(InternalNavigateTo(request, false)); }
public BrowseRequest CreateRequest(int minHitCount, BrowseSelection.ValueOperation operation, params string[] terms) { BrowseRequest req = new BrowseRequest(); BrowseSelection sel = new BrowseSelection(AttributeHandlerName); foreach (String term in terms) { sel.AddValue(term); } sel.SetSelectionProperties(selectionProperties); sel.SelectionOperation = (operation); req.AddSelection(sel); req.Count = (50); FacetSpec fs = new FacetSpec(); fs.MinHitCount = (minHitCount); req.SetFacetSpec(AttributeHandlerName, fs); return req; }
/// <summary> /// One of the controls has changed its location in the filesystem. /// This method is invoked to synchronize this change with all other controls. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Control_BrowseEvent(object sender, FileSystemModels.Browse.BrowsingEventArgs e) { var location = e.Location; SelectedFolder = location.Path; if (e.IsBrowsing == false && e.Result == BrowseResult.Complete) { // XXX Todo Keep task reference, support cancel, and remove on end? try { var timeout = TimeSpan.FromSeconds(5); var actualTask = new Task(() => { var request = new BrowseRequest(location, _CancelTokenSourc.Token); var t = Task.Factory.StartNew(() => NavigateToFolderAsync(request, sender), request.CancelTok, TaskCreationOptions.LongRunning, _OneTaskScheduler); if (t.Wait(timeout) == true) { return; } _CancelTokenSourc.Cancel(); // Task timed out so lets abort it return; // Signal timeout here... }); actualTask.Start(); actualTask.Wait(); } catch (System.AggregateException ex) { Logger.Error(ex); } catch (Exception ex) { Logger.Error(ex); } } else { if (e.IsBrowsing == true) { // The sender has messaged: "I am changing location..." // So, we set this property to tell the others: // 1) Don't change your location now (eg.: Disable UI) // 2) We'll be back to tell you the location when we know it if (TreeBrowser != sender) { TreeBrowser.SetExternalBrowsingState(true); } if (FolderTextPath != sender) { FolderTextPath.SetExternalBrowsingState(true); } if (FolderItemsView != sender) { FolderItemsView.SetExternalBrowsingState(true); } } } }
/// <summary> /// Begins an asynchronous invocation of the Browse service. /// </summary> public IAsyncResult BeginBrowse( RequestHeader requestHeader, ViewDescription view, uint requestedMaxReferencesPerNode, BrowseDescriptionCollection nodesToBrowse, AsyncCallback callback, object asyncState) { BrowseRequest request = new BrowseRequest(); request.RequestHeader = requestHeader; request.View = view; request.RequestedMaxReferencesPerNode = requestedMaxReferencesPerNode; request.NodesToBrowse = nodesToBrowse; UpdateRequestHeader(request, requestHeader == null, "Browse"); if (UseTransportChannel) { return TransportChannel.BeginSendRequest(request, callback, asyncState); } return InnerChannel.BeginBrowse(new BrowseMessage(request), callback, asyncState); }
/// <summary> /// Controller can start browser process if IsBrowsing = false /// </summary> /// <param name="request"></param> /// <returns></returns> FinalBrowseResult INavigateable.NavigateTo(BrowseRequest request) { return(PopulateView(request)); }
/// <summary> /// Controller can start browser process if IsBrowsing = false /// </summary> /// <param name="request"></param> /// <returns></returns> async Task <FinalBrowseResult> INavigateable.NavigateToAsync(BrowseRequest request) { return(await Task.Run(() => { return PopulateView(request); })); }
private void ProcessCommand(string line) { if (string.IsNullOrEmpty(line)) { return; } string[] parsed = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); if (parsed.Length == 0) { return; } string cmd = parsed[0]; string[] args = new string[parsed.Length - 1]; if (args.Length > 0) { Array.Copy(parsed, 1, args, 0, args.Length); } if ("help".Equals(cmd, StringComparison.OrdinalIgnoreCase) || "?".Equals(cmd, StringComparison.OrdinalIgnoreCase)) { Console.WriteLine(@"help or ? - prints this message"); Console.WriteLine(@"exit or q - quits"); Console.WriteLine(@"query <query string> - sets query text"); Console.WriteLine(@"facetspec <name>:<minHitCount>,<maxCount>,<isExpand>,<orderby> - add facet spec"); Console.WriteLine(@"page <offset>:<count> - set paging parameters"); Console.WriteLine(@"select <name>:<value1>,<value2>... - add selection, with ! in front of value indicates a not"); Console.WriteLine(@"sort <name>:<dir>,... - set sort specs (false for ascending, true for descending)"); Console.WriteLine(@"showReq: shows current request"); Console.WriteLine(@"clear: clears current request"); Console.WriteLine(@"clearSelections: clears all selections"); Console.WriteLine(@"clearSelection <name>: clear selection specified"); Console.WriteLine(@"clearFacetSpecs: clears all facet specs"); Console.WriteLine(@"clearFacetSpec <name>: clears specified facetspec"); Console.WriteLine(@"browse - executes a search"); } else if ("query".Equals(cmd, StringComparison.OrdinalIgnoreCase)) { if (parsed.Length < 2) { Console.WriteLine(@"query not defined."); } else { string queryString = parsed[1]; if (!string.IsNullOrEmpty(queryString)) { var qparser = new QueryParser(Lucene.Net.Util.Version.LUCENE_CURRENT, "contents", new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_CURRENT)); Query q; try { q = qparser.Parse(queryString); _reqBuilder.Request.Query = q; } catch (Exception e) { Console.WriteLine(e.ToString()); } } } } else if ("facetspec".Equals(cmd, StringComparison.OrdinalIgnoreCase)) { if (parsed.Length < 2) { Console.WriteLine("facetspec not defined."); } else { try { string fspecString = parsed[1]; string[] parts = fspecString.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries); string name = parts[0]; string fvalue = parts[1]; string[] valParts = fvalue.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); if (valParts.Length != 4) { Console.WriteLine(@"spec must of of the form <minhitcount>,<maxcount>,<isExpand>,<orderby>"); } else { int minHitCount = 1; int maxCount = 5; bool expand = false; FacetSpec.FacetSortSpec sort = FacetSpec.FacetSortSpec.OrderHitsDesc; try { minHitCount = int.Parse(valParts[0]); } catch { Console.WriteLine("default min hitcount = 1 is applied."); } try { maxCount = int.Parse(valParts[1]); } catch { Console.WriteLine("default maxCount = 5 is applied."); } try { expand = bool.Parse(valParts[2]); } catch { Console.WriteLine("default expand=false is applied."); } if ("hits".Equals(valParts[3])) { sort = FacetSpec.FacetSortSpec.OrderHitsDesc; } else { sort = FacetSpec.FacetSortSpec.OrderValueAsc; } _reqBuilder.ApplyFacetSpec(name, minHitCount, maxCount, expand, sort); } } catch (Exception e) { Console.WriteLine(e.ToString()); } } } else if ("select".Equals(cmd, StringComparison.OrdinalIgnoreCase)) { if (parsed.Length < 2) { Console.WriteLine("selection not defined."); } else { try { string selString = parsed[1]; string[] parts = selString.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries); string name = parts[0]; string selList = parts[1]; string[] sels = selList.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string sel in sels) { bool isNot = false; string val = sel; if (sel.StartsWith("!")) { isNot = true; val = sel.Substring(1); } if (!string.IsNullOrEmpty(val)) { _reqBuilder.AddSelection(name, val, isNot); } } } catch (Exception e) { Console.WriteLine(e.ToString()); } } } else if ("page".Equals(cmd, StringComparison.OrdinalIgnoreCase)) { try { string pageString = parsed[1]; string[] parts = pageString.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries); _reqBuilder.Offset = int.Parse(parts[0]); _reqBuilder.Count = int.Parse(parts[1]); } catch (Exception e) { Console.WriteLine(e.ToString()); } } else if ("clearFacetSpec".Equals(cmd, StringComparison.OrdinalIgnoreCase)) { if (parsed.Length < 2) { Console.WriteLine("facet spec not defined."); } else { string name = parsed[1]; _reqBuilder.ClearFacetSpec(name); } } else if ("clearSelection".Equals(cmd, StringComparison.OrdinalIgnoreCase)) { if (parsed.Length < 2) { Console.WriteLine("selection name not defined."); } else { string name = parsed[1]; _reqBuilder.ClearSelection(name); } } else if ("clearSelections".Equals(cmd, StringComparison.OrdinalIgnoreCase)) { _reqBuilder.ClearSelections(); } else if ("clearFacetSpecs".Equals(cmd, StringComparison.OrdinalIgnoreCase)) { _reqBuilder.ClearFacetSpecs(); } else if ("clear".Equals(cmd, StringComparison.OrdinalIgnoreCase)) { _reqBuilder.Clear(); } else if ("showReq".Equals(cmd, StringComparison.OrdinalIgnoreCase)) { BrowseRequest req = _reqBuilder.Request; Console.WriteLine(req.ToString()); } else if ("sort".Equals(cmd, StringComparison.OrdinalIgnoreCase)) { if (parsed.Length == 2) { string sortString = parsed[1]; string[] sorts = sortString.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); var sortList = new List <SortField>(); foreach (var sort in sorts) { string[] sortParams = sort.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries); bool rev = false; if (sortParams.Length > 0) { string sortName = sortParams[0]; if (sortParams.Length > 1) { try { rev = bool.Parse(sortParams[1]); } catch (Exception e) { Console.WriteLine(e.Message + ", default rev to false"); } } sortList.Add(new SortField(sortName, SortField.STRING, rev)); } } _reqBuilder.ApplySort(sortList.ToArray()); } else { _reqBuilder.ApplySort(null); } } else if ("browse".Equals(cmd, StringComparison.OrdinalIgnoreCase)) { BrowseRequest req = _reqBuilder.Request; BrowseResult res = _svc.Browse(req); string output = BrowseResultFormatter.FormatResults(res); Console.WriteLine(output); } else { Console.WriteLine("Unknown command: " + cmd + ", do help for list of supported commands"); } }