public TerminalCommandResponse AddModbusDevice(GTSetConfigurationRequest request)
        {
            var config = WebApiServerConfigurationManager.Instance.Configurations;
            TerminalCommandRequest commandRequest = new TerminalCommandRequest();

            commandRequest.TerminalId = request.TerminalId;
            try
            {
                if (!(request.RequestType == GatewayRequestType.TerminalCommand &&
                      request.CommandType == GTCommandType.AddModbusDevice))
                {
                    return(new TerminalCommandResponse
                    {
                        RequestType = request.RequestType,
                        RequestId = request.RequestId,
                        Message = "Invalid Request Type",
                        ResponseStatus = ResponseStatus.Failed,
                        TerminalId = request.TerminalId
                    });
                }
                commandRequest.Data = GTCommandFactory.CreateSetCommand(request.TerminalId, request.Data, request.CommandType);
                return(TerminalRequestHandler.SendGTCommandRequest(commandRequest, request.CommandType));
            }
            catch (Exception ex)
            {
                return(new TerminalCommandResponse
                {
                    RequestId = commandRequest.RequestId,
                    Data = null,
                    RequestType = commandRequest.RequestType,
                    ResponseStatus = ResponseStatus.Failed,
                    Message = ex.Message
                });
            }
        }
        public TerminalCommandResponse SetConfiguration(GTSetConfigurationRequest request)
        {
            var config = WebApiServerConfigurationManager.Instance.Configurations;
            TerminalCommandRequest commandRequest = new TerminalCommandRequest();

            commandRequest.TerminalId = request.TerminalId;
            try
            {
                if (request.RequestType != GatewayRequestType.TerminalCommand)
                {
                    return(new TerminalCommandResponse
                    {
                        RequestType = request.RequestType,
                        RequestId = request.RequestId,
                        Message = "Invalid Request Type",
                        ResponseStatus = ResponseStatus.Failed,
                        TerminalId = request.TerminalId
                    });
                }

                if (request.CommandType == GTCommandType.GeneralSettings ||
                    request.CommandType == GTCommandType.ExtendedConfigurationSettings ||
                    request.CommandType == GTCommandType.PollingAndGprsSettings ||
                    request.CommandType == GTCommandType.Reset ||
                    request.CommandType == GTCommandType.ResetRom ||
                    request.CommandType == GTCommandType.SimAndServerSettings ||
                    request.CommandType == GTCommandType.WatchdogSettings)
                {
                    commandRequest.Data = GTCommandFactory.CreateSetCommand(request.TerminalId, request.Data, request.CommandType);
                    var response = TerminalRequestHandler.SendGTCommandRequest(commandRequest, request.CommandType);
                    response.RequestId = request.RequestId;
                    return(response);
                }
                else
                {
                    return(new TerminalCommandResponse
                    {
                        RequestType = request.RequestType,
                        RequestId = request.RequestId,
                        Message = "Invalid Request Type",
                        ResponseStatus = ResponseStatus.Failed,
                        TerminalId = request.TerminalId
                    });
                }
            }
            catch (Exception ex)
            {
                return(new TerminalCommandResponse
                {
                    RequestId = commandRequest.RequestId,
                    Data = null,
                    RequestType = commandRequest.RequestType,
                    ResponseStatus = ResponseStatus.Failed,
                    Message = ex.Message
                });
            }
        }
        public void FirsLevelParsing()
        {
            //CGRC00 cgrc00 = new CGRC00();
            //CGRC01 cgrc01 = new CGRC01();
            //CGRC02 cgrc02 = new CGRC02();

            string raw    = "SP333444<CGRC(ID(00,17/01/2021,07:51:07)N(+923333451191,+923468220229,+923333404763,,,,,,,,SR117R00BL01R00,13-Jan-16,16:27:21,+923,internet,,,+923,internet,,,333444,+923333451191,67.23.248.114,30004,SPMX00DT,SPMX01DT,,,,,,,1,15,2,4,30,9600,15,2)L(1000101101000000000001000000000000))\r>";
            var    packet = ParsingManager.FirstLevelParser(raw);

            var list = GTCommandFactory.GetConfiguration(packet);
            //cgrc00.Parse(packet.Data);
            //cgrc01.Parse(packet.Data);
            //cgrc02.Parse(packet.Data);
        }
        public TerminalCommandResponse GetModbusDevice(GTGetModbusDeviceRequest request)
        {
            var config = WebApiServerConfigurationManager.Instance.Configurations;
            TerminalCommandRequest commandRequest = new TerminalCommandRequest();

            commandRequest.TerminalId = request.TerminalId;
            try
            {
                if (request.CommandType == GTCommandType.GetModbusDevice)
                {
                    commandRequest.Data = GTCommandFactory.CreateGetModbusDeviceCommand(request.TerminalId, request.StartIndex, 1);
                    var response = TerminalRequestHandler.SendGTCommandRequest(commandRequest, request.CommandType);
                    return(response);
                }
                else if (request.CommandType == GTCommandType.GetMultipleModbusDevices)
                {
                    commandRequest.Data = GTCommandFactory.CreateGetModbusDeviceCommand(request.TerminalId, request.StartIndex, request.NumberOfDevices);
                    var response = TerminalRequestHandler.SendGTCommandRequest(commandRequest, request.CommandType);
                    return(response);
                }
                else
                {
                    return(new TerminalCommandResponse
                    {
                        RequestId = commandRequest.RequestId,
                        Data = null,
                        RequestType = commandRequest.RequestType,
                        ResponseStatus = ResponseStatus.Failed,
                        Message = "Invalid Command Request"
                    });
                }
            }
            catch (Exception ex)
            {
                return(new TerminalCommandResponse
                {
                    RequestId = commandRequest.RequestId,
                    Data = null,
                    RequestType = commandRequest.RequestType,
                    ResponseStatus = ResponseStatus.Failed,
                    Message = ex.Message
                });
            }
        }
 public void ParseModbusGetCommand()
 {
     var cmd1 = GTCommandFactory.CreateGetModbusDeviceCommand("SP111111", 1, 1);
     var cmd2 = GTCommandFactory.CreateGetModbusDeviceCommand("SP111111", 1, 5);
     var cmd3 = GTCommandFactory.CreateGetModbusDeviceCommand("SP111111", 10, 5);
 }
        public static TerminalCommandResponse SendGTCommandRequest(TerminalCommandRequest commandRequest,
                                                                   GTCommandType commandType)
        {
            var config = WebApiServerConfigurationManager.Instance.Configurations;
            TerminalCommandResponse response = new TerminalCommandResponse();

            try
            {
                var connected = WebServer.server.ChannelKeys.Contains(commandRequest.TerminalId);
                if (!connected)
                {
                    return(new TerminalCommandResponse
                    {
                        RequestId = commandRequest.RequestId,
                        Data = null,//commandRequest.Data,
                        RequestType = commandRequest.RequestType,
                        ResponseStatus = ResponseStatus.Failed,
                        Message = "Site not connected."
                    });
                }
                var cmd = TerminalCommandHandler.Instance.Find(commandRequest.TerminalId);
                if (cmd != null)
                {
                    return(new TerminalCommandResponse
                    {
                        RequestId = commandRequest.RequestId,
                        Data = commandRequest.Data,
                        RequestType = commandRequest.RequestType,
                        ResponseStatus = ResponseStatus.Failed,
                        Message = "Another configuration already in process. Please try again later"
                    });
                }
                TerminalCommandHandler.Instance.Add(new TerminalCommand
                {
                    RequestData       = commandRequest.Data,
                    TerminalId        = commandRequest.TerminalId,
                    RequestReceivedOn = DateTimeHelper.CurrentUniversalTime,
                    Status            = CommandStatus.RequestReceived
                });
                WebServer.server.Notify(commandRequest);

                int retries = config.TerminalCommandRetries;
                while (retries > 0)
                {
                    retries--;
                    try
                    {
                        var command = TerminalCommandHandler.Instance.Find(commandRequest.TerminalId);
                        if (command.Status == CommandStatus.ResponseReceived)
                        {
                            TerminalCommandHandler.Instance.Remove(commandRequest.TerminalId);
                            var   data     = command.ResponseData;
                            ICGRC gtConfig = null;
                            if (!string.IsNullOrEmpty(data))
                            {
                                var packet = ParsingManager.FirstLevelParser(data);
                                gtConfig = GTCommandFactory.GetConfiguration(packet, commandType);
                            }
                            return(new TerminalCommandResponse
                            {
                                RequestId = commandRequest.RequestId,
                                Data = gtConfig,
                                RequestType = commandRequest.RequestType,
                                ResponseStatus = ResponseStatus.Success,
                                Message = "Response Received",
                                TerminalId = command.TerminalId
                            });
                        }
                    }
                    catch (Exception ex)
                    {
                        return(new TerminalCommandResponse
                        {
                            RequestId = commandRequest.RequestId,
                            Data = null,
                            RequestType = commandRequest.RequestType,
                            ResponseStatus = ResponseStatus.Failed,
                            Message = ex.Message
                        });
                    }
                    Thread.Sleep(config.TerminalCommandRetryIntervalInSeconds * 1000);
                }

                TerminalCommandHandler.Instance.Remove(commandRequest.TerminalId);
                return(new TerminalCommandResponse
                {
                    RequestId = commandRequest.RequestId,
                    Data = null,
                    RequestType = commandRequest.RequestType,
                    ResponseStatus = ResponseStatus.Failed,
                    Message = "Request Timed Out",
                    TerminalId = commandRequest.TerminalId
                });
            }
            catch (Exception ex)
            {
                return(new TerminalCommandResponse
                {
                    RequestId = commandRequest.RequestId,
                    Data = null,
                    RequestType = commandRequest.RequestType,
                    ResponseStatus = ResponseStatus.Failed,
                    Message = ex.Message
                });
            }
        }