Beispiel #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="queue_owner"></param>
        /// <param name="queue_type"></param>
        /// <param name="issued_host"></param>
        /// <returns></returns>
        public int QStop(QAgency queue_owner, Type queue_type, string issued_host)
        {
            var _result = 0;

            MessageQueue _pushQ = CreateServiceQueue(Subscriber.GetQueuePath(Subscriber.GetStockerQueueName(queue_owner.QueueName)));

            if (_pushQ != null)
            {
                _pushQ.Formatter = new XmlMessageFormatter(new Type[] { queue_type });

                Hashtable _readers = Subscribers.CurrentCacheState;
                foreach (DictionaryEntry _q in _readers)
                {
                    CacheItem _citem = _q.Value as CacheItem;

                    var _agency = _citem.Value as QAgency;
                    if (String.Compare(_agency.IssuedHost, issued_host, true) != 0)
                    {
                        continue;
                    }

                    if (SendRemove(queue_owner, _agency) == true)
                    {
                        if (WriteStorage(_pushQ, _agency) == true)
                        {
                            _result++;
                        }
                    }
                }

                _pushQ.Close();
            }

            return(_result);
        }
Beispiel #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="agency"></param>
        /// <returns></returns>
        public bool AddAgency(QAgency sender, QAgency agency)
        {
            var _result = false;

            lock (SyncRoot)
            {
                var _qpath = QueuePath(agency);
                if (Subscribers.Contains(_qpath) == false)
                {
                    if (agency.Certkey == Guid.Empty)
                    {
                        agency.Certkey = Guid.NewGuid();
                    }

                    agency.IssuedHost = sender.HostName;
                    Subscribers.Add(_qpath, agency);

                    _result = true;
                }
                else
                {
                    agency = Subscribers.GetData(_qpath) as QAgency;
                }

                SendCertKey(sender, agency);
            }

            return(_result);
        }
Beispiel #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="queue_owner"></param>
        /// <param name="args"></param>
        /// <returns></returns>
        public int DoPingTest(QAgency queue_owner, string args)
        {
            var _result = 0;

            foreach (var _q in Subscribers.CurrentCacheState)
            {
                CacheItem _citem = ((DictionaryEntry)_q).Value as CacheItem;

                var _agency = _citem.Value as QAgency;
                if (String.Compare(queue_owner.IssuedHost, _agency.IssuedHost, true) != 0)
                {
                    continue;
                }

                var _qpath = QueuePath(_agency);

                _agency.PingRetry++;

                if (_agency.PingRetry <= PingRetryMax)
                {
                    SendPing(queue_owner, _agency, args);
                    Subscribers.Add(_qpath, _agency);
                }
                else
                {
                    Subscribers.Remove(_qpath);
                    //SendRemove(queue_owner, _agency);
                }

                _result++;
            }

            return(_result);
        }
Beispiel #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="queue_server"></param>
        /// <param name="e"></param>
        public void Insert(QAgency queue_server, ReceiveCompletedEventArgs e)
        {
            var _queuePath = QWriter.QueuePath(queue_server);

            Publishers.Add(_queuePath, queue_server);

            if (e != null && QInsertEvents != null)
            {
                QInsertEvents(this, e);
            }
        }
Beispiel #5
0
        /// <summary>
        ///
        /// </summary>
        public void QStop()
        {
            foreach (DictionaryEntry _q in Publishers.CurrentCacheState)
            {
                CacheItem _citem = _q.Value as CacheItem;

                QAgency _agency = _citem.Value as QAgency;
                QWriter.SendSignOut(QMaster, _agency, _agency.Certkey);

                //Remove(_agency);
            }
        }
Beispiel #6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="queue_server"></param>
        /// <returns></returns>
        public Guid Certkey(QAgency queue_server)
        {
            var _result = Guid.Empty;

            var _queuePath = QWriter.QueuePath(queue_server);

            if (Publishers.Contains(_queuePath) == true)
            {
                QAgency _agency = Publishers.GetData(_queuePath) as QAgency;
                _result = _agency.Certkey;
            }

            return(_result);
        }
Beispiel #7
0
        //-----------------------------------------------------------------------------------------------------------------------------
        //
        //-----------------------------------------------------------------------------------------------------------------------------
        private void Remove(QAgency queue_server, ReceiveCompletedEventArgs e)
        {
            var _queuePath = QWriter.QueuePath(queue_server);

            if (Publishers.Contains(_queuePath) == true)
            {
                Publishers.Remove(_queuePath);
            }

            if (e != null && QRemoveEvents != null)
            {
                QRemoveEvents(this, e);
            }
        }
Beispiel #8
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="queue_server"></param>
        public void QStop(QAgency queue_server)
        {
            Guid _certkey = Certkey(queue_server);

            // I will service out using the certification key.
            if (_certkey != Guid.Empty)
            {
                QWriter.SendSignOut(QMaster, queue_server, _certkey);
            }
            else
            {
                Remove(queue_server, null);
            }
        }
Beispiel #9
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="reader"></param>
 /// <param name="exception"></param>
 /// <param name="command"></param>
 /// <param name="label"></param>
 /// <param name="package"></param>
 /// <param name="app_secific"></param>
 /// <param name="priority"></param>
 /// <returns></returns>
 public bool WritePacket(
     QAgency sender, QAgency reader, string exception, string command, string label,
     XmlPackage package,
     int app_secific = 5, System.Messaging.MessagePriority priority = System.Messaging.MessagePriority.Normal
     )
 {
     using (QMessage _qmessage = new QMessage(sender)
     {
         Command = command,
         Package = package,
         UsePackage = false
     })
     {
         return(WritePacket(_qmessage, reader, exception, label, app_secific, priority));
     }
 }
Beispiel #10
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="user_name"></param>
        /// <returns></returns>
        public QAgency SelectAgencyByUserName(string user_name)
        {
            QAgency _result = null;

            foreach (DictionaryEntry _q in Subscribers.CurrentCacheState)
            {
                CacheItem _citem = _q.Value as CacheItem;

                var _agency = _citem.Value as QAgency;
                if (_agency.UserName == user_name)
                {
                    _result = _agency;
                    break;
                }
            }

            return(_result);
        }
Beispiel #11
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="ip_address">IP주소</param>
        /// <returns></returns>
        public QAgency SelectAgencyByIpAddress(string ip_address)
        {
            QAgency _result = null;

            foreach (DictionaryEntry _q in Subscribers.CurrentCacheState)
            {
                CacheItem _citem = _q.Value as CacheItem;

                var _agency = _citem.Value as QAgency;
                if (_agency.IpAddress == ip_address)
                {
                    _result = _agency;
                    break;
                }
            }

            return(_result);
        }
Beispiel #12
0
        //-----------------------------------------------------------------------------------------------------------------------------
        // selection
        //-----------------------------------------------------------------------------------------------------------------------------

        /// <summary>
        ///
        /// </summary>
        /// <param name="client_id"></param>
        /// <returns></returns>
        public QAgency SelectAgency(Guid client_id)
        {
            QAgency _result = null;

            foreach (DictionaryEntry _q in Subscribers.CurrentCacheState)
            {
                CacheItem _citem = _q.Value as CacheItem;

                var _agency = _citem.Value as QAgency;
                if (_agency.Certkey == client_id)
                {
                    _result = _agency;
                    break;
                }
            }

            return(_result);
        }
Beispiel #13
0
        //-----------------------------------------------------------------------------------------------------------------------------
        // packet
        //-----------------------------------------------------------------------------------------------------------------------------

        /// <summary>
        ///
        /// </summary>
        /// <param name="message"></param>
        /// <param name="reader"></param>
        /// <param name="exception"></param>
        /// <param name="label"></param>
        /// <param name="app_secific"></param>
        /// <param name="priority"></param>
        /// <returns></returns>
        public bool WritePacket(QMessage message, QAgency reader, string exception, string label, int app_secific, MessagePriority priority)
        {
            var _result = false;

            MessageQueue _messageQ = OpenQueue(QueuePath(reader));

            if (_messageQ != null)
            {
                _messageQ.Formatter = new XmlMessageFormatter(new Type[] { typeof(QMessage) });
                //_messageQ.Formatter = new BinaryMessageFormatter();

                message.Exception = exception;
                message.Connected = CUnixTime.UtcNow;

                _result = WriteQueue(_messageQ, message, label, app_secific, priority);
            }

            return(_result);
        }
Beispiel #14
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="queue_owner"></param>
        /// <param name="queue_type"></param>
        /// <param name="issued_host"></param>
        /// <returns></returns>
        public int QStart(QAgency queue_owner, Type queue_type, string issued_host)
        {
            var _result = 0;

            MessageQueue _popQ = CreateServiceQueue(Subscriber.GetQueuePath(Subscriber.GetStockerQueueName(queue_owner.QueueName)));

            if (_popQ != null)
            {
                try
                {
                    _popQ.Formatter = new XmlMessageFormatter(new Type[] { queue_type });

                    Message[] _messages = _popQ.GetAllMessages();
                    foreach (var _message in _messages)
                    {
                        var _agency = _message.Body as QAgency;
                        if (String.Compare(_agency.IssuedHost, issued_host, true) != 0)
                        {
                            continue;
                        }

                        if (SendReset(queue_owner, _agency) == true)
                        {
                            _result++;
                        }
                    }
                }
                catch (MessageQueueException ex)
                {
                    throw new Exception(ex.MessageQueueErrorCode.ToString(), ex);
                }
                catch (Exception)
                {
                }
                finally
                {
                    _popQ.Purge();
                }
            }

            return(_result);
        }
Beispiel #15
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <returns></returns>
        public bool SetPingFlag(QAgency sender)
        {
            var _result = false;

            lock (SyncRoot)
            {
                var _qpath = QueuePath(sender);
                if (Subscribers.Contains(_qpath) == true)
                {
                    var _agency = Subscribers.GetData(_qpath) as QAgency;
                    _agency.PingRetry = 0;

                    Subscribers.Add(_qpath, _agency);

                    _result = true;
                }
            }

            return(_result);
        }
Beispiel #16
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="ip_address">IP주소</param>
        /// <returns></returns>
        public bool ResetAgency(QAgency sender, string ip_address)
        {
            var _result = false;

            var _agency = SelectAgencyByIpAddress(ip_address);

            if (_agency != null)
            {
                lock (SyncRoot)
                {
                    var _qpath = QueuePath(_agency);
                    if (Subscribers.Contains(_qpath) == true)
                    {
                        Subscribers.Remove(_qpath);
                        SendReset(sender, _agency);

                        _result = true;
                    }
                }
            }

            return(_result);
        }
Beispiel #17
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="reader"></param>
        /// <param name="exception"></param>
        /// <param name="command"></param>
        /// <param name="label"></param>
        /// <param name="message"></param>
        /// <param name="kind_of_packing"></param>
        /// <param name="crypto_key"></param>
        /// <param name="app_secific"></param>
        /// <param name="priority"></param>
        /// <returns></returns>
        public bool WritePacket(
            QAgency sender, QAgency reader, string exception, string command, string label,
            string message, MKindOfPacking kind_of_packing = MKindOfPacking.None, string crypto_key = "",
            int app_secific = 5, MessagePriority priority = MessagePriority.Normal
            )
        {
            var _result = false;

            if (String.IsNullOrEmpty(message) == false)
            {
                using (QMessage _qmessage = new QMessage(sender)
                {
                    Command = command,
                    Package = Serialization.SNG.WritePackage <string>(message, kind_of_packing, crypto_key),
                    UsePackage = true
                })
                {
                    _result = WritePacket(_qmessage, reader, exception, label, app_secific, priority);
                }
            }

            return(_result);
        }
Beispiel #18
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="client_id"></param>
        /// <returns></returns>
        public bool RemoveAgency(QAgency sender, Guid client_id)
        {
            var _result = false;

            var _agency = SelectAgency(client_id);

            if (_agency != null)
            {
                lock (SyncRoot)
                {
                    var _qpath = QueuePath(_agency);
                    if (Subscribers.Contains(_qpath) == true)
                    {
                        Subscribers.Remove(_qpath);
                        SendRemove(sender, _agency);

                        _result = true;
                    }
                }
            }

            return(_result);
        }
Beispiel #19
0
        //-----------------------------------------------------------------------------------------------------------------------------
        //
        //-----------------------------------------------------------------------------------------------------------------------------

        /// <summary>
        ///
        /// </summary>
        /// <param name="queue_master"></param>
        public QReader(QAgency queue_master)
        {
            m_qmaster = (QAgency)queue_master.Clone();
        }
Beispiel #20
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="reader"></param>
 /// <param name="exception"></param>
 /// <param name="message"></param>
 /// <returns></returns>
 public bool WriteLogging(QAgency sender, QAgency reader, string exception, string message)
 {
     return(WriteLogging(sender, reader, exception, "write", message));
 }
Beispiel #21
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="queue_server"></param>
 /// <param name="args"></param>
 /// <param name="open_with_purge"></param>
 public void QStart(QAgency queue_server, string args, bool open_with_purge)
 {
     QStart(open_with_purge);
     QWriter.SendSignIn(QMaster, queue_server, args);
 }
Beispiel #22
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="reader"></param>
 /// <param name="message"></param>
 /// <returns></returns>
 public bool WriteLogging(QAgency sender, QAgency reader, string message)
 {
     return(WriteLogging(sender, reader, "L", message));
 }
Beispiel #23
0
 /// <summary>
 /// MSMQ를 통해 명령-메시지를 직접 전달 합니다.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="reader"></param>
 /// <param name="exception"></param>
 /// <param name="command"></param>
 /// <param name="message"></param>
 /// <returns></returns>
 public bool WriteCommand(QAgency sender, QAgency reader, string exception, string command, string message)
 {
     return(WritePacket(sender, reader, exception, command, "CMD", message, MKindOfPacking.Encrypted, "", 1, MessagePriority.High));
 }
Beispiel #24
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="reader"></param>
 /// <param name="certification_key"></param>
 /// <returns></returns>
 public bool SendSignOut(QAgency sender, QAgency reader, Guid certification_key)
 {
     return(WriteCommand(sender, reader, "signout", certification_key.ToString()));
 }
Beispiel #25
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="reader"></param>
 /// <param name="args"></param>
 /// <returns></returns>
 public bool SendSignIn(QAgency sender, QAgency reader, string args)
 {
     return(WriteCommand(sender, reader, "signin", args));
 }
Beispiel #26
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="reader"></param>
 /// <param name="args"></param>
 /// <returns></returns>
 public bool SendPong(QAgency sender, QAgency reader, string args)
 {
     return(WriteCommand(sender, reader, "pong", args));
 }
Beispiel #27
0
        //-----------------------------------------------------------------------------------------------------------------------------
        //
        //-----------------------------------------------------------------------------------------------------------------------------

        /// <summary>
        ///
        /// </summary>
        /// <param name="agency"></param>
        /// <returns></returns>
        public string QueuePath(QAgency agency)
        {
            return(GetRemoteQueuePath(agency.Protocol, agency.IpAddress, agency.QueueName));
        }
Beispiel #28
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="reader"></param>
 /// <returns></returns>
 public bool SendRemove(QAgency sender, QAgency reader)
 {
     return(WriteCommand(sender, reader, "remove", reader.Certkey.ToString()));
 }
Beispiel #29
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="reader"></param>
 /// <param name="command"></param>
 /// <param name="message"></param>
 /// <returns></returns>
 public bool WriteCommand(QAgency sender, QAgency reader, string command, string message)
 {
     return(WriteCommand(sender, reader, "C", command, message));
 }
Beispiel #30
0
        //-----------------------------------------------------------------------------------------------------------------------------
        // common
        //-----------------------------------------------------------------------------------------------------------------------------

        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="agency"></param>
        /// <returns></returns>
        public bool SendCertKey(QAgency sender, QAgency agency)
        {
            return(WriteCommand(sender, agency, "certkey", agency.Certkey.ToString()));
        }