Example #1
0
        public void SendRequest(RequestBody body)
        {
            ConnectToServer();
            StringBuilder sb = new StringBuilder(1000);

            using (StringWriter sw = new StringWriter(sb))
            {
                using (JsonTextWriter jw = new JsonTextWriter(sw))
                {
                    JsonSerializer js = new JsonSerializer();
                    js.ApplyCustomSettings(configuration.SerializerSettings);
                    js.Serialize(jw, body);
                    string commandRequest = sb.ToString();
                    byte[] buffer         = configuration.Encoding.GetBytes(commandRequest);

                    SocketAsyncEventArgs args = new SocketAsyncEventArgs();
                    AutoResetEvent       evt  = new AutoResetEvent(false);
                    args.Completed += delegate
                    {
                        evt.Set();
                    };

                    args.SetBuffer(buffer, 0, buffer.Length);
                    clientSocket.SendAsync(args);
                    evt.WaitOne();
                }
            }
        }
Example #2
0
        public JsonResult(ref object obj, ref int status, ref string message)
        {
            try
            {
                StringBuilder sb = new StringBuilder();
                using (StringWriter writer = new StringWriter(sb))
                {
                    using (JsonWriter jsonWriter = new JsonTextWriter(writer))
                    {
                        var serializer = new JsonSerializer();
                        serializer.ApplyCustomSettings();
                        serializer.Serialize(writer, obj);
                    }
                }

                string json = sb.ToString();//JsonConvert.SerializeObject(obj);
                this.Content = json;
            }
            catch (Exception ex)
            {
                Status  = ResponseStatus.ERROR;
                Message = ex.Message;

                return;
            }

            Status  = status;
            Message = message;
        }
        private List <RequestParameter> NewFillParameters(ref List <RequestParameter> parameters,
                                                          ref string action, ref IController controller)
        {
            MethodInfo method = controller.GetType().GetMethod(action);

            foreach (RequestParameter requestParameter in parameters)
            {
                try
                {
                    ParameterInfo parameterInfo = method
                                                  .GetParameters()
                                                  .FirstOrDefault(p => p.Name.Equals(requestParameter.Name));

                    if (parameterInfo == null)
                    {
                        continue;
                    }

                    if (IsSimpleType(parameterInfo.ParameterType) ||
                        parameterInfo.ParameterType == typeof(List <>) ||
                        parameterInfo.ParameterType.Name.Contains("List"))
                    {
                        RequestParameter tmpParameter = GetRequestParameterFromType(parameterInfo,
                                                                                    requestParameter.Name, requestParameter.Value + "");
                        requestParameter.Value = tmpParameter.Value;
                    }
                    else
                    {
                        ModelRegister model = modelsManager.GetModelRegister(parameterInfo.ParameterType.ToString());
                        if (model == null)
                        {
                            throw new Exception($"Model type '{parameterInfo.ParameterType}', in '{controller.GetType().Name}/{action}' not found or not registered");
                        }

                        using (StringReader sr = new StringReader(requestParameter.Value + ""))
                        {
                            using (JsonReader jr = new JsonTextReader(sr))
                            {
                                JsonSerializer js = new JsonSerializer();
                                js.ApplyCustomSettings();
                                requestParameter.Value = js.Deserialize(jr, parameterInfo.ParameterType);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    logger.WriteLog($"Could not convert parameter '{requestParameter.Name}', required in action '{action}' of controller '{controller.GetType().Name}'. The reason is: {ex.Message}", ServerLogType.ERROR);
                    requestParameter.Value = null;
                }
            }

            return(parameters);
        }
 public ServerResponse ReadResponseInternal(string responseText)
 {
     using (StringReader sr = new StringReader(responseText))
     {
         using (JsonReader jr = new JsonTextReader(sr))
         {
             JsonSerializer js = new JsonSerializer();
             js.ApplyCustomSettings(configuration.SerializerSettings);
             ServerResponse response = js.Deserialize <ServerResponse>(jr);
             return(response);
         }
     }
 }
 public OperationResult GetResultInternal(string responseContent)
 {
     using (StringReader sr = new StringReader(responseContent))
     {
         using (JsonReader jr = new JsonTextReader(sr))
         {
             JsonSerializer js = new JsonSerializer();
             js.ApplyCustomSettings(configuration.SerializerSettings);
             OperationResult result = js.Deserialize <OperationResult>(jr);
             return(result);
         }
     }
 }
 public object GetEntityObjectInternal(string entityJson,
                                       Type entityType = null)
 {
     using (StringReader sr = new StringReader(entityJson))
     {
         using (JsonReader jr = new JsonTextReader(sr))
         {
             JsonSerializer js = new JsonSerializer();
             js.ApplyCustomSettings(configuration.SerializerSettings);
             object entityResult = js.Deserialize(jr, entityType);
             return(entityResult);
         }
     }
 }
Example #7
0
        internal RequestProcessor(ref string uriRequest, ref Socket clientSocket)
        {
            IServiceManager serviceManager = ServiceManager.GetInstance();

            logger             = serviceManager.GetService <ILoggingService>();
            controllerManager  = serviceManager.GetService <IControllerManager>();
            interceptorManager = serviceManager.GetService <IInterceptorManagerService>();
            telemetry          = serviceManager.GetService <ITelemetryDataCollector>();

            typedObjManager   = new TypedObjectsRequestManager();
            this.clientSocket = clientSocket;
            try
            {
                using (StringReader sr = new StringReader(uriRequest))
                {
                    using (JsonReader reader = new JsonTextReader(sr))
                    {
                        JsonSerializer ser = new JsonSerializer();
                        ser.ApplyCustomSettings();
                        requestBody = ser.Deserialize <RequestBody>(reader);
                    }
                }

                this.clientSocket = clientSocket;
                if (requestBody == null)
                {
                    return;
                }

                uriRequest = null;
            }
            catch (Exception ex)
            {
                string msg = ex.Message;
                if (ex.InnerException != null)
                {
                    msg += ex.InnerException.Message;
                    if (ex.InnerException.InnerException != null)
                    {
                        msg += ex.InnerException.InnerException.Message;
                    }
                }

                logger.WriteLog($@"A syntax error was detected while converting the request body to a server object. 
{msg}", ServerLogType.ERROR);
                new SocketRequest().ProcessResponse(ActionResult.Json("", ResponseStatus.ERROR,
                                                                      $@"A syntax error was detected while converting the request body to a server object. 
{msg}"), this.clientSocket, null);
            }
        }
        private void FillValue(object value)
        {
            StringBuilder sb = new StringBuilder(1000);

            using (StringWriter sw = new StringWriter(sb))
            {
                using (JsonWriter jw = new JsonTextWriter(sw))
                {
                    JsonSerializer js = new JsonSerializer();
                    js.ApplyCustomSettings(SerializerSettings);
                    js.Serialize(jw, value);
                }
            }
            Value = sb.ToString();
        }
        public void SendRequest(RequestBody body)
        {
            ConnectToServer();
            StringBuilder sb = new StringBuilder(1000);

            using (StringWriter sw = new StringWriter(sb))
            {
                using (JsonTextWriter jw = new JsonTextWriter(sw))
                {
                    JsonSerializer js = new JsonSerializer();
                    js.ApplyCustomSettings(configuration.SerializerSettings);
                    js.Serialize(jw, body);
                    string commandRequest = sb.ToString();
                    byte[] buffer         = configuration.Encoding.GetBytes(commandRequest);
                    clientSocket.Send(buffer, 0, buffer.Length, SocketFlags.None);
                }
            }
        }
        internal RequestParameter GetRequestParameterFromType(ParameterInfo pInfo,
                                                              string pName, string pValue)
        {
            bool     boolResult;
            int      intResult;
            long     longResult;
            char     charResult;
            decimal  decimalResult;
            double   doubleResult;
            short    shortResult;
            DateTime dateTimeResult;
            Guid     guidResult;

            if (pInfo.ParameterType == typeof(string))
            {
                return(new RequestParameter(pName, pValue));
            }

            if (pInfo.ParameterType == typeof(bool))
            {
                if (bool.TryParse(pValue, out boolResult))
                {
                    return(new RequestParameter(pName, boolResult));
                }
            }

            if (pInfo.ParameterType == typeof(int))
            {
                if (int.TryParse(pValue, out intResult))
                {
                    return(new RequestParameter(pName, intResult));
                }
            }

            if (pInfo.ParameterType == typeof(long))
            {
                if (long.TryParse(pValue, out longResult))
                {
                    return(new RequestParameter(pName, longResult));
                }
            }

            if (pInfo.ParameterType == typeof(char))
            {
                if (char.TryParse(pValue, out charResult))
                {
                    return(new RequestParameter(pName, charResult));
                }
            }

            if (pInfo.ParameterType == typeof(decimal))
            {
                if (decimal.TryParse(pValue, out decimalResult))
                {
                    return(new RequestParameter(pName, decimalResult));
                }
            }

            if (pInfo.ParameterType == typeof(double))
            {
                if (double.TryParse(pValue, out doubleResult))
                {
                    return(new RequestParameter(pName, doubleResult));
                }
            }

            if (pInfo.ParameterType == typeof(short))
            {
                if (short.TryParse(pValue, out shortResult))
                {
                    return(new RequestParameter(pName, shortResult));
                }
            }

            if (pInfo.ParameterType == typeof(byte[]))
            {
                return(new RequestParameter(pName, encoder.ConvertToByteArray(pValue)));
            }

            if (pInfo.ParameterType == typeof(DateTime))
            {
                if (DateTime.TryParse(pValue, out dateTimeResult))
                {
                    return(new RequestParameter(pName, dateTimeResult));
                }
            }

            if (pInfo.ParameterType == typeof(Guid))
            {
                if (Guid.TryParse(pValue, out guidResult))
                {
                    return(new RequestParameter(pName, guidResult));
                }
            }

            if (pInfo.ParameterType == typeof(List <>) ||
                pInfo.ParameterType.Name.Contains("List"))
            {
                var    type     = pInfo.ParameterType.GenericTypeArguments[0];
                Type   typeList = typeof(List <>).MakeGenericType(type);
                object list     = null;

                using (StringReader sr = new StringReader(pValue))
                {
                    using (JsonReader reader = new JsonTextReader(sr))
                    {
                        JsonSerializer ser = new JsonSerializer();
                        ser.ApplyCustomSettings();
                        list = ser.Deserialize(reader, typeList);
                    }
                }

                return(new RequestParameter(pName, list));
            }

            return(null);
        }
        internal void ComputeStatisticks(ActionResult result)
        {
            if (AppServerConfigurator.DisableStatisticsCalculating)
            {
                return;
            }
            if (result.Type == 1)
            {
                return;
            }
            StringBuilder json = new StringBuilder();

            using (StringWriter sw = new StringWriter(json))
            {
                using (JsonWriter jw = new JsonTextWriter(sw))
                {
                    JsonSerializer js = new JsonSerializer();
                    js.ApplyCustomSettings();
                    js.Serialize(jw, result.Content);
                }
            }

            int bufferSize = coreServer.GetConfiguration().BufferSize;

            byte[] bytes             = encoder.ConvertToByteArray(json.ToString());
            int    lenght            = bytes.Length;
            double percentBufferUsed = (lenght / (double)bufferSize) * 100;

            result.ResponseLenght = lenght;
            result.PercentUsage   = percentBufferUsed;

            if (percentBufferUsed >= 100)
            {
                string msg = $@"
The action response on the controller is using around {percentBufferUsed.ToString("N2")}% of the buffer quota configured on the server.
Server Buffer Size: {bufferSize}
Response Size:      {lenght}
Operation has stopped.";

                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(msg);
                Console.ForegroundColor = ConsoleColor.Gray;

                var alert = new ServerAlert
                {
                    Action     = Action,
                    Controller = Controller.GetType().Name,
                    Date       = DateTime.Now,
                    Message    = msg
                };

                ServerAlertManager.CreateAlert(alert);
                throw new Exception(msg);
            }

            if (percentBufferUsed >= 80)
            {
                string msg = $"\nThe action response on the controller is using around {percentBufferUsed.ToString("N2")}% of the buffer quota configured on the server. Review your code as soon as possible before the server collapses and begins to give incomplete responses to connected clients.";
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(msg);
                Console.ForegroundColor = ConsoleColor.Gray;

                var alert = new ServerAlert
                {
                    Action     = Action,
                    Controller = Controller.GetType().Name,
                    Date       = DateTime.Now,
                    Message    = msg
                };

                ServerAlertManager.CreateAlert(alert);
            }
        }