0

I'm using this library(https://github.com/rdavisau/sockets-for-pcl) to communicate with a TCP Server, that sends me when a event was generated, then, I have to verify all the time if the TCP Server sent to me a event, but if I try read anything before the TCP Server sends me, it's thrown the UnhandledException, but it only happens if I read inside a Task, in the main thread it thrown a timeout exception, the exception that I expected to happen in Task. Someone can help me? Thanks. below is my code.

public class CentralTcpService
{
    #region ConnectTcpAsync
    public async void ConnectTcpAsync()
    {
        try
        {
            _sockecClient = new TcpSocketClient();
            await _sockecClient.ConnectAsync(Central.Ip, Central.Port);
            _writter = new ExtendedBinaryWriter(_sockecClient.WriteStream);
            _reader = new ExtendedBinaryReader(_sockecClient.ReadStream);
            _writter.WriteString(EvenNotProtocol.MobileReceiverCommand);
            _sockecClient.ReadStream.ReadTimeout = int.MaxValue;

            EnableTcpService();
        }
        catch (Exception e)
        {
            throw new Exception(e.Message);
        }
    }
    #endregion

    #region TcpService

    private void EnableTcpService()
    {
        _cancelationTcpService = new CancellationTokenSource();

         new Task(StartService, _cancelationTcpService.Token, TaskCreationOptions.LongRunning).Start();

    }

    private void StartService()
    {
        while (!_cancelationTcpService.Token.IsCancellationRequested)
        {
            var ev = EvenNotProtocol.DeserializeEvent(_reader);

            if (ev == null) continue;


            _writter.WriteString(EvenNotProtocol.MobileOkCommand);

            EventReceived?.Invoke(this, new CentralTcpEventArgs(ev));

        }
    }
}

 public class EvenNotProtocol
 {

    public static Event DeserializeEvent(ExtendedBinaryReader reader)
    {
        try
        {
            reader.SkipBytes(1);
            .....
       }
       catch (IOException e)
       {
            return null;
       }
    }
 }
Maycon
  • 3
  • 3

0 Answers0