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); }
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); } } } }
public string AfterPull(ParameterizedMap map) { if (Validate(map)) { return(OnAfterPull(map)); } return(string.Empty); }
public string Push(ParameterizedMap map) { if (Validate(map)) { return(OnPush(map)); } return(string.Empty); }
public string Push(ParameterizedMap map) { if (Validate(map)) { return OnPush(map); } return string.Empty; }
public string AfterPull(ParameterizedMap map) { if (Validate(map)) { return OnAfterPull(map); } return string.Empty; }
protected bool Validate(ParameterizedMap map) { if ((map != null)) { BasicInformation connection = map.TryGet <BasicInformation>("base"); if (connection != null) { return(true); } } return(false); }
protected bool Validate(ParameterizedMap map) { if ((map != null)) { BasicInformation connection = map.TryGet<BasicInformation>("base"); if (connection != null) { return true; } } return false; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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()); }
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; }
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(); }
public override string OnAfterPull(ParameterizedMap map) { throw new NotImplementedException(); }
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()); }
public override string OnBeforePush(ParameterizedMap map) { return null; }
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; }
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); } } } }
public bool Save(ParameterizedMap map) { GSMServer.Configuration.IConfiguration config = ObjectPool.Instance.Resolve<GSMServer.Configuration.IConfiguration>(); return config.Save(); }
public abstract string OnBeforePush(ParameterizedMap map);
public override string OnBeforePush(ParameterizedMap map) { return(null); }
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); }
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); } } } }
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); } } } }
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(); }