Exemple #1
0
        public byte[] Encode(IRemoteEvent <T> obj)
        {
            WakeMessagePBuf pbuf = new WakeMessagePBuf();

            pbuf.data = _encoder.Encode(obj.Value);
            pbuf.seq  = obj.Sequence;
            return(pbuf.Serialize());
        }
Exemple #2
0
        /// <summary>
        /// Look up the IObserver for the registered IPEndPoint or event type
        /// and execute the IObserver.
        /// </summary>
        /// <param name="transportEvent">The incoming remote event</param>
        public void OnNext(TransportEvent <IRemoteEvent <T> > transportEvent)
        {
            IRemoteEvent <T> remoteEvent = transportEvent.Data;

            remoteEvent.LocalEndPoint  = transportEvent.Link.LocalEndpoint;
            remoteEvent.RemoteEndPoint = transportEvent.Link.RemoteEndpoint;
            T    value   = remoteEvent.Value;
            bool handled = false;

            if (_universalObserver != null)
            {
                _universalObserver.OnNext(value);
                handled = true;
            }

            if (_remoteMessageUniversalObserver != null)
            {
                // IObserver was registered by event type
                IRemoteIdentifier  id            = new SocketRemoteIdentifier(remoteEvent.RemoteEndPoint);
                IRemoteMessage <T> remoteMessage = new DefaultRemoteMessage <T>(id, value);
                _remoteMessageUniversalObserver.OnNext(remoteMessage);
                handled = true;
            }

            IObserver <T> observer;

            if (_endpointMap.TryGetValue(remoteEvent.RemoteEndPoint, out observer))
            {
                // IObserver was registered by IPEndpoint
                observer.OnNext(value);
                handled = true;
            }

            if (!handled)
            {
                throw new WakeRuntimeException("Unrecognized Wake RemoteEvent message");
            }
        }
Exemple #3
0
 public byte[] Encode(IRemoteEvent <T> obj)
 {
     return(_encoder.Encode(obj));
 }
Exemple #4
0
 /// <summary>
 /// Writes the class fields.
 /// </summary>
 /// <param name="value">The remote event</param>
 /// <param name="writer">The writer to which to write</param>
 /// <param name="token">The cancellation token</param>
 public async Task WriteAsync(IRemoteEvent <T> value, IDataWriter writer, CancellationToken token)
 {
     await _codec.WriteAsync(value.Value, writer, token);
 }
Exemple #5
0
 /// <summary>
 /// Writes the class fields.
 /// </summary>
 /// <param name="value">The remote event</param>
 /// <param name="writer">The writer to which to write</param>
 public void Write(IRemoteEvent <T> value, IDataWriter writer)
 {
     _codec.Write(value.Value, writer);
 }