public QueryReply Query <TInput, TOutput>(SearchParameters searchParameters) where TInput : class { var result = _chinookContext.Set <TInput>().AsQueryable().Search(searchParameters).ToList(); var output = result.Adapt <List <TOutput> >(); var reply = new QueryReply(); reply.List.AddRange(output.Select(x => x.Pack())); return(reply); }
public override Task <QueryReply> Query(QueryRequest request, ServerCallContext context) { var inputType = Type.GetType(request.InputType); var outputType = Type.GetType(request.OutputType); if (inputType != null && outputType != null) { var queryMethod = _queryService.GetType().GetMethod("Query").MakeGenericMethod(inputType, outputType); QueryReply queryResult = (QueryReply)queryMethod.Invoke(_queryService, new object[] { new DynamicSearch.Core.SearchParameters() }); return(Task.FromResult(queryResult)); } return(Task.FromResult(new QueryReply())); }
public async Task <QueryReply <TDocument> > QueryAsync(string indexName, QueryParameters parameters) { QueryReply <TDocument> result = null; if (this.GetIndexByName(indexName) != null) { result = await this.AzureSearchService.Indexes[indexName].QueryAsync <TDocument>(parameters); } else { ElmahLogger.LogError(new Exception("QueryAsync against non existent index")); } return(result); }
private async Task <QueryReply> QueryEntryStatus(string entryId) { try { //var res = await httpClient.GetStringAsync($"{servicePath}/{entryId}"); //var resObj = JObject.Parse(res); //if (resObj.Value<int>("code") == 200) //{ // if (resObj["data"][entryId] != null) // { // return new QueryReply() // { // StatusText = resObj["data"][entryId].Value<string>("status"), // DeclareDate = Timestamp.FromDateTime(resObj["data"][entryId].Value<DateTime>("declare_date")) // }; // } //} string strStatus = ""; string strdDate = ""; await Task.Run(() => { GetStatusFromDb(entryId, out strStatus, out strdDate); }); var a = new QueryReply() { StatusText = strStatus, DeclareDate = Timestamp.FromDateTime(DateTime.Parse(strdDate).ToUniversalTime()) }; return(a); } catch (AggregateException ex) { System.Console.WriteLine(ex.Message); } return(null); }
/// <summary> /// Deserialize the message /// </summary> /// <param name="map">An <see cref="OSDMap"/> containing the data</param> public void Deserialize(OSDMap map) { OSDArray agentDataArray = (OSDArray)map["AgentData"]; OSDMap agentDataMap = (OSDMap)agentDataArray[0]; AgentID = agentDataMap["AgentID"].AsUUID(); OSDArray queryDataArray = (OSDArray)map["QueryData"]; OSDMap queryDataMap = (OSDMap)queryDataArray[0]; QueryID = queryDataMap["QueryID"].AsUUID(); OSDArray queryRepliesArray = (OSDArray)map["QueryReplies"]; QueryReplies = new QueryReply[queryRepliesArray.Count]; for (int i = 0; i < queryRepliesArray.Count; i++) { QueryReply reply = new QueryReply(); OSDMap replyMap = (OSDMap)queryRepliesArray[i]; reply.ActualArea = replyMap["ActualArea"].AsInteger(); reply.Auction = replyMap["Auction"].AsBoolean(); reply.ForSale = replyMap["ForSale"].AsBoolean(); reply.Name = replyMap["Name"].AsString(); reply.ParcelID = replyMap["ParcelID"].AsUUID(); reply.ProductSku = replyMap["ProductSKU"].AsString(); reply.SalePrice = replyMap["SalePrice"].AsInteger(); QueryReplies[i] = reply; } }
/// <summary>this method should be polled intermittently. It will receive whatever data is available in the socket /// they could potentially be a partial response in the socket, so the data is stored in a byte buffer /// and only converted to a string if it contains a linefeed /// NOTE: this is probably not robust; a linefeed byte could occur as part of a multibyte character</summary> public void DoReceive() { int available = m_Socket.Available; if (available <= 0) { return; } if (m_ReceiveBuffer.Length < available + m_Received) { Array.Resize(ref m_ReceiveBuffer, available + m_Received); } int received = m_Socket.Receive(m_ReceiveBuffer, m_Received, m_ReceiveBuffer.Length - m_Received, SocketFlags.None); if (received > 0) { m_Received += received; // check for a line feed character... while (m_Received > 0) { Debug.WriteLine("m_Received=" + m_Received); int EOL = Array.IndexOf(m_ReceiveBuffer, (byte)10, 0, m_Received); if (EOL < 0) { break; // from the while loop } string message = Encoding.UTF8.GetString(m_ReceiveBuffer, 0, EOL); Debug.WriteLine("Message received: " + message); if (MessageReceived != null) { MessageReceived.Invoke(this, message); } // remove the used bytes from the buffer if (EOL == m_Received - 1) // the entire buffer was converted to a string. We can just reset { m_Received = 0; } else { // only part of the buffer was used. We need to move the remaining buffer down to the beginning int remaining = m_Received - EOL - 1; byte[] temp = new byte[1024]; Array.ConstrainedCopy(m_ReceiveBuffer, EOL + 1, temp, 0, remaining); m_ReceiveBuffer = temp; m_Received = remaining; } if (!Ready) { // check that the message confirms registration Regex RegistrationReply = new Regex(@"^\s?@\s" + m_ID + @"\s\d+;\s?registered\s" + m_ID + @"\s?(more)?\r?\n?", RegexOptions.IgnoreCase | RegexOptions.Singleline); // eg "@ SAW-1@CCFCLIENT 1321395918375; registered SAW-1@CCFCLIENT more" // "more" is appended if this is a repeat registration if (RegistrationReply.IsMatch(message)) { Ready = true; Registered?.Invoke(this, EventArgs.Empty); Debug.WriteLine("Registered"); } else { Debug.Fail("Unexpected reply to registration attempt: " + message); } } else { // already registered - this should be a response to a Query Response response = new Response(message); QueryReplyEvent replyEvent = new QueryReplyEvent(response); if (response.Valid && response.ContainsUsableResponse) { if (OutstandingQueries.ContainsKey(response.Ref)) { replyEvent.Query = OutstandingQueries[response.Ref]; OutstandingQueries.Remove(response.Ref); Debug.WriteLine("...is reply to outstanding query"); } } QueryReply?.Invoke(this, replyEvent); } } } }