Пример #1
0
 public string GetRawXml(ParameterizedMap map)
 {
     UnboxParameterizedMap param = new UnboxParameterizedMap(map);
     GSMServer.Configuration.IConfiguration config = ObjectPool.Instance.Resolve<GSMServer.Configuration.IConfiguration>();
     string section = param.TryGet<string>("section"); 
     return config.GetRawXml(section); 
 }
Пример #2
0
        private void timerReadQueue_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            lock (portColletion)
            {
                BasicInformation connection = portColletion.Get();
                if (connection == null)
                {
                    return;
                }
                ParameterizedMap param = new ParameterizedMap();
                param.Add("base", connection);

                string           responseOut   = string.Empty;
                Worker.IPipeline currentWorker = ObjectPool.Instance.Resolve <Worker.IPipeline>();
                if (currentWorker != null)
                {
                    responseOut = currentWorker.Pull(param);

                    if (!string.IsNullOrEmpty(responseOut) && (responseOut != "[]"))
                    {
                        OnDataReceived(responseOut);
                    }
                }
            }
        }
Пример #3
0
 public string AfterPull(ParameterizedMap map)
 {
     if (Validate(map))
     {
         return(OnAfterPull(map));
     }
     return(string.Empty);
 }
Пример #4
0
 public string Push(ParameterizedMap map)
 {
     if (Validate(map))
     {
         return(OnPush(map));
     }
     return(string.Empty);
 }
Пример #5
0
 public string Push(ParameterizedMap map)
 {
     if (Validate(map))
     {
         return OnPush(map);
     }
     return string.Empty;
 }
Пример #6
0
 public string AfterPull(ParameterizedMap map)
 {
     if (Validate(map))
     {
         return OnAfterPull(map);
     }
     return string.Empty;
 }
Пример #7
0
 protected bool Validate(ParameterizedMap map)
 {
     if ((map != null))
     {
         BasicInformation connection = map.TryGet <BasicInformation>("base");
         if (connection != null)
         {
             return(true);
         }
     }
     return(false);
 }
Пример #8
0
 protected bool Validate(ParameterizedMap map)
 {
     if ((map != null))
     {
         BasicInformation connection = map.TryGet<BasicInformation>("base");
         if (connection != null)
         {
             return true;
         }
     }
     return false;
 }
Пример #9
0
        public BaseResult<GenericTypeResult<bool>> Delete(ParameterizedMap map)
        {
            UnboxParameterizedMap param = new UnboxParameterizedMap(map);
            GSMCommunication.Feature.SMS sms = new GSMCommunication.Feature.SMS(param.TryGet<BasicInformation>("base"));
            BaseResult<GenericTypeResult<bool>> result = sms.Delete(param.TryGet<int>("index"));
            result.ID = param.TryGet<string>("id");

            IInternalLogging logging = ObjectPool.Instance.Resolve<IInternalLogging>();
            if (logging != null)
                logging.Write(result);

            return result;
        }
Пример #10
0
        public BaseResult<GenericTypeResult<List<string>>> GetPossibleCharacterSet(ParameterizedMap map)
        {
            UnboxParameterizedMap param = new UnboxParameterizedMap(map);
            BasicInformation basic = param.TryGet<BasicInformation>("base");
            BaseResult<GenericTypeResult<List<string>>> result = basic.GetPossibleCharacterSet();
            result.ID = param.TryGet<string>("id");

            IInternalLogging logging = ObjectPool.Instance.Resolve<IInternalLogging>();
            if (logging != null)
            {
                logging.Write(result);
            }
            return result;
        }
Пример #11
0
        public BaseResult<GenericTypeResult<bool>> SetErrorMessageFormat(ParameterizedMap map)
        {
            UnboxParameterizedMap param = new UnboxParameterizedMap(map);
            BasicInformation basic = param.TryGet<BasicInformation>("base");
            BaseResult<GenericTypeResult<bool>> result = basic.SetErrorMessageFormat(param.TryGet<int>("format"));
            result.ID = param.TryGet<string>("id");

            IInternalLogging logging = ObjectPool.Instance.Resolve<IInternalLogging>();
            if (logging != null)
            {
                logging.Write(result);
            }
            return result;
        }
Пример #12
0
        public BaseResult<GenericTypeResult<bool>> SetFunctionality(ParameterizedMap map)
        {
            UnboxParameterizedMap param = new UnboxParameterizedMap(map);
            BasicInformation basic = param.TryGet<BasicInformation>("base");
            BaseResult<GenericTypeResult<bool>> result = basic.SetFunctionality((FunctionalityLevel)Convert.ToInt32(param.TryGet<string>("level")));
            result.ID = param.TryGet<string>("id");

            IInternalLogging logging = ObjectPool.Instance.Resolve<IInternalLogging>();
            if (logging != null)
            {
                logging.Write(result);
            }
            return result;
        }
Пример #13
0
        public BaseResult<USSDResult> SendUSSD(ParameterizedMap map)
        {
            UnboxParameterizedMap param = new UnboxParameterizedMap(map);
            GSMCommunication.Feature.Call call = new GSMCommunication.Feature.Call(param.TryGet<BasicInformation>("base"));
            BaseResult<USSDResult> result = call.SendUSSD(param.TryGet<string>("code"), param.TryGet<string>("number"));
            result.ID = param.TryGet<string>("id");

            IInternalLogging logging = ObjectPool.Instance.Resolve<IInternalLogging>();
            if (logging != null)
            {
                logging.Write(result);
            }
            return result;
        }
Пример #14
0
        public BaseResult<GenericTypeResult<bool>> Answer(ParameterizedMap map)
        {
            UnboxParameterizedMap param = new UnboxParameterizedMap(map);
            GSMCommunication.Feature.Call call = new GSMCommunication.Feature.Call(param.TryGet<BasicInformation>("base"));
            BaseResult<GenericTypeResult<bool>> result = call.Answer();
            result.ID = param.TryGet<string>("id");

            IInternalLogging logging = ObjectPool.Instance.Resolve<IInternalLogging>();
            if (logging != null)
            {
                logging.Write(result);
            }
            return result;
        }
Пример #15
0
        public List<BaseResult<SMSReadResult>> ReadAll(ParameterizedMap map)
        {
            UnboxParameterizedMap param = new UnboxParameterizedMap(map);
            GSMCommunication.Feature.SMS sms = new GSMCommunication.Feature.SMS(param.TryGet<BasicInformation>("base"));
            List<BaseResult<SMSReadResult>> result = sms.Read(SMSStatus.AllMessages);

            IInternalLogging logging = ObjectPool.Instance.Resolve<IInternalLogging>();
            ISMSLogging smsLogging = ObjectPool.Instance.Resolve<ISMSLogging>();
             
            if (smsLogging != null)
                smsLogging.Read(result); 

            return result;
        }
Пример #16
0
        public BaseResult<GenericTypeResult<bool>> SetPhoneBookMemory(ParameterizedMap map)
        {
            UnboxParameterizedMap param = new UnboxParameterizedMap(map);
            GSMCommunication.Feature.PhoneBook pb = new GSMCommunication.Feature.PhoneBook(param.TryGet<BasicInformation>("base"));
            BaseResult<GenericTypeResult<bool>> result = pb.SetPhoneBookMemory(param.TryGet<string>("memory"));
            result.ID = param.TryGet<string>("id");

            IInternalLogging logging = ObjectPool.Instance.Resolve<IInternalLogging>();
            if (logging != null)
            {
                logging.Write(result);
            }
            return result;
        }
Пример #17
0
        public BaseResult<GenericTypeResult<List<PhoneNumberInfo>>> ReadPhoneBook(ParameterizedMap map)
        {
            UnboxParameterizedMap param = new UnboxParameterizedMap(map);
            GSMCommunication.Feature.PhoneBook pb = new GSMCommunication.Feature.PhoneBook(param.TryGet<BasicInformation>("base"));
            BaseResult<GenericTypeResult<List<PhoneNumberInfo>>> result = pb.ReadPhoneBook(param.TryGet<string>("memory"), param.TryGet<int>("fromindex"), param.TryGet<int>("toindex"));
            result.ID = param.TryGet<string>("id");

            IInternalLogging logging = ObjectPool.Instance.Resolve<IInternalLogging>();
            if (logging != null)
            {
                logging.Write(result);
            }
            return result;
        }
Пример #18
0
        public override string OnPull(ParameterizedMap map)
        {
            StringBuilder responseJson  = new StringBuilder();
            bool          deviceRemoved = false;

            GSMCommunication.Feature.BasicInformation basic = map.TryGet <BasicInformation>("base");
            if (basic != null)
            {
                try
                {
                    basic.OnBeginExecuting();
                    List <BaseResult <SMSReadResult> > list = actions.Get <ISMS>().ReadAll(map);
                    actions.Get <ISMS>().DeleteAll(map);
                    responseJson = new StringBuilder(Newtonsoft.Json.JsonConvert.SerializeObject(list));
                }
                catch (System.IO.IOException ex)
                {
                    /// port closed
                    IErrorLogging log = ObjectPool.Instance.Resolve <IErrorLogging>();
                    log.Write(ex.Message + " - pull command (I/O)");
                    log.Write("plug the device...");
                    deviceRemoved = true;
                }
                catch (System.InvalidOperationException ioe)
                {
                    // port closed
                    IErrorLogging log = ObjectPool.Instance.Resolve <IErrorLogging>();
                    log.Write(ioe.Message + " - pull command (invalid operation)");
                    log.Write("plug the device...");
                    deviceRemoved = true;
                }
                finally
                {
                    basic.OnEndExecuting();
                }
            }
            if (deviceRemoved)
            {
                Thread.Sleep(1000);
                IServer server = ObjectPool.Instance.Resolve <IServer>();
                server.OnDeviceRemoved();
            }
            return(responseJson.ToString());
        }
Пример #19
0
        public BaseResult<SMSSendResult> Send(ParameterizedMap map)
        {
            UnboxParameterizedMap param = new UnboxParameterizedMap(map);
            GSMCommunication.Feature.SMS sms = new GSMCommunication.Feature.SMS(param.TryGet<BasicInformation>("base"));
            BaseResult<SMSSendResult> result = null;
            result = sms.Send(param.TryGet<string>("message"), param.TryGet<string>("number"));
            if (result != null)
            {
                result.ID = param.TryGet<string>("id");

                IInternalLogging logging = ObjectPool.Instance.Resolve<IInternalLogging>();
                ISMSLogging smsLogging = ObjectPool.Instance.Resolve<ISMSLogging>();

                if (logging != null)
                    logging.Write(result);
                if (smsLogging != null)
                    smsLogging.Send(result); 

            }
                
            return result;
        }
Пример #20
0
 public override string OnPull(ParameterizedMap map)
 {
     StringBuilder responseJson = new StringBuilder();
     bool deviceRemoved = false;
     GSMCommunication.Feature.BasicInformation basic = map.TryGet<BasicInformation>("base");
     if (basic != null)
     {
         try
         {
             basic.OnBeginExecuting();
             List<BaseResult<SMSReadResult>> list = actions.Get<ISMS>().ReadAll(map);
             actions.Get<ISMS>().DeleteAll(map);
             responseJson = new StringBuilder(Newtonsoft.Json.JsonConvert.SerializeObject(list));
         }
         catch (System.IO.IOException ex)
         {
             /// port closed
             IErrorLogging log = ObjectPool.Instance.Resolve<IErrorLogging>();
             log.Write(ex.Message + " - pull command (I/O)");
             log.Write("plug the device...");
             deviceRemoved = true;
         }
         catch(System.InvalidOperationException ioe)
         {
             // port closed
             IErrorLogging log = ObjectPool.Instance.Resolve<IErrorLogging>();
             log.Write(ioe.Message + " - pull command (invalid operation)");
             log.Write("plug the device...");
             deviceRemoved = true;
         }
         finally
         {
             basic.OnEndExecuting();
         }
     }
     if (deviceRemoved)
     {
         Thread.Sleep(1000);
         IServer server = ObjectPool.Instance.Resolve<IServer>();
         server.OnDeviceRemoved();
     }
     return responseJson.ToString();
 } 
Пример #21
0
 public override string OnAfterPull(ParameterizedMap map)
 {
     throw new NotImplementedException();
 }
Пример #22
0
        public override string OnPush(ParameterizedMap map)
        {
            dynamic       response      = null;
            bool          deviceRemoved = false;
            StringBuilder responseJson  = new StringBuilder();

            GSMCommunication.Feature.BasicInformation basic = map.TryGet <BasicInformation>("base");
            if (basic != null)
            {
                try
                {
                    basic.OnBeginExecuting();
                    List <string> command = map.TryGet <List <string> >("command");

                    if (command.Where(s => s.ToLower() == "help").Any())
                    { // if command contains 'help' word
                        ActionInvoker invoker = actions.ToList().Where(d => d.InterfaceType.Name.ToLower() == command[1].ToLower()).SingleOrDefault();
                        if (invoker != null)
                        {
                            responseJson = new StringBuilder(Newtonsoft.Json.JsonConvert.SerializeObject(invoker.Commands,
                                                                                                         Newtonsoft.Json.Formatting.None,
                                                                                                         new Newtonsoft.Json.JsonSerializerSettings()
                            {
                                ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
                            }));
                        }
                    }
                    else
                    {
                        ActionInvoker invoker = actions.ToList().Where(d => d.InterfaceType.Name.ToLower() == command[0].ToLower()).SingleOrDefault();
                        if (invoker != null)
                        {
                            response = invoker.TryInvoke(command[1], new object[] { map });
                            if (response != null)
                            {
                                responseJson = new StringBuilder(Newtonsoft.Json.JsonConvert.SerializeObject(response,
                                                                                                             Newtonsoft.Json.Formatting.None,
                                                                                                             new Newtonsoft.Json.JsonSerializerSettings()
                                {
                                    ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
                                }));
                            }
                        }
                    }
                }
                catch (UnauthorizedAccessException uae)
                {
                    IErrorLogging log = ObjectPool.Instance.Resolve <IErrorLogging>();
                    log.Write(uae.Message + " - push command (unauthorized access)");
                    log.Write("plug the device...");
                    deviceRemoved = true;
                }
                catch (System.IO.IOException ioe)
                {
                    IErrorLogging log = ObjectPool.Instance.Resolve <IErrorLogging>();
                    log.Write(ioe.Message + " - push command (I/O)");
                    log.Write("plug the device...");
                    deviceRemoved = true;
                }
                finally
                {
                    basic.OnEndExecuting();
                }
            }
            if (deviceRemoved)
            {
                Thread.Sleep(1000);
                IServer server = ObjectPool.Instance.Resolve <IServer>();
                server.OnDeviceRemoved();
            }
            return(responseJson.ToString());
        }
Пример #23
0
 public override string OnBeforePush(ParameterizedMap map)
 { 
     return null;
 }
Пример #24
0
        public override string OnAfterPush(ParameterizedMap map)
        {
            PacketEventArgs packet = map.TryGet<PacketEventArgs>("packet");
            string dataEncode = ASCIIEncoding.GetEncoding("ibm850").GetString(packet.Data);
            Request request = Newtonsoft.Json.JsonConvert.DeserializeObject<Request>(dataEncode, new Newtonsoft.Json.JsonSerializerSettings
            {
                TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Objects
            });

            if (request.QueueWorkItem != null)
            {
                IDbManager dbManager = ObjectPool.Instance.Resolve<IDbManager>();
                IDataCommand db = dbManager.GetDatabase(DatabaseNames.SMSGW);

                if (request.QueueWorkItem.Schedule == null && !string.IsNullOrEmpty(request.QueueWorkItem.SeqNbr))
                { 
                    db.Execute("DeleteQueueWorkItem", new 
                    { 
                        SeqNbr = request.QueueWorkItem.SeqNbr
                    });
                
                }
                else if (request.QueueWorkItem.Schedule != null)
                {
                    db.Execute("UpdateQueueLastExecuted", new 
                    { 
                        SeqNbr = request.QueueWorkItem.SeqNbr,
                        Status = "E"
                    });
                    DateTime nextExecuted;

                    if (request.QueueWorkItem.Schedule.GetType() == typeof(MonthlyTrigger))
                    {
                        MonthlyTrigger monthlyItem = (MonthlyTrigger)request.QueueWorkItem.Schedule;
                        string[] daysList = monthlyItem.Days.Split(',');
                        int[] days = Sorting(daysList);

                        for (int i = 0; i <= days.Length - 1; i++)
                        {
                            if (Convert.ToInt32(days[i]) == DateTime.Now.Day 
                                && (request.QueueWorkItem.NextExecuted <= DateTime.Now || request.QueueWorkItem.LastExecuted.Ticks == 0))
                            {
                                int monthIndex = 1;

                                if (monthlyItem.January == 1)
                                    monthIndex = 1;
                                else if (monthlyItem.February == 1)
                                    monthIndex = 2;
                                else if (monthlyItem.March == 1)
                                    monthIndex = 3;
                                else if (monthlyItem.April == 1)
                                    monthIndex = 4;
                                else if (monthlyItem.May == 1)
                                    monthIndex = 5;
                                else if (monthlyItem.June == 1)
                                    monthIndex = 6;
                                else if (monthlyItem.July == 1)
                                    monthIndex = 7;
                                else if (monthlyItem.August == 1)
                                    monthIndex = 8;
                                else if (monthlyItem.September == 1)
                                    monthIndex = 9;
                                else if (monthlyItem.October == 1)
                                    monthIndex = 10;
                                else if (monthlyItem.November == 1)
                                    monthIndex = 11;
                                else if (monthlyItem.December == 1)
                                    monthIndex = 12; 

                                nextExecuted = DateTime.Now.AddYears(1);
                                if (i + 1 < days.Length)
                                {
                                    nextExecuted = DateTime.Now.AddDays(days[i + 1]);
                                }
                                else 
                                {
                                    if (DateTime.Now.Month == 12 && monthIndex != 12)
                                    {
                                        nextExecuted = Convert.ToDateTime(string.Format("{0}-{1}-{2} {3}:{4}:{5}", nextExecuted.Year + 1, monthIndex, days[0], nextExecuted.Hour, nextExecuted.Minute, nextExecuted.Second));
                                    } 
                                }

                                db.Execute("UpdateQueueNextExecuted", new
                                {
                                    SeqNbr = request.QueueWorkItem.SeqNbr,
                                    NextExecuted = nextExecuted
                                });  
                                break;
                            }
                        }
                    }
                    else if (request.QueueWorkItem.Schedule.GetType() == typeof(WeeklyTrigger))
                    {
                        WeeklyTrigger weekly = (WeeklyTrigger)request.QueueWorkItem.Schedule;  
                        if (request.QueueWorkItem.NextExecuted.Ticks ==  0)
                            nextExecuted = request.QueueWorkItem.Created;
                        else
                            nextExecuted = request.QueueWorkItem.NextExecuted;

                        int between = GetBetweenDay(weekly);
                        DateTime recursPoint;
                        nextExecuted = nextExecuted.AddDays(between);

                        if ((nextExecuted - request.QueueWorkItem.RecursPoint).Days >= 7)
                        {
                            between = (7 * weekly.RecursEvery);
                            nextExecuted = nextExecuted.AddDays(between);
                            recursPoint = DateTime.Now;

                            db.Execute("UpdateQueueRecursPoint", new
                            {
                                SeqNbr = request.QueueWorkItem.SeqNbr,
                                RecursPoint = recursPoint
                            });
                        }

                        db.Execute("UpdateQueueNextExecuted", new
                        {
                            SeqNbr = request.QueueWorkItem.SeqNbr,
                            NextExecuted = nextExecuted
                        }); 
                    }
                    else if(request.QueueWorkItem.Schedule.GetType() == typeof(DailyTrigger))
                    {
                        DailyTrigger daily = (DailyTrigger)request.QueueWorkItem.Schedule;
                        if (request.QueueWorkItem.NextExecuted.Ticks == 0)
                            nextExecuted = request.QueueWorkItem.Created;
                        else
                            nextExecuted = request.QueueWorkItem.NextExecuted;

                        nextExecuted = nextExecuted.AddDays(daily.RecursEvery);

                        db.Execute("UpdateQueueNextExecuted", new
                        {
                            SeqNbr = request.QueueWorkItem.SeqNbr,
                            NextExecuted = nextExecuted
                        }); 
                    }
                }
                db.Close();
            }
            return dataEncode;
        }
Пример #25
0
        private void TimerProcessingRequest_Elapsed(object sender, EventArgs e)
        {
            ////ensures that one thread enter a processing request section, in the same time reading sms section may will be occured.
            ////If another thread tries to enter a locked code, it will wait, block, until the object is released.
            lock (portColletion)
            {
                PacketEventArgs workItem = workerPoolManager.GetJob();
                if (workItem != null)
                {
                    BasicInformation currentConnection = portColletion.Get();
                    if (currentConnection != null)
                    {
                        List <string>    command = new List <string>();
                        ParameterizedMap parsingCommand;
                        try
                        {
                            string dataEncode = Encoding.GetEncoding("ibm850").GetString(workItem.Data);

                            Request request = Newtonsoft.Json.JsonConvert.DeserializeObject <Request>(dataEncode, new Newtonsoft.Json.JsonSerializerSettings
                            {
                                TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Objects
                            });
                            ICommandParser <ParameterizedMap> parser = new CommandParser();
                            parsingCommand = parser.Parse(request.QueueWorkItem.Command);

                            DynamicData parameters = new DynamicData();
                            foreach (string key in parsingCommand.ToDictionary().Keys)
                            {
                                if (!key.Equals("Command"))
                                {
                                    parameters.Add(key, parsingCommand.TryGet <object>(key));
                                }
                            }
                            parameters.Add("id", request.QueueWorkItem.SeqNbr == null ? "" : request.QueueWorkItem.SeqNbr);
                            command = parsingCommand.TryGet <string>("Command").Split('.').ToList();

                            ParameterizedMap param = new ParameterizedMap();
                            param.Add("base", currentConnection);
                            param.Add("packet", workItem);
                            param.Add("command", command);
                            param.Add("parameters", parameters);

                            string responseOut;
                            string encrypted;

                            Worker.IPipeline pipe = ObjectPool.Instance.Resolve <Worker.IPipeline>();

                            pipe.BeforePush(param);
                            responseOut = pipe.Push(param);
                            OnDataSent(responseOut.ToString());
                            pipe.AfterPush(param);

                            // send back to client if request workItem is send from tcp
                            if (workItem.Client != null)
                            {
                                Crypter crypter = new Crypter(new DefaultConfigurationKey());
                                encrypted = crypter.Encrypt(responseOut.ToString());
                                try
                                {
                                    this.Send(((IPEndPoint)workItem.Client.RemoteEndPoint).Port, ASCIIEncoding.ASCII.GetBytes(encrypted.ToString()));
                                }
                                catch (System.Net.Sockets.SocketException)
                                {
                                    // client was closed, dont raise error.
                                }
                                catch (ObjectDisposedException)
                                {
                                    // client was closed, dont raise error.
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            RaiseError(currentConnection, ex, "process request");
                        }
                    }
                    else
                    {
                        workerPoolManager.CurrentWorker.Add(workItem);
                    }
                }
            }
        }
Пример #26
0
 public bool Save(ParameterizedMap map)
 {
     GSMServer.Configuration.IConfiguration config = ObjectPool.Instance.Resolve<GSMServer.Configuration.IConfiguration>();
     return config.Save();
 }
Пример #27
0
 public abstract string OnBeforePush(ParameterizedMap map);
Пример #28
0
 public override string OnBeforePush(ParameterizedMap map)
 {
     return(null);
 }
Пример #29
0
        public override string OnAfterPush(ParameterizedMap map)
        {
            PacketEventArgs packet     = map.TryGet <PacketEventArgs>("packet");
            string          dataEncode = ASCIIEncoding.GetEncoding("ibm850").GetString(packet.Data);
            Request         request    = Newtonsoft.Json.JsonConvert.DeserializeObject <Request>(dataEncode, new Newtonsoft.Json.JsonSerializerSettings
            {
                TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Objects
            });

            if (request.QueueWorkItem != null)
            {
                IDbManager   dbManager = ObjectPool.Instance.Resolve <IDbManager>();
                IDataCommand db        = dbManager.GetDatabase(DatabaseNames.SMSGW);

                if (request.QueueWorkItem.Schedule == null && !string.IsNullOrEmpty(request.QueueWorkItem.SeqNbr))
                {
                    db.Execute("DeleteQueueWorkItem", new
                    {
                        SeqNbr = request.QueueWorkItem.SeqNbr
                    });
                }
                else if (request.QueueWorkItem.Schedule != null)
                {
                    db.Execute("UpdateQueueLastExecuted", new
                    {
                        SeqNbr = request.QueueWorkItem.SeqNbr,
                        Status = "E"
                    });
                    DateTime nextExecuted;

                    if (request.QueueWorkItem.Schedule.GetType() == typeof(MonthlyTrigger))
                    {
                        MonthlyTrigger monthlyItem = (MonthlyTrigger)request.QueueWorkItem.Schedule;
                        string[]       daysList    = monthlyItem.Days.Split(',');
                        int[]          days        = Sorting(daysList);

                        for (int i = 0; i <= days.Length - 1; i++)
                        {
                            if (Convert.ToInt32(days[i]) == DateTime.Now.Day &&
                                (request.QueueWorkItem.NextExecuted <= DateTime.Now || request.QueueWorkItem.LastExecuted.Ticks == 0))
                            {
                                int monthIndex = 1;

                                if (monthlyItem.January == 1)
                                {
                                    monthIndex = 1;
                                }
                                else if (monthlyItem.February == 1)
                                {
                                    monthIndex = 2;
                                }
                                else if (monthlyItem.March == 1)
                                {
                                    monthIndex = 3;
                                }
                                else if (monthlyItem.April == 1)
                                {
                                    monthIndex = 4;
                                }
                                else if (monthlyItem.May == 1)
                                {
                                    monthIndex = 5;
                                }
                                else if (monthlyItem.June == 1)
                                {
                                    monthIndex = 6;
                                }
                                else if (monthlyItem.July == 1)
                                {
                                    monthIndex = 7;
                                }
                                else if (monthlyItem.August == 1)
                                {
                                    monthIndex = 8;
                                }
                                else if (monthlyItem.September == 1)
                                {
                                    monthIndex = 9;
                                }
                                else if (monthlyItem.October == 1)
                                {
                                    monthIndex = 10;
                                }
                                else if (monthlyItem.November == 1)
                                {
                                    monthIndex = 11;
                                }
                                else if (monthlyItem.December == 1)
                                {
                                    monthIndex = 12;
                                }

                                nextExecuted = DateTime.Now.AddYears(1);
                                if (i + 1 < days.Length)
                                {
                                    nextExecuted = DateTime.Now.AddDays(days[i + 1]);
                                }
                                else
                                {
                                    if (DateTime.Now.Month == 12 && monthIndex != 12)
                                    {
                                        nextExecuted = Convert.ToDateTime(string.Format("{0}-{1}-{2} {3}:{4}:{5}", nextExecuted.Year + 1, monthIndex, days[0], nextExecuted.Hour, nextExecuted.Minute, nextExecuted.Second));
                                    }
                                }

                                db.Execute("UpdateQueueNextExecuted", new
                                {
                                    SeqNbr       = request.QueueWorkItem.SeqNbr,
                                    NextExecuted = nextExecuted
                                });
                                break;
                            }
                        }
                    }
                    else if (request.QueueWorkItem.Schedule.GetType() == typeof(WeeklyTrigger))
                    {
                        WeeklyTrigger weekly = (WeeklyTrigger)request.QueueWorkItem.Schedule;
                        if (request.QueueWorkItem.NextExecuted.Ticks == 0)
                        {
                            nextExecuted = request.QueueWorkItem.Created;
                        }
                        else
                        {
                            nextExecuted = request.QueueWorkItem.NextExecuted;
                        }

                        int      between = GetBetweenDay(weekly);
                        DateTime recursPoint;
                        nextExecuted = nextExecuted.AddDays(between);

                        if ((nextExecuted - request.QueueWorkItem.RecursPoint).Days >= 7)
                        {
                            between      = (7 * weekly.RecursEvery);
                            nextExecuted = nextExecuted.AddDays(between);
                            recursPoint  = DateTime.Now;

                            db.Execute("UpdateQueueRecursPoint", new
                            {
                                SeqNbr      = request.QueueWorkItem.SeqNbr,
                                RecursPoint = recursPoint
                            });
                        }

                        db.Execute("UpdateQueueNextExecuted", new
                        {
                            SeqNbr       = request.QueueWorkItem.SeqNbr,
                            NextExecuted = nextExecuted
                        });
                    }
                    else if (request.QueueWorkItem.Schedule.GetType() == typeof(DailyTrigger))
                    {
                        DailyTrigger daily = (DailyTrigger)request.QueueWorkItem.Schedule;
                        if (request.QueueWorkItem.NextExecuted.Ticks == 0)
                        {
                            nextExecuted = request.QueueWorkItem.Created;
                        }
                        else
                        {
                            nextExecuted = request.QueueWorkItem.NextExecuted;
                        }

                        nextExecuted = nextExecuted.AddDays(daily.RecursEvery);

                        db.Execute("UpdateQueueNextExecuted", new
                        {
                            SeqNbr       = request.QueueWorkItem.SeqNbr,
                            NextExecuted = nextExecuted
                        });
                    }
                }
                db.Close();
            }
            return(dataEncode);
        }
Пример #30
0
 public abstract string OnBeforePush(ParameterizedMap map);
Пример #31
0
 public override string OnAfterPull(ParameterizedMap map)
 {
     throw new NotImplementedException();
 }
Пример #32
0
        private void timerReadQueue_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            lock (portColletion)
            {
                BasicInformation connection = portColletion.Get();
                if (connection == null) return;
                ParameterizedMap param = new ParameterizedMap();
                param.Add("base", connection);

                string responseOut = string.Empty;
                Worker.IPipeline currentWorker = ObjectPool.Instance.Resolve<Worker.IPipeline>();
                if (currentWorker != null)
                { 
                    responseOut = currentWorker.Pull(param);

                    if (!string.IsNullOrEmpty(responseOut) && (responseOut != "[]"))
                    {
                        OnDataReceived(responseOut);
                    } 
                }  
            } 
        }
Пример #33
0
        private void TimerProcessingRequest_Elapsed(object sender, EventArgs e)
        {  
            ////ensures that one thread enter a processing request section, in the same time reading sms section may will be occured.
            ////If another thread tries to enter a locked code, it will wait, block, until the object is released.
            lock(portColletion)
            {
                PacketEventArgs workItem = workerPoolManager.GetJob();
                if (workItem != null)
                { 
                    BasicInformation currentConnection = portColletion.Get();
                    if (currentConnection != null)
                    {
                        List<string> command = new List<string>();
                        ParameterizedMap parsingCommand;
                        try
                        {
                            string dataEncode = Encoding.GetEncoding("ibm850").GetString(workItem.Data);

                            Request request = Newtonsoft.Json.JsonConvert.DeserializeObject<Request>(dataEncode, new Newtonsoft.Json.JsonSerializerSettings
                            {
                                TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Objects
                            });  
                            ICommandParser<ParameterizedMap> parser = new CommandParser();
                            parsingCommand = parser.Parse(request.QueueWorkItem.Command);

                            DynamicData parameters = new DynamicData();
                            foreach (string key in parsingCommand.ToDictionary().Keys)
                            {
                                if (!key.Equals("Command"))
                                {
                                    parameters.Add(key, parsingCommand.TryGet<object>(key));
                                }
                            }
                            parameters.Add("id", request.QueueWorkItem.SeqNbr == null ? "" : request.QueueWorkItem.SeqNbr);
                            command = parsingCommand.TryGet<string>("Command").Split('.').ToList();

                            ParameterizedMap param = new ParameterizedMap();
                            param.Add("base", currentConnection);
                            param.Add("packet", workItem);
                            param.Add("command", command);
                            param.Add("parameters", parameters); 

                            string responseOut;
                            string encrypted;

                            Worker.IPipeline pipe = ObjectPool.Instance.Resolve<Worker.IPipeline>();

                            pipe.BeforePush(param);
                            responseOut = pipe.Push(param); 
                            OnDataSent(responseOut.ToString());
                            pipe.AfterPush(param);

                            // send back to client if request workItem is send from tcp
                            if (workItem.Client != null)
                            {
                                Crypter crypter = new Crypter(new DefaultConfigurationKey());
                                encrypted = crypter.Encrypt(responseOut.ToString());
                                try
                                {
                                    this.Send(((IPEndPoint)workItem.Client.RemoteEndPoint).Port, ASCIIEncoding.ASCII.GetBytes(encrypted.ToString()));
                                }
                                catch (System.Net.Sockets.SocketException)
                                { 
                                    // client was closed, dont raise error. 
                                }
                                catch (ObjectDisposedException)
                                { 
                                    // client was closed, dont raise error.  
                                }  
                            }   
                        }
                        catch (Exception ex)
                        {
                            RaiseError(currentConnection, ex, "process request");
                        }  
                    }
                    else
                    {
                        workerPoolManager.CurrentWorker.Add(workItem);
                    }
                }
            } 
        }
Пример #34
0
        public override string OnPush(ParameterizedMap map)
        {
            dynamic response = null;
            bool deviceRemoved = false;
            StringBuilder responseJson = new StringBuilder(); 
            GSMCommunication.Feature.BasicInformation basic = map.TryGet<BasicInformation>("base");
            if (basic != null)
            {
                try
                {
                    basic.OnBeginExecuting();
                    List<string> command = map.TryGet<List<string>>("command");

                    if (command.Where(s => s.ToLower() == "help").Any())
                    { // if command contains 'help' word
                        ActionInvoker invoker = actions.ToList().Where(d => d.InterfaceType.Name.ToLower() == command[1].ToLower()).SingleOrDefault();
                        if (invoker != null)
                        {
                            responseJson = new StringBuilder(Newtonsoft.Json.JsonConvert.SerializeObject(invoker.Commands, 
                                Newtonsoft.Json.Formatting.None, 
                                new Newtonsoft.Json.JsonSerializerSettings() 
                                { 
                                    ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
                                }));
                        }
                    }
                    else 
                    {
                        ActionInvoker invoker = actions.ToList().Where(d => d.InterfaceType.Name.ToLower() == command[0].ToLower()).SingleOrDefault();
                        if (invoker != null)
                        {
                            response = invoker.TryInvoke(command[1], new object[] { map });
                            if (response != null)
                            {

                                responseJson = new StringBuilder(Newtonsoft.Json.JsonConvert.SerializeObject(response,
                                    Newtonsoft.Json.Formatting.None,
                                    new Newtonsoft.Json.JsonSerializerSettings()
                                    {
                                        ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
                                    }));
                            }
                        }
                    } 
                }
                catch (UnauthorizedAccessException uae)
                {
                    IErrorLogging log = ObjectPool.Instance.Resolve<IErrorLogging>();
                    log.Write(uae.Message + " - push command (unauthorized access)");
                    log.Write("plug the device...");
                    deviceRemoved = true;
                }
                catch (System.IO.IOException ioe)
                {
                    IErrorLogging log = ObjectPool.Instance.Resolve<IErrorLogging>();
                    log.Write(ioe.Message + " - push command (I/O)");
                    log.Write("plug the device...");
                    deviceRemoved = true;
                }
                finally
                {
                    basic.OnEndExecuting();
                }
            } 
            if (deviceRemoved)
            { 
                Thread.Sleep(1000);
                IServer server = ObjectPool.Instance.Resolve<IServer>();
                server.OnDeviceRemoved();
            }
            return responseJson.ToString();
        }