コード例 #1
0
        public async static Task Reset(this ITransceiver transceiver)
        {
            var message = new InterfaceControlMessage(InterfaceControlCommand.Reset);
            await transceiver.Send(message);

            await Task.Delay(50);
        }
コード例 #2
0
        public DroneMessenger(
            ITransceiver transceiver,
            IReceiver stateReceiver,
            IReceiver videoReceiver)
        {
            this.transceiver   = transceiver ?? throw new ArgumentNullException(nameof(transceiver));
            this.stateReceiver = stateReceiver ?? throw new ArgumentNullException(nameof(stateReceiver));
            this.videoReceiver = videoReceiver ?? throw new ArgumentNullException(nameof(videoReceiver));

            this.Controller = new FlightController(this.transceiver);

            this.Controller.ConnectionStateChanged +=
                (object sender, ConnectionStateChangedArgs e) =>
            {
                if (e.IsConnected)
                {
                    this.StartLisenters();
                }
                else
                {
                    this.StopListeners();
                }
            };

            this.StateObserver = new StateObserver(this.stateReceiver);
            this.StateObserver.StateChanged += this.Controller.UpdateState;
            this.Controller.PositionChanged += this.StateObserver.UpdatePosition;

            this.VideoObserver = new VideoObserver(this.videoReceiver);
        }
コード例 #3
0
 /// <summary>
 /// Creates a new session.
 /// </summary>
 /// <param name="owner">Owner end point.</param>
 /// <param name="socket">Session socket.</param>
 /// <param name="id">Session identifier.</param>
 public ActiveSession(ActiveEndPoint <T> owner, Socket socket, int id)
 {
     Owner  = owner;
     Id     = id;
     Socket = socket;
     Stream = new NetworkStreamEx(socket, Owner.Host.AuthenticationData);
     Stream.Authenticate(); // TODO: make authentication optional for StartTLS support
     if (typeof(T) == typeof(byte[]))
     {
         Transceiver = new BinaryTransceiver() as ITransceiver <T>;
     }
     else if (typeof(T) == typeof(BinaryPacket))
     {
         Transceiver = new FastBinaryTransceiver() as ITransceiver <T>;
     }
     else if (typeof(T) == typeof(X690.Message))
     {
         Transceiver = new X690Transceiver() as ITransceiver <T>;
     }
     else if (typeof(T) == typeof(string))
     {
         Transceiver = new StringTransceiver() as ITransceiver <T>;
     }
     else
     {
         throw new InvalidDataException("Unsupported message type.");
     }
 }
コード例 #4
0
ファイル: Program.cs プロジェクト: Maissae/PSK
        private static async Task SendMessage(ITransceiver transceiver, string input)
        {
            string data = null;

            switch (CurrentService.Value)
            {
            case Service.Chat:
                data = BuildChatRequest(input);
                break;

            case Service.Ping:
                data = BuildPingRequest(input);
                break;

            case Service.Configure:
                data = BuildConfigureRequest(input);
                break;

            case Service.File:
                data = BuildFileRequest(input);
                break;
            }

            if (!string.IsNullOrEmpty(data))
            {
                await transceiver.Transmit(data);
            }
        }
コード例 #5
0
        public JoyStickFlightTest(
            IRepository repository,
            ITransceiver transceiver,
            IReceiver stateReceiver,
            IReceiver videoReceiver)
        {
            this.tello      = new DroneMessenger(transceiver, stateReceiver, videoReceiver);
            this.repository = repository ?? throw new ArgumentNullException(nameof(repository));

            this.tello.Controller.ConnectionStateChanged += this.Controller_ConnectionStateChanged;
            this.tello.Controller.ExceptionThrown        += this.Controller_ExceptionThrown;
            this.tello.Controller.ResponseReceived       += this.Controller_ResponseReceived;

            this.tello.StateObserver.StateChanged     += this.StateObserver_StateChanged;
            this.tello.VideoObserver.VideoSampleReady += this.VideoObserver_VideoSampleReady;

            this.repository.CreateCatalog <Session>();
            this.repository.CreateCatalog <ObservationGroup>();
            this.repository.CreateCatalog <StateObservation>();
            this.repository.CreateCatalog <AirSpeedObservation>();
            this.repository.CreateCatalog <AttitudeObservation>();
            this.repository.CreateCatalog <BatteryObservation>();
            this.repository.CreateCatalog <HobbsMeterObservation>();
            this.repository.CreateCatalog <PositionObservation>();
            this.repository.CreateCatalog <ResponseObservation>();

            this.session = this.repository.NewEntity <Session>();
        }
コード例 #6
0
        internal BufferedReadTransceiver(ITransceiver underlying, int bufferSize = 256)
        {
            Underlying = underlying;

            // The _buffer data member holds the buffered data. There's no buffered data until we receive data
            // from the underlying socket so the array segment point to an empty segment.
            _buffer = new ArraySegment <byte>(new byte[bufferSize], 0, 0);
        }
コード例 #7
0
        public MessageGovernor(ICache cache, ITransceiver transceiver, Options options)
        {
            _cache       = cache;
            _transceiver = transceiver;
            _options     = options;

            Task.Run(() => tranceiveAsync());
        }
コード例 #8
0
        private async Task <ILoraWanGateway> CreateGateway()
        {
            try
            {
                // Create the transceiver:
                TransceiverPinSettings pinSettings = GetTransceiverPinSettings();
                ITransceiver           transceiver = await TransceiverFactory.Create(_gatewaySettings, pinSettings).ConfigureAwait(false);

                transceiver.OnMessageReceived += TransceiverOnMessageReceived;


                // Create the GPS manager (if existing):
                IPositionProvider positionProvider;
                if (UseGpsManager())
                {
                    // Create the GPS manager:
                    IGpsManager gpsManager = await GpsManagerFactory.Create(GpsManagerSettings.Default).ConfigureAwait(false);

                    // Hook up the event fired when a new position is recorded:
                    gpsManager.OnPositionData += GpsManagerPositionDataAsync;

                    // Start the GPS:
                    await gpsManager.WakeUp().ConfigureAwait(false);

                    // Make the Gateway use the GpsManager as position provider
                    // (sending the actual coordinates in its status messages):
                    positionProvider = gpsManager;
                }
                else
                {
                    // Make the Gateway use "no position" as its coordinate:
                    positionProvider = FixedPositionProvider.NoPositionProvider;

                    // ...or give it a fixed coordinate:
                    //positionProvider = new FixedPositionProvider(new SimplePosition(55.597382, 12.95889, 18.4));
                }


                // Get the gateway EUI:
                GatewayEui gatewayEui = await GetGatewayEui().ConfigureAwait(false);

                WriteLog("The gateway EUI: " + gatewayEui);


                // Create the LoRa WAN gateway handler:
                return(LoraWanGatewayFactory.Create(
                           transceiver,
                           _gatewaySettings,
                           gatewayEui,
                           positionProvider));
            }
            catch (Exception exception)
            {
                WriteLog("Failed creating the LoRaWAN gateway:\r\n" + exception.Message);
                Debugger.Break();
                return(null);
            }
        }
コード例 #9
0
 private void CompleteRequest(ITransceiver client, IRequest request, TimeSpan delay)
 {
     Task.Factory.StartNew(async() =>
     {
         await Task.Delay(delay);
         var response = new Response(request, ProxySubject.EchoValueConst);
         await client.ReceiveAsync(response);
     });
 }
コード例 #10
0
 protected IPConnection(
     IConnectionManager manager,
     Endpoint endpoint,
     ITransceiver transceiver,
     BinaryConnection connection,
     IConnector?connector,
     string connectionId,
     ObjectAdapter?adapter)
     : base(manager, endpoint, connection, connector, connectionId, adapter) => _transceiver = transceiver;
コード例 #11
0
ファイル: Transceiver.cs プロジェクト: jk990803/ice
 //
 // Only for use by Connector, Acceptor
 //
 internal Transceiver(ITransceiver transceiver)
 {
     _transceiver      = transceiver;
     _configuration    = Configuration.GetInstance();
     _initialized      = false;
     _readBuffer       = new byte[1024 * 8]; // 8KB buffer
     _readBufferOffset = 0;
     _readBufferPos    = 0;
     _buffered         = _configuration.Buffered();
 }
コード例 #12
0
ファイル: ProxyFactory.cs プロジェクト: chandusekhar/Core
 public ProxyFactory(
     ITransceiverConnectionSettings connectionSettings,
     ITransceiver client,
     IAsyncCoupler <IMessage> asyncCoupler,
     ILogger logger)
 {
     _connectionSettings = connectionSettings ?? throw new ArgumentNullException(nameof(connectionSettings));
     _client             = client ?? throw new ArgumentNullException(nameof(client));
     _asyncCoupler       = asyncCoupler ?? throw new ArgumentNullException(nameof(asyncCoupler));
     _logger             = logger ?? throw new ArgumentNullException(nameof(logger));
 }
コード例 #13
0
        public async static Task SetMode(this ITransceiver transceiver, TransceiverType transceiverType, params Protocol[] protocols)
        {
            var messages = Buffer.Empty(9);

            messages[0] = transceiverType;
            messages[2] = (byte)protocols.Where(protocol => protocol.MessageNumber == 3).Sum(protocol => protocol.Value);
            messages[3] = (byte)protocols.Where(protocol => protocol.MessageNumber == 4).Sum(protocol => protocol.Value);
            messages[4] = (byte)protocols.Where(protocol => protocol.MessageNumber == 5).Sum(protocol => protocol.Value);

            await transceiver.Send(new InterfaceControlMessage(InterfaceControlCommand.SetMode, messages));
        }
コード例 #14
0
 /// <summary>
 /// Create an instance of <see cref="ILoraWanGateway"/>.
 /// </summary>
 /// <param name="transceiver">The transceiver.</param>
 /// <param name="gatewaySettings">The gateway settings of <see cref="ILoraWanGateway"/>.</param>
 /// <param name="gatewayEui">The unique Gateway EUI.</param>
 /// <param name="positionProvider">Optional. Interface to a <see cref="IPositionProvider"/>.</param>
 /// <returns></returns>
 public static ILoraWanGateway Create(
     ITransceiver transceiver,
     LoraWanGatewaySettings gatewaySettings,
     GatewayEui gatewayEui,
     IPositionProvider positionProvider = null)
 {
     return(new LoraWanGateway(
                transceiver,
                gatewaySettings,
                gatewayEui,
                positionProvider ?? FixedPositionProvider.NoPositionProvider));
 }
コード例 #15
0
        /// <summary>
        /// Send a message with no timeout.
        /// </summary>
        private async Task SendMessage(ITransceiver loraTransceiver, byte[] message)
        {
            var stopwatch = new Stopwatch(); // Only out of pure interest...

            stopwatch.Start();

            bool successfullySent = await loraTransceiver.Transmit(message).ConfigureAwait(false);

            stopwatch.Stop();
            WriteLog(successfullySent
                ? $"Successfully sent in {stopwatch.ElapsedMilliseconds} milliseconds."
                : $"Failed after {stopwatch.ElapsedMilliseconds} milliseconds.");
        }
コード例 #16
0
ファイル: TcpAcceptor.cs プロジェクト: wubo2018/ice
        public async ValueTask <Connection> AcceptAsync()
        {
            Socket fd = await _socket.AcceptAsync().ConfigureAwait(false);

            ITransceiver transceiver = ((TcpEndpoint)Endpoint).CreateTransceiver(fd, _adapter.Name);

            MultiStreamTransceiverWithUnderlyingTransceiver multiStreamTranceiver = Endpoint.Protocol switch
            {
                Protocol.Ice1 => new LegacyTransceiver(transceiver, Endpoint, _adapter),
                _ => new SlicTransceiver(transceiver, Endpoint, _adapter)
            };

            return(((TcpEndpoint)Endpoint).CreateConnection(_manager, multiStreamTranceiver, null, "", _adapter));
        }
コード例 #17
0
 public override Connection CreateConnection(
     IConnectionManager manager,
     ITransceiver transceiver,
     IConnector?connector,
     string connectionId,
     ObjectAdapter?adapter) =>
 new WSConnection(manager,
                  this,
                  transceiver,
                  Protocol == Protocol.Ice1 ?
                  (BinaryConnection) new Ice1BinaryConnection(transceiver, this, adapter) :
                  new SlicBinaryConnection(transceiver, this, adapter),
                  connector,
                  connectionId,
                  adapter);
コード例 #18
0
        /// <summary>
        /// Send a message with a timeout.
        /// </summary>
        private async Task SendMessage(ITransceiver loraTransceiver, byte[] message, TimeSpan timeout)
        {
            using (var cancellationTokenSource = new CancellationTokenSource(timeout))
            {
                var stopwatch = new Stopwatch(); // Only out of pure interest...
                stopwatch.Start();

                bool successfullySent = await loraTransceiver.Transmit(message, cancellationTokenSource.Token).ConfigureAwait(false);

                stopwatch.Stop();
                WriteLog(successfullySent
                    ? $"Successfully sent in {stopwatch.ElapsedMilliseconds} milliseconds."
                    : $"Failed after {stopwatch.ElapsedMilliseconds} milliseconds.");
            }
        }
コード例 #19
0
        private async Task <bool> InitLoraTransceiver()
        {
            try
            {
                _transceiver = await TransceiverFactory.Create(GetRadioSettings(), GetPinSettings()).ConfigureAwait(false);

                _transceiver.OnMessageReceived += TransceiverOnMessageReceived;

                return(true);
            }
            catch (Exception exception)
            {
                WriteLog("Failed initiating the LoRa transceiver:\r\n" + exception.Message);
                return(false);
            }
        }
コード例 #20
0
ファイル: TcpConnector.cs プロジェクト: principleWindows/ice
        public Connection Connect(string connectionId)
        {
            ITransceiver transceiver = _endpoint.CreateTransceiver(this, _addr, _proxy);

            MultiStreamTransceiverWithUnderlyingTransceiver multiStreamTranceiver = _endpoint.Protocol switch
            {
                Protocol.Ice1 => new LegacyTransceiver(transceiver, _endpoint, null),
                _ => new SlicTransceiver(transceiver, _endpoint, null)
            };

            return(_endpoint.CreateConnection(_endpoint.Communicator.OutgoingConnectionFactory,
                                              multiStreamTranceiver,
                                              this,
                                              connectionId,
                                              null));
        }
コード例 #21
0
ファイル: SslTransceiver.cs プロジェクト: Mu-L/ice
        // Only for use by TcpEndpoint.
        internal SslTransceiver(Communicator communicator, ITransceiver del, string hostOrAdapterName, bool incoming)
        {
            _communicator = communicator;
            _engine       = communicator.SslEngine;
            _delegate     = del;
            _incoming     = incoming;
            if (_incoming)
            {
                _adapterName = hostOrAdapterName;
            }
            else
            {
                _host = hostOrAdapterName;
            }

            SslStream = null;
        }
コード例 #22
0
ファイル: SslTransceiver.cs プロジェクト: yuweiApp/ice
        // Only for use by ConnectorI, AcceptorI.
        internal SslTransceiver(Communicator communicator, ITransceiver del, string hostOrAdapterName, bool incoming)
        {
            _communicator = communicator;
            _engine       = communicator.SslEngine;
            _delegate     = del;
            _incoming     = incoming;
            if (_incoming)
            {
                _adapterName = hostOrAdapterName;
            }
            else
            {
                _host = hostOrAdapterName;
            }

            SslStream = null;

            _verifyPeer = _communicator.GetPropertyAsInt("IceSSL.VerifyPeer") ?? 2;
        }
コード例 #23
0
 // Only for use by TcpEndpoint.
 internal SslTransceiver(
     Communicator communicator,
     ITransceiver underlying,
     string hostOrAdapterName,
     bool incoming)
 {
     _communicator = communicator;
     _engine       = communicator.SslEngine;
     _underlying   = underlying;
     _incoming     = incoming;
     if (_incoming)
     {
         _adapterName = hostOrAdapterName;
     }
     else
     {
         _host = hostOrAdapterName;
     }
 }
コード例 #24
0
        public MainViewModel(
            IUIDispatcher dispatcher,
            IUINotifier notifier,
            IRepository repository,
            ITransceiver transceiver,
            IReceiver stateReceiver,
            IReceiver videoReceiver)
            : base(dispatcher, notifier)
        {
            this.tello = new DroneMessenger(transceiver, stateReceiver, videoReceiver);

            repository.CreateCatalog <Session>();
            repository.CreateCatalog <ObservationGroup>();
            repository.CreateCatalog <StateObservation>();
            repository.CreateCatalog <AirSpeedObservation>();
            repository.CreateCatalog <AttitudeObservation>();
            repository.CreateCatalog <BatteryObservation>();
            repository.CreateCatalog <HobbsMeterObservation>();
            repository.CreateCatalog <PositionObservation>();
            repository.CreateCatalog <ResponseObservation>();

            var session = repository.NewEntity <Session>();

            this.StateViewModel = new TelloStateViewModel(
                dispatcher,
                notifier,
                this.tello.StateObserver,
                repository,
                session);

            this.VideoViewModel = new TelloVideoViewModel(
                dispatcher,
                notifier,
                this.tello.VideoObserver);

            this.ControllerViewModel = new TelloControllerViewModel(
                dispatcher,
                notifier,
                this.tello.Controller,
                repository,
                session);
        }
コード例 #25
0
ファイル: Proxy.cs プロジェクト: chandusekhar/Core
        internal static TProxyInterface Create <TProxyInterface>(
            ITransceiverConnectionSettings connectionSettings,
            ITransceiver client,
            IAsyncCoupler <IMessage> asyncCoupler,
            ILogger logger,
            IProxySettings proxySettings) where TProxyInterface : class
        {
            var result = Create <TProxyInterface, Proxy>();

            var proxy = (result as Proxy);

            proxy._connectionSettings = connectionSettings ?? throw new ArgumentNullException(nameof(connectionSettings));
            proxy._client             = client ?? throw new ArgumentNullException(nameof(client));
            proxy._asyncCoupler       = asyncCoupler ?? throw new ArgumentNullException(nameof(asyncCoupler));
            proxy._logger             = logger ?? throw new ArgumentNullException(nameof(logger));
            proxy._proxySettings      = proxySettings ?? throw new ArgumentNullException(nameof(proxySettings));
            if (string.IsNullOrEmpty(proxySettings.OrganizationId))
            {
                throw new ArgumentNullException(nameof(proxySettings.OrganizationId));
            }

            if (string.IsNullOrEmpty(proxySettings.InstanceId))
            {
                throw new ArgumentNullException(nameof(proxySettings.InstanceId));
            }

            if (string.IsNullOrEmpty(connectionSettings.RpcClientReceiver.ResourceName))
            {
                throw new ArgumentNullException(nameof(connectionSettings.RpcClientReceiver.ResourceName));
            }

            proxy._replyPath = connectionSettings.RpcClientReceiver.ResourceName;
            if (connectionSettings.RpcClientTransmitter.TimeoutInSeconds == 0)
            {
                throw new ArgumentException("timeout must be  greater than zero", nameof(connectionSettings.RpcClientReceiver.TimeoutInSeconds));
            }

            proxy._requestTimeout = TimeSpan.FromSeconds(connectionSettings.RpcClientTransmitter.TimeoutInSeconds);

            return(result);
        }
コード例 #26
0
        private Connection CreateConnection(ITransceiver transceiver, ConnectorInfo ci)
        {
            lock (this)
            {
                Debug.Assert(_pending.ContainsKey(ci.Connector) && transceiver != null);

                //
                // Create and add the connection to the connection map. Adding the connection to the map
                // is necessary to support the interruption of the connection initialization and validation
                // in case the communicator is destroyed.
                //
                Connection connection;
                try
                {
                    if (_destroyed)
                    {
                        throw new CommunicatorDestroyedException();
                    }

                    connection = new Connection(_communicator, _monitor, transceiver, ci.Connector,
                                                ci.Endpoint.NewCompressionFlag(false), null);
                }
                catch (System.Exception)
                {
                    try
                    {
                        transceiver.Close();
                    }
                    catch (System.Exception)
                    {
                        // Ignore
                    }
                    throw;
                }
                _connections.Add(ci.Connector, connection);
                _connectionsByEndpoint.Add(connection.Endpoint, connection);
                _connectionsByEndpoint.Add(connection.Endpoint.NewCompressionFlag(true), connection);
                return(connection);
            }
        }
コード例 #27
0
        public LoraWanGateway(
            ITransceiver transceiver,
            LoraWanGatewaySettings gatewaySettings,
            GatewayEui gatewayEui,
            IPositionProvider positionProvider)
        {
            _stopwatch.Start();

            _transceiver        = transceiver;
            _gatewaySettings    = gatewaySettings;
            _positionProvider   = positionProvider;
            _loraNetworkClients = gatewaySettings.Hosts
                                  .Select(x => new LoraNetworkClient(new HostName(x), 1700))
                                  .ToArray();

            _messageComposer = new MessageComposer(gatewayEui);

            _transceiver.OnMessageReceived += TransceiverOnMessageReceived;

            _datr = GetSF() + GetBW();
            _codr = GetCodr();
        }
コード例 #28
0
 // Only for use by TcpEndpoint.
 internal SslTransceiver(
     Communicator communicator,
     ITransceiver underlying,
     string hostOrAdapterName,
     bool incoming,
     IConnector?connector = null)
 {
     Debug.Assert(incoming || connector != null);
     _communicator = communicator;
     _connector    = connector;
     _engine       = communicator.SslEngine;
     _underlying   = underlying;
     _incoming     = incoming;
     if (_incoming)
     {
         _adapterName = hostOrAdapterName;
     }
     else
     {
         _host = hostOrAdapterName;
     }
 }
コード例 #29
0
 public Channel(uint periodicNumber, ITransceiver transceiver)
 {
     PeriodicNumber = periodicNumber;
     _transceiver   = transceiver;
 }
コード例 #30
0
 public void Register(ITransceiver transceiver)
 {
     transceiver.SendMessage = BroadcastMessage;
     _transceivers.Add(transceiver);
 }