/// <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"); }
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"); }
/// <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) }; }); }
/// <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) }; }); }
/// <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); }