Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 5
0
        /// <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;
            }
        }
Ejemplo n.º 6
0
        /// <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);
                    }
                }
            }
        }