void Send(Header h) { gotAck = false; gotNack = false; gui.ShowMessage("Command " + Enum.GetName(typeof(OPCODE), h.Opcode) + " sent"); log.Debug("Command " + Enum.GetName(typeof(OPCODE), h.Opcode) + " sent"); switch (h.Opcode) { case OPCODE.RequestMonitoringReport: case OPCODE.IdentifyAndSeparate: monitorReportReceived = false; break; case OPCODE.ConfigureHwfe: hwStateReceived = false; feStatusEeceived = false; break; case OPCODE.ConfigureSwfe: swStateReceived = false; feStatusEeceived = false; break; case OPCODE.StartFe: feStatusEeceived = false; break; } client.Send(MessageExtensions.ToByteArray(h)); }
public void GlobalSetup() { var marshaller = Marshallers.Create((arg) => MessageExtensions.ToByteArray(arg), bytes => new ChatMessage()); var method = new Method <ChatMessage, ChatMessage>(MethodType.Unary, typeof(TestService).FullName, nameof(TestService.SayHello), marshaller, marshaller); _callHandler = new UnaryServerCallHandler <ChatMessage, ChatMessage, TestService>(method); _trailers = new HeaderDictionary(); var messageData = new ChatMessage { Name = "Joe" }.ToByteArray(); _requestStream = new MemoryStream(); MessageHelpers.WriteMessage(_requestStream, messageData); var services = new ServiceCollection(); services.TryAddSingleton <IGrpcServiceActivator <TestService> >(new TestGrpcServiceActivator <TestService>(new TestService())); _requestServices = services.BuildServiceProvider(); _httpContext = new DefaultHttpContext(); _httpContext.RequestServices = _requestServices; _httpContext.Request.Body = _requestStream; _httpContext.Features.Set <IHttpResponseTrailersFeature>(new TestHttpResponseTrailersFeature { Trailers = _trailers }); }
void Send(Header h) { gui.ShowMessage("Command " + Enum.GetName(typeof(OPCODE), h.Opcode) + " sent"); log.Debug("Command " + Enum.GetName(typeof(OPCODE), h.Opcode) + " sent"); gotAck = false; gotNack = false; client.Send(MessageExtensions.ToByteArray(h)); }
void OnConnectSucc() { UnityEngine.Debug.Log("connect success "); PBLoginReq req = new PBLoginReq(); req.Token = token; req.UserId = userId; Packet packet = new Packet(PACKET_TYPE.PACKET_CLLogin, MessageExtensions.ToByteArray(req)); NetClient.Instance.PushPacket(packet); }
public void GlobalSetup() { var marshaller = Marshallers.Create((arg) => MessageExtensions.ToByteArray(arg), bytes => new ChatMessage()); var method = new Method <ChatMessage, ChatMessage>(MethodType.Unary, typeof(TestService).FullName, nameof(TestService.SayHello), marshaller, marshaller); _callHandler = new UnaryServerCallHandler <ChatMessage, ChatMessage, TestService>(method); var services = new ServiceCollection(); services.TryAddSingleton <IGrpcServiceActivator <TestService> >(new TestGrpcServiceActivator <TestService>(new TestService())); _requestServices = services.BuildServiceProvider(); }
static void __Helper_SerializeMessage(IMessage message, grpc.SerializationContext context) { #if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION if (message is IBufferMessage) { context.SetPayloadLength(message.CalculateSize()); MessageExtensions.WriteTo(message, context.GetBufferWriter()); context.Complete(); return; } #endif context.Complete(MessageExtensions.ToByteArray(message)); }
public void GlobalSetup() { var message = new ChatMessage { Name = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed at ligula nec orci placerat mollis. " + "Interdum et malesuada fames ac ante ipsum primis in faucibus. Ut aliquet non nunc id lobortis. " + "In tincidunt ac sapien sit amet consequat. Interdum et malesuada fames ac ante ipsum primis in faucibus. " + "Duis vel tristique ipsum, eget hendrerit justo. Donec accumsan, purus quis cursus auctor, sapien nisi " + "lacinia ligula, ut vehicula lorem augue vel est. Vestibulum finibus ornare vulputate." }; var services = new ServiceCollection(); services.TryAddSingleton <IGrpcInterceptorActivator <UnaryAwaitInterceptor> >(new TestGrpcInterceptorActivator <UnaryAwaitInterceptor>(new UnaryAwaitInterceptor())); var serviceProvider = services.BuildServiceProvider(); var marshaller = Marshallers.Create((arg) => MessageExtensions.ToByteArray(arg), bytes => new ChatMessage()); var method = new Method <ChatMessage, ChatMessage>(MethodType.Unary, typeof(TestService).FullName, nameof(TestService.SayHello), marshaller, marshaller); var result = Task.FromResult(new ChatMessage()); _callHandler = new UnaryServerCallHandler <TestService, ChatMessage, ChatMessage>( method, (service, request, context) => result, ServiceOptions, NullLoggerFactory.Instance, new TestGrpcServiceActivator <TestService>(new TestService()), serviceProvider); _trailers = new HeaderDictionary(); _requestMessage = GetMessageData(message); _requestPipe = new TestPipeReader(); _requestServices = serviceProvider; _httpContext = new DefaultHttpContext(); _httpContext.RequestServices = _requestServices; _httpContext.Request.ContentType = GrpcProtocolConstants.GrpcContentType; _httpContext.Request.Protocol = GrpcProtocolConstants.Http2Protocol; _httpContext.Features.Set <IRequestBodyPipeFeature>(new TestRequestBodyPipeFeature(_requestPipe)); _httpContext.Features.Set <IHttpResponseBodyFeature>(new TestResponseBodyFeature(new TestPipeWriter())); _httpContext.Features.Set <IHttpResponseTrailersFeature>(new TestHttpResponseTrailersFeature { Trailers = _trailers }); SetupHttpContext(_httpContext); }
static void Main(string[] args) { Con c = new Con(); c.connect("127.0.0.1:6667"); while (true) { Package.ChatMessage cm = new Package.ChatMessage { Txt = Console.ReadLine(), Tag = DateTime.Now.Ticks }; c.sendPackage(MessageExtensions.ToByteArray(cm)); } }
public void GlobalSetup() { var services = new ServiceCollection(); services.TryAddSingleton <IGrpcInterceptorActivator <UnaryAwaitInterceptor> >(new TestGrpcInterceptorActivator <UnaryAwaitInterceptor>(new UnaryAwaitInterceptor())); var serviceProvider = services.BuildServiceProvider(); var marshaller = Marshallers.Create((arg) => MessageExtensions.ToByteArray(arg), bytes => new ChatMessage()); var method = new Method <ChatMessage, ChatMessage>(MethodType.Unary, typeof(TestService).FullName, nameof(TestService.SayHello), marshaller, marshaller); var result = Task.FromResult(new ChatMessage()); _callHandler = new UnaryServerCallHandler <TestService, ChatMessage, ChatMessage>( method, (service, request, context) => result, new GrpcServiceMethodOptions(method.Name), ServiceOptions, NullLoggerFactory.Instance, new TestGrpcServiceActivator <TestService>(new TestService()), serviceProvider); _trailers = new HeaderDictionary(); var message = new ChatMessage { Name = "Joe" }; var ms = new MemoryStream(); MessageHelpers.WriteMessage(ms, message); _requestMessage = ms.ToArray(); _requestPipe = new TestPipeReader(); _requestServices = serviceProvider; _httpContext = new DefaultHttpContext(); _httpContext.RequestServices = _requestServices; _httpContext.Request.ContentType = GrpcProtocolConstants.GrpcContentType; _httpContext.Features.Set <IRequestBodyPipeFeature>(new TestRequestBodyPipeFeature(_requestPipe)); _httpContext.Features.Set <IHttpResponseBodyFeature>(new TestResponseBodyFeature(new TestPipeWriter())); _httpContext.Features.Set <IHttpResponseTrailersFeature>(new TestHttpResponseTrailersFeature { Trailers = _trailers }); SetupHttpContext(_httpContext); }
/// <summary> /// Registers a method in GRPC service. /// </summary> /// <typeparam name="TRequest"></typeparam> /// <typeparam name="TResponse"></typeparam> /// <param name="name"></param> /// <param name="handler"></param> protected void RegisterMethod <TRequest, TResponse>(string name, UnaryServerMethod <TRequest, TResponse> handler) where TRequest : class, IMessage <TRequest>, new() where TResponse : class, IMessage <TResponse>, new() { var requestParser = GetOrCreateMessageParser <TRequest>(); var responseParser = GetOrCreateMessageParser <TResponse>(); var method = new Method <TRequest, TResponse>( MethodType.Unary, _serviceName, name, Marshallers.Create((arg) => arg != null ? MessageExtensions.ToByteArray(arg) : Array.Empty <byte>(), requestParser.ParseFrom), Marshallers.Create((arg) => arg != null ? MessageExtensions.ToByteArray(arg) : Array.Empty <byte>(), responseParser.ParseFrom)); _builder.AddMethod(method, handler); }
public bool TrySerialize(IMessage m, out byte[] result) { Type type = ((object)m).GetType(); if (ProtocolMap.identifiers.TryGetValue(type, out int value)) { MemoryStream memoryStream = new MemoryStream(); memoryStream.WriteInt(value, 4, bigIndian: true); byte[] array = MessageExtensions.ToByteArray(m); memoryStream.Write(array, 0, array.Length); result = memoryStream.ToArray(); return(true); } Debug.LogError((object)("Unable to serialize message " + type.Name + ": no known id for it")); result = new byte[0]; return(false); }
/// <summary> /// Gets the client interceptor context for testing purposes. /// </summary> /// <returns>The client interceptor context.</returns> private ClientInterceptorContext <HelloRequest, HelloResponse> GetClientInterceptorContext() { Marshaller <HelloRequest> requestMarshaller = Marshallers.Create( (arg) => MessageExtensions.ToByteArray(arg), HelloRequest.Parser.ParseFrom); Marshaller <HelloResponse> responseMarshaller = Marshallers.Create( (arg) => MessageExtensions.ToByteArray(arg), HelloResponse.Parser.ParseFrom); Method <HelloRequest, HelloResponse> unaryMethod = new Method <HelloRequest, HelloResponse>( MethodType.Unary, TEST_SERVICE, TEST_METHOD, requestMarshaller, responseMarshaller); ClientInterceptorContext <HelloRequest, HelloResponse> context = new ClientInterceptorContext <HelloRequest, HelloResponse>( unaryMethod, TEST_HOST, new CallOptions(TEST_REQUEST_METADATA)); return(context); }
private async Task GenerateAndSendHeadersAsync(ServerCallContext context, int nrOfRows, int nrOfCols, List <ResultDataColumn> resultDataColumns, bool cacheResultInQlik) { //Send TableDescription header TableDescription tableDesc = new TableDescription { NumberOfRows = nrOfRows }; for (int col = 0; col < nrOfCols; col++) { if (String.IsNullOrEmpty(resultDataColumns[col].Name)) { tableDesc.Fields.Add(new FieldDescription { DataType = resultDataColumns[col].DataType }); } else { tableDesc.Fields.Add(new FieldDescription { DataType = resultDataColumns[col].DataType, Name = resultDataColumns[col].Name }); } } var tableMetadata = new Metadata { { new Metadata.Entry("qlik-tabledescription-bin", MessageExtensions.ToByteArray(tableDesc)) } }; if (!cacheResultInQlik) { tableMetadata.Add("qlik-cache", "no-store"); } await context.WriteResponseHeadersAsync(tableMetadata); }
/// <summary> /// Creates a method definition to be called using GRPC. /// </summary> /// <typeparam name="TRequest">type of request message</typeparam> /// <typeparam name="TResponse">type of response message</typeparam> /// <param name="name">name of gRPC method</param> protected Method <TRequest, TResponse> GetOrCreateMethod <TRequest, TResponse>(string name) where TRequest : class, IMessage <TRequest>, new() where TResponse : class, IMessage <TResponse>, new() { if (!_methods.TryGetValue(name, out object method)) { var requestParser = GetOrCreateMessageParser <TRequest>(); var responseParser = GetOrCreateMessageParser <TResponse>(); var clientMethod = new Method <TRequest, TResponse>( MethodType.Unary, _serviceName, name, Marshallers.Create((arg) => arg != null ? MessageExtensions.ToByteArray(arg) : Array.Empty <byte>(), requestParser.ParseFrom), Marshallers.Create((arg) => arg != null ? MessageExtensions.ToByteArray(arg) : Array.Empty <byte>(), responseParser.ParseFrom)); _methods.Add(name, clientMethod); return(clientMethod); } return((Method <TRequest, TResponse>)method); }
private async Task GenerateResult(Sexp RResult, IServerStreamWriter <global::Qlik.Sse.BundledRows> responseStream, ServerCallContext context, bool failIfWrongDataTypeInFirstCol = false, DataType expectedFirstDataType = DataType.Numeric, bool cacheResultInQlik = true) { int nrOfCols = 0; int nrOfRows = 0; ResultDataColumn[] resultDataColumns = null; var names = RResult.Names; if (names != null) { logger.Debug($"Rserve result column names: {String.Join(", ", names)}"); } if (RResult is SexpList) { // Indicating this is a data.frame/matrix response structure. Figure out how many columns, names and data types nrOfCols = RResult.Count; logger.Debug($"Rserve result nrOfColumns: {nrOfCols}"); if (RResult.Attributes != null && RResult.Attributes.Count > 0) { Sexp resObjectNames; if ((names == null || names.Length == 0) && RResult.Attributes.TryGetValue("names", out resObjectNames)) { names = resObjectNames.AsStrings; logger.Debug($"Rserve result column names: {String.Join(", ", names)}"); } Sexp resObjectClass; if (RResult.Attributes.TryGetValue("class", out resObjectClass)) { logger.Debug($"Rserve result object class: {resObjectClass.ToString()}"); } } if (nrOfCols > 0) { var columns = RResult.AsList; resultDataColumns = GetResultDataColumns(ref nrOfRows, names, columns); } } else if (RResult is SexpArrayBool || RResult is SexpArrayDouble || RResult is SexpArrayInt) { nrOfCols = 1; var bundledRows = new BundledRows(); var numerics = RResult.AsDoubles; nrOfRows = numerics.Length; var c = new ResultDataColumn(); c.Name = ""; c.DataType = DataType.Numeric; c.Numerics = numerics; resultDataColumns = new ResultDataColumn[1]; resultDataColumns[0] = c; if (logger.IsTraceEnabled) { var logNumerics = String.Join(", ", numerics); logger.Trace("Numeric result column data[0]: {0}", logNumerics); } } else if (RResult is SexpArrayString) { nrOfCols = 1; var bundledRows = new BundledRows(); var strings = RResult.AsStrings; nrOfRows = strings.Length; var c = new ResultDataColumn(); c.Name = ""; c.DataType = DataType.String; c.Strings = strings; resultDataColumns = new ResultDataColumn[1]; resultDataColumns[0] = c; if (logger.IsTraceEnabled) { var logStrings = String.Join(", ", strings); logger.Trace("String result column data[0]: {0}", logStrings); } } else { logger.Warn($"Rserve result, column data type not recognized: {RResult.GetType().ToString()}"); throw new NotImplementedException(); } if (resultDataColumns != null) { if (failIfWrongDataTypeInFirstCol && expectedFirstDataType != resultDataColumns[0].DataType) { string msg = $"Rserve result datatype mismatch in first column, expected {expectedFirstDataType}, got {resultDataColumns[0].DataType}"; logger.Warn($"{msg}"); throw new RpcException(new Status(StatusCode.InvalidArgument, $"{msg}")); } //Send TableDescription header TableDescription tableDesc = new TableDescription { NumberOfRows = nrOfRows }; for (int col = 0; col < nrOfCols; col++) { if (String.IsNullOrEmpty(resultDataColumns[col].Name)) { tableDesc.Fields.Add(new FieldDescription { DataType = resultDataColumns[col].DataType }); } else { tableDesc.Fields.Add(new FieldDescription { DataType = resultDataColumns[col].DataType, Name = resultDataColumns[col].Name }); } } var tableMetadata = new Metadata { { new Metadata.Entry("qlik-tabledescription-bin", MessageExtensions.ToByteArray(tableDesc)) } }; if (!cacheResultInQlik) { tableMetadata.Add("qlik-cache", "no-store"); } await context.WriteResponseHeadersAsync(tableMetadata); // Send data var bundledRows = new BundledRows(); for (int i = 0; i < nrOfRows; i++) { var row = new Row(); for (int col = 0; col < nrOfCols; col++) { if (resultDataColumns[col].DataType == DataType.Numeric) { row.Duals.Add(new Dual() { NumData = resultDataColumns[col].Numerics[i] }); } else if (resultDataColumns[col].DataType == DataType.String) { row.Duals.Add(new Dual() { StrData = resultDataColumns[col].Strings[i] ?? "" }); } } bundledRows.Rows.Add(row); if (((i + 1) % 2000) == 0) { // Send a bundle await responseStream.WriteAsync(bundledRows); bundledRows = new BundledRows(); } } if (bundledRows.Rows.Count() > 0) { // Send last bundle await responseStream.WriteAsync(bundledRows); } } }
protected virtual Marshaller <ChatMessage> CreateMarshaller() { var marshaller = Marshallers.Create((arg) => MessageExtensions.ToByteArray(arg), bytes => new ChatMessage()); return(marshaller); }
/// <summary> /// Return the results from connector to Qlik Engine /// </summary> private async Task GenerateResult(string request_type, MemoryStream returnedData, IServerStreamWriter <global::Qlik.Sse.BundledRows> responseStream, ServerCallContext context, int reqHash, bool failIfWrongDataTypeInFirstCol = false, DataType expectedFirstDataType = DataType.Numeric, bool cacheResultInQlik = true, ResultDataColumn keyField = null, string keyname = null, bool includeDetail = false, bool rawExplain = false) { int nrOfCols = 0; int nrOfRows = 0; List <ResultDataColumn> resultDataColumns = new List <ResultDataColumn>(); Logger.Info($"{reqHash} - Generate Results"); if (true) { Logger.Debug($"{reqHash} - Extract JSON"); //Convert the stream (json) to dictionary Logger.Info($"{reqHash} - Returned Datasize: {returnedData.Length}"); Logger.Info($"{reqHash} - Request Type: {request_type}"); StreamReader sr = new StreamReader(returnedData); returnedData.Position = 0; var data = sr.ReadToEnd(); Dictionary <string, dynamic> response = JsonConvert.DeserializeObject <Dictionary <string, dynamic> >(data); Logger.Trace($"{reqHash} - Returned Data: {data}"); if (response.ContainsKey("data")) { //Prediction Column var a = new ResultDataColumn(); a.Name = "Prediction"; a.DataType = DataType.String; a.Strings = new List <string>(); //Time Series Columns var seriesId = new ResultDataColumn(); var forecastPoint = new ResultDataColumn(); var rowId = new ResultDataColumn(); var timestamp = new ResultDataColumn(); var forecastDistance = new ResultDataColumn(); if (request_type == "timeseries") { seriesId.Name = "seriesId"; seriesId.DataType = DataType.String; seriesId.Strings = new List <string>(); forecastPoint.Name = "forecastPoint"; forecastPoint.DataType = DataType.String; forecastPoint.Strings = new List <string>(); rowId.Name = "rowId"; rowId.DataType = DataType.String; rowId.Strings = new List <string>(); timestamp.Name = "timestamp"; timestamp.DataType = DataType.String; timestamp.Strings = new List <string>(); forecastDistance.Name = "forecastDistance"; forecastDistance.DataType = DataType.String; forecastDistance.Strings = new List <string>(); } var pe = new ResultDataColumn(); if (rawExplain == true) { pe.Name = $"Prediction Explanations"; pe.DataType = DataType.String; pe.Strings = new List <string>(); } //The first row will determine which fields to return in table for prediction values bool fieldListAgreed = false; //Loop through each response in array (one for each row of input data) foreach (dynamic p in response["data"]) { // **** For debug to display array data on console **** Logger.Info($"{reqHash} {p}"); a.Strings.Add(Convert.ToString(p["prediction"])); // Add Time Series Column Data if (request_type == "timeseries") { seriesId.Strings.Add(Convert.ToString(p["seriesId"])); forecastPoint.Strings.Add(Convert.ToString(p["forecastPoint"])); rowId.Strings.Add(Convert.ToString(p["rowId"])); timestamp.Strings.Add(Convert.ToString(p["timestamp"])); forecastDistance.Strings.Add(Convert.ToString(p["forecastDistance"])); } if (includeDetail == true) { if (fieldListAgreed == false) { foreach (dynamic pv in p["predictionValues"]) { var pvi = new ResultDataColumn(); pvi.Name = $"Prediction value for label: {pv["label"]}"; pvi.DataType = DataType.String; pvi.Strings = new List <string>(); resultDataColumns.Add(pvi); } fieldListAgreed = true; Logger.Trace($"{reqHash} - Columns: {resultDataColumns.Count}"); } //Loop through each predicted value and insert the row values to the column int index = 0; foreach (dynamic pv in p["predictionValues"]) { resultDataColumns[index].Strings.Add(Convert.ToString(pv["value"])); index++; } } if (rawExplain == true) { pe.Strings.Add(Convert.ToString(p["predictionExplanations"])); } } if (keyname != null) { resultDataColumns.Add(keyField); } if (rawExplain == true) { resultDataColumns.Add(pe); } // Add Time Series Columns to resultData if (request_type == "timeseries") { resultDataColumns.Add(seriesId); resultDataColumns.Add(forecastPoint); resultDataColumns.Add(rowId); resultDataColumns.Add(timestamp); resultDataColumns.Add(forecastDistance); } resultDataColumns.Add(a); } else if (response.ContainsKey("response")) { var a = new ResultDataColumn(); a.Name = "Result"; a.DataType = DataType.String; a.Strings = new List <string>(); a.Strings.Add(Convert.ToString(response["response"]["id"])); resultDataColumns.Add(a); } else { if (response.ContainsKey("message")) { throw new Exception($"The following error message was returned from DataRobot: {response["message"]}"); } else { throw new Exception($"An Unknown Error Occured: {data}"); } } nrOfRows = resultDataColumns[0].DataType == DataType.String ? resultDataColumns[0].Strings.Count : resultDataColumns[0].Numerics.Count; nrOfCols = resultDataColumns.Count; Logger.Debug($"{reqHash} - Result Number of Columns: {nrOfCols}"); } if (resultDataColumns != null) { if (failIfWrongDataTypeInFirstCol && expectedFirstDataType != resultDataColumns[0].DataType) { string msg = $"Result datatype mismatch in first column, expected {expectedFirstDataType}, got {resultDataColumns[0].DataType}"; Logger.Warn($"{reqHash} - {msg}"); throw new RpcException(new Status(StatusCode.InvalidArgument, $"{msg}")); } //Send TableDescription header TableDescription tableDesc = new TableDescription { NumberOfRows = nrOfRows }; for (int col = 0; col < nrOfCols; col++) { if (String.IsNullOrEmpty(resultDataColumns[col].Name)) { tableDesc.Fields.Add(new FieldDescription { DataType = resultDataColumns[col].DataType }); } else { tableDesc.Fields.Add(new FieldDescription { DataType = resultDataColumns[col].DataType, Name = resultDataColumns[col].Name }); } } var tableMetadata = new Metadata { { new Metadata.Entry("qlik-tabledescription-bin", MessageExtensions.ToByteArray(tableDesc)) } }; if (!cacheResultInQlik) { tableMetadata.Add("qlik-cache", "no-store"); } await context.WriteResponseHeadersAsync(tableMetadata); // Send data var bundledRows = new BundledRows(); for (int i = 0; i < nrOfRows; i++) { var row = new Row(); for (int col = 0; col < nrOfCols; col++) { if (resultDataColumns[col].DataType == DataType.Numeric) { row.Duals.Add(new Dual() { NumData = resultDataColumns[col].Numerics[i] }); } else if (resultDataColumns[col].DataType == DataType.String) { row.Duals.Add(new Dual() { StrData = resultDataColumns[col].Strings[i] ?? "" }); } } bundledRows.Rows.Add(row); if (((i + 1) % 2000) == 0) { // Send a bundle await responseStream.WriteAsync(bundledRows); bundledRows = null; bundledRows = new BundledRows(); } } if (bundledRows.Rows.Count() > 0) { // Send last bundle await responseStream.WriteAsync(bundledRows); bundledRows = null; } } }
public static MessagePacket CreateQueryMessage(string userID, int contractID, IMessage body = null) { return(new MessagePacket(userID, GloblParams.CurrentClientType, MessageType.Query_Req, contractID, (body == null) ? null : MessageExtensions.ToByteArray(body))); }