Inheritance: System.MarshalByRefObject, IDisposable
示例#1
0
        public static IDisposable Subscribe(this ISecsDevice device, SecsMessage filter, bool recoverable, Action <SecsMessage> callback)
        {
            var subscription = new SecsEventSubscription(device.ToolId, filter, recoverable, callback);

            device.Subscribe(subscription);
            return(subscription);
        }
示例#2
0
        SerializableDisposable(SerializationInfo info, StreamingContext context)
        {
            this._queuePath                = info.GetString("queuePath");
            this._serverDisposable         = (IServerDisposable)info.GetValue("server", typeof(IServerDisposable));
            this._subscription             = (SecsEventSubscription)info.GetValue("subscription", typeof(SecsEventSubscription));
            this._subscription._disposable = this;

            var serverLease = (ILease)RemotingServices.GetLifetimeService((MarshalByRefObject)_serverDisposable);

            if (serverLease != null)
            {
                serverLease.Register(Sponsor);
            }

            if (_subscription.Recoverable && MessageQueue.Exists(_queuePath))
            {
                var queue = new MessageQueue(_queuePath, true, false)
                {
                    Formatter = new BinaryMessageFormatter()
                };
                queue.ReceiveCompleted += Recover;
                queue.BeginReceive(TimeSpan.FromSeconds(QUEUE_RECEIVE_TIMEOUT));
            }
            else
            {
                if (MessageQueue.Exists(_queuePath))
                {
                    MessageQueue.Delete(_queuePath);
                }
                _serverDisposable.RecoverComplete();
            }
        }
示例#3
0
 public void Dispose() {
     if (!this.IsDisposed) {
         if (_subscription.Recoverable && !MessageQueue.Exists(_queuePath))
             MessageQueue.Create(this._queuePath);
         try {
             _serverDisposable.Dispose();
             var serverLease = (ILease)RemotingServices.GetLifetimeService((MarshalByRefObject)_serverDisposable);
             if (serverLease != null)
                 serverLease.Unregister(Sponsor);
         } catch { } finally {
             _isDisposed = true;
             _subscription = null;
         }
     }
 }
示例#4
0
 public void Dispose()
 {
     if (!this.IsDisposed)
     {
         if (_subscription.Recoverable && !MessageQueue.Exists(_queuePath))
         {
             MessageQueue.Create(this._queuePath);
         }
         try {
             _serverDisposable.Dispose();
             var serverLease = (ILease)RemotingServices.GetLifetimeService((MarshalByRefObject)_serverDisposable);
             if (serverLease != null)
             {
                 serverLease.Unregister(Sponsor);
             }
         } catch { } finally {
             _isDisposed   = true;
             _subscription = null;
         }
     }
 }
示例#5
0
        SerializableDisposable(SerializationInfo info, StreamingContext context) {
            this._queuePath = info.GetString("queuePath");
            this._serverDisposable = (IServerDisposable)info.GetValue("server", typeof(IServerDisposable));
            this._subscription = (SecsEventSubscription)info.GetValue("subscription", typeof(SecsEventSubscription));
            this._subscription._disposable = this;

            var serverLease = (ILease)RemotingServices.GetLifetimeService((MarshalByRefObject)_serverDisposable);
            if (serverLease != null)
                serverLease.Register(Sponsor);

            if (_subscription.Recoverable && MessageQueue.Exists(_queuePath)) {
                var queue = new MessageQueue(_queuePath, true, false) {
                    Formatter = new BinaryMessageFormatter()
                };
                queue.ReceiveCompleted += Recover;
                queue.BeginReceive(TimeSpan.FromSeconds(QUEUE_RECEIVE_TIMEOUT));
            } else {
                if (MessageQueue.Exists(_queuePath))
                    MessageQueue.Delete(_queuePath);
                _serverDisposable.RecoverComplete();
            }
        }
示例#6
0
        const int QUEUE_RECEIVE_TIMEOUT = 3;//second

        public SerializableDisposable(SecsEventSubscription subscription, IServerDisposable serverDisposable) {
            _serverDisposable = serverDisposable;
            _subscription = subscription;
            _queuePath = @".\private$\" + subscription.Id;
        }
示例#7
0
 public static IDisposable Subscribe(this ISecsDevice device, SecsMessage filter, bool recoverable, Action<SecsMessage> callback)
 {
     var subscription = new SecsEventSubscription(device.ToolId, filter, recoverable, callback);
     device.Subscribe(subscription);
     return subscription;
 }
示例#8
0
        const int QUEUE_RECEIVE_TIMEOUT = 3;//second

        public SerializableDisposable(SecsEventSubscription subscription, IServerDisposable serverDisposable)
        {
            _serverDisposable = serverDisposable;
            _subscription     = subscription;
            _queuePath        = @".\private$\" + subscription.Id;
        }