/// <summary>
 /// Initializes the event listener.
 /// </summary>
 /// <param name="db"></param>
 /// <param name="address"></param>
 /// <param name="port"></param>
 /// <param name="parallel"></param>
 /// <param name="garbageHandling"></param>
 public void Initialize(IEventTemplateDB db
     , IPAddress address
     , int port
     , bool parallel
     , ListenerGarbageHandling garbageHandling)
 {
     TemplateDB = db;
     Address = address;
     Port = port;
     IsParallel = parallel;
     Initialize();
 }
 public static MulticastEventEmitter CreateInitialized(SupportedEncoding enc
     , bool validate
     , IEventTemplateDB db
     , IPAddress multicastAddress
     , int multicastPort
     , int multicastTtl
     , bool parallel)
 {
     if (db == null) throw new ArgumentNullException("db", "db cannot be null");
     var result = new MulticastEventEmitter();
     result.InitializeAll(enc, validate, db, multicastAddress, multicastPort, multicastTtl, parallel);
     return result;
 }
        /// <summary>
        /// Initializes the instance.
        /// </summary>
        /// <param name="db"></param>
        /// <param name="multicastAddress"></param>
        /// <param name="multicastPort"></param>
        /// <param name="parallel"></param>
        /// <param name="garbageHandling"></param>
        public void InitializeAll(IEventTemplateDB db
            , IPAddress multicastAddress
            , int multicastPort
            , bool parallel
            , ListenerGarbageHandling garbageHandling)
        {
            this.TraceData(TraceEventType.Verbose, () =>
            {
                return new object[] { String.Concat("MulticastEventListener Initializing"
                    , Environment.NewLine, "\twith multicastAddress = ", multicastAddress
                    , Environment.NewLine, "\tand multicastPort = ", multicastPort
                    , Environment.NewLine, "\tand parallel = ", parallel
                    , Environment.NewLine, "\tand garbageHandling = ", garbageHandling
                    ) };
            });

            TemplateDB = db;
            Address = multicastAddress;
            Port = multicastPort;
            IsParallel = parallel;
            Initialize();

            this.TraceData(TraceEventType.Verbose, "MulticastEventListener Initialized");
        }
Beispiel #4
0
 public void Start(IEventTemplateDB db, IPEndPoint sendToEP, Action<Socket, IPEndPoint> finishSocket)
 {
     this.TraceData(TraceEventType.Verbose, "EventEmitterBase.ParallelEmitter - Starting");
     _db = db;
     _sendToEP = sendToEP;
     _emitEP = new UdpEndpoint(sendToEP).Initialize(finishSocket);
     _emitterState.SetState(EmitterState.Active);
     this.TraceData(TraceEventType.Verbose, "EventEmitterBase.ParallelEmitter - Started");
 }
        /// <summary>
        /// Initializes the emitter.
        /// </summary>
        /// <param name="enc">indicates the encoding to user for character data</param>
        /// <param name="validate">indicates whether the emitter performs validation</param>
        /// <param name="db">tempate db used to create events</param>
        /// <param name="multicastAddress">a multicast address where events will be emitted</param>
        /// <param name="multicastPort">a multicast port where events will be emitted</param>
        /// <param name="multicastTtl">the time-to-live used during multicast</param>
        /// <param name="parallel">indicates whether the emitter can use a parallel strategy
        /// when emitting</param>
        public void InitializeAll(SupportedEncoding enc, bool validate, IEventTemplateDB db
            , IPAddress multicastAddress
            , int multicastPort
            , int multicastTtl
            , bool parallel)
        {
            this.TraceData(TraceEventType.Verbose, () =>
            {
                return new object[] { String.Concat("MulticastEventEmitter Initializing"
                    , Environment.NewLine, "\twith validate = ", validate
                    , Environment.NewLine, "\tand encoding = ", enc
                    , Environment.NewLine, "\tand multicastAddress = ", multicastAddress
                    , Environment.NewLine, "\tand multicastPort = ", multicastPort
                    , Environment.NewLine, "\tand multicastTtl = ", multicastTtl
                    , Environment.NewLine, "\tand parallel = ", parallel
                    ) };
            });

            Encoding = enc;
            Validate = validate;
            TemplateDB = db;
            Address = multicastAddress;
            Port = multicastPort;
            MulticastTimeToLive = multicastTtl;
            IsParallel = parallel;
            base.Initialize();

            this.TraceData(TraceEventType.Verbose, "MulticastEventEmitter Initialized");
        }
Beispiel #6
0
            /// <summary>
            /// Starts the listener in multi-threaded mode. In this mode the listener
            /// consumes from 1 to 2 threads from the threadpool. A thread is used for
            /// receiving bytes and deserializing LWES events and another thread is 
            /// scheduled to perform event notification only when LWES events have
            /// been received.
            /// </summary>
            /// <param name="db">event template DB used during deserialization</param>
            /// <param name="listenEP">a IP endpoint where listening should occur</param>
            /// <param name="finishSocket"></param>
            /// <param name="listener"></param>
            public void Start(IEventTemplateDB db
                , IPEndPoint listenEP
                , Action<Socket, IPEndPoint> finishSocket
                , EventListenerBase listener)
            {
                this.TraceData(TraceEventType.Verbose, "EventListenerBase.BackgroundThreadListener - Starting");

                _db = db;
                _listener = listener;
                _anyEP = (listenEP.AddressFamily == AddressFamily.InterNetworkV6)
                    ? new IPEndPoint(IPAddress.IPv6Any, listenEP.Port)
                    : new IPEndPoint(IPAddress.Any, listenEP.Port);
                _buffer = BufferManager.AcquireBuffer(null);
                _listenEP = new UdpEndpoint(listenEP).Initialize(finishSocket);
                // Start a dedicated background thread to handle the receiving...
                _reciever = new Thread(Background_Receiver);
                _reciever.IsBackground = true;
                _reciever.Start();

                // Start a dedicated background thread to perform event notification...
                _notifierWaitObject = new Object();
                _notifier = new Thread(Background_Notifier);
                _notifier.IsBackground = true;
                _notifier.Start();

                this.TraceData(TraceEventType.Verbose, () =>
                {
                    return new object[] { String.Concat("EventListenerBase.BackgroundThreadListener - Started state: ", _recieverState.CurrentState) };
                });
            }
Beispiel #7
0
            /// <summary>
            /// Starts the listener.
            /// </summary>
            /// <param name="db">an event template DB</param>
            /// <param name="listenEP">the listening endpoint</param>
            /// <param name="finishSocket">a callback method that is called upon to finish the listening socket</param>
            /// <param name="owner">the owner</param>
            public void Start(IEventTemplateDB db
                , IPEndPoint listenEP
                , Action<Socket, IPEndPoint> finishSocket
                , EventListenerBase owner)
            {
                this.TraceData(TraceEventType.Verbose, "EventListenerBase.ParallelListener - Starting");

                _db = db;
                _listener = owner;
                _anyEP = (listenEP.AddressFamily == AddressFamily.InterNetworkV6)
                    ? new IPEndPoint(IPAddress.IPv6Any, 0)
                    : new IPEndPoint(IPAddress.Any, 0);

                _receiveQueue = new SimpleLockFreeQueue<ReceiveCapture>();

                _listenEP = new UdpEndpoint(listenEP).Initialize(finishSocket);
                ParallelReceiver();
                this.TraceData(TraceEventType.Verbose, () =>
                {
                    return new object[] { String.Concat("EventListenerBase.ParallelListener - Started state: ", _listenerState.CurrentState) };
                });
            }
Beispiel #8
0
 /// <summary>
 /// Deserializes an LWES event from a byte array.
 /// </summary>
 /// <param name="buffer">the byte array containing the event</param>
 /// <param name="offset">offset to the first byte of the event</param>
 /// <param name="count">number of bytes to deserialize</param>
 /// <param name="db">an event template DB for creating events</param>
 /// <returns>the deserialized event</returns>
 public static Event Deserialize(byte[] buffer, int offset, int count, IEventTemplateDB db)
 {
     return Event.BinaryDecode(db, buffer, offset, count);
 }