Пример #1
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);
                    }
                }
            }
        }
Пример #2
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);
                    }
                }
            } 
        }
Пример #3
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);
                    } 
                }  
            } 
        }
Пример #4
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);
                    }
                }
            }
        }