Пример #1
0
 private async Task _ReceiveAsync()
 {
     await Task.Run(async() =>
     {
         bool error = false;
         while (true)
         {
             try
             {
                 if (TcpClient.Available > 0)
                 {
                     byte[] buffer = new byte[TcpClient.Available];
                     var size      = await NetworkStream.ReadAsync(buffer, 0, TcpClient.Available);
                     Device.BeginInvokeOnMainThread(() =>
                     {
                         MessageReceived?.Invoke(this, buffer);
                         TranspondCharacteristicWrapper.Value = buffer;
                         TranspondCharacteristicWrapper.NotifyAll();
                     });
                 }
             }
             catch (Exception exception)
             {
                 Debug.WriteLine(exception.Message);
                 error = true;
                 break;
             }
         }
         if (error)
         {
             State = TcpConnState.Error;
             StateChanged?.Invoke(this, State);
         }
     });
 }
Пример #2
0
        public TcpTranspondServiceWrapper(IBluetoothManager bluetoothManager)
        {
            BluetoothManager = bluetoothManager;
            TranspondCharacteristicWrapper = new TranspondCharacteristicWrapper(bluetoothManager);
            IGattServiceBuilder builder = bluetoothManager.NewGattServiceBuilder();

            GattServerService = builder.SetUuid(Uuid)
                                .AddCharacteristics(TranspondCharacteristicWrapper.GattServerCharacteristic)
                                .Build();
            TranspondCharacteristicWrapper.GattServerCharacteristic.OnRead  += GattServerCharacteristic_OnRead;
            TranspondCharacteristicWrapper.GattServerCharacteristic.OnWrite += GattServerCharacteristic_OnWrite;
            State     = TcpConnState.Created;
            TcpClient = new TcpClient();
        }
Пример #3
0
 public async Task SendAsync(byte[] message)
 {
     if (NetworkStream == null)
     {
         throw new NotImplementedException("NetworkStream is null");
     }
     try
     {
         await NetworkStream.WriteAsync(message, 0, message.Length);
     }
     catch (Exception exception)
     {
         Debug.WriteLine(exception);
         State = TcpConnState.Error;
         StateChanged?.Invoke(this, State);
     }
 }
Пример #4
0
 /// <summary>
 /// Will Retry connect until you cancel it
 /// </summary>
 public async Task ConnectAsync()
 {
     await Task.Run(async() =>
     {
         if (State != TcpConnState.Created)
         {
             throw new NotImplementedException("WTF");
         }
         State = TcpConnState.Connecting;
         StateChanged?.Invoke(this, State);
         bool successful = false;
         while (!successful && !_CancelConnect)
         {
             try
             {
                 await TcpClient.ConnectAsync(IPEndPoint.Address, IPEndPoint.Port);
                 successful = true;
             }
             catch (Exception e)
             {
                 Debug.WriteLine(e.Message);
                 continue;
             }
         }
         if (_CancelConnect)
         {
             State          = TcpConnState.Created;
             TcpClient      = new TcpClient();
             _CancelConnect = false;
             StateChanged?.Invoke(this, State);
         }
         else if (successful)
         {
             State         = TcpConnState.Connected;
             NetworkStream = TcpClient.GetStream();
             StateChanged?.Invoke(this, State);
             _ReceiveTask = _ReceiveAsync();
         }
     });
 }
Пример #5
0
 public void Restore()
 {
     if (State == TcpConnState.Error)
     {
         try
         {
             NetworkStream.Close();
         }
         catch (Exception)
         {
         }
         try
         {
             TcpClient.Close();
         }
         catch (Exception)
         {
         }
         TcpClient     = new TcpClient();
         NetworkStream = null;
         State         = TcpConnState.Created;
         StateChanged?.Invoke(this, State);
     }
 }