9swampy / Telnet

Published on Nuget at https://www.nuget.org/packages/Telnet

Home Page:http://www.nugetmusthaves.com/Package/Telnet

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Clinet IsConnected is true when disconnected

sscoleman opened this issue · comments

after the telnet server goes offline and back on. The client.IsConnected is still true. It should be false and require me to login again.

This has been brought up before as an afterthought in #4 (see the later comments) but the fix we attempted, while it worked, broke much more than it fixed so it was not progressed. See https://github.com/9swampy/Telnet/compare/feature/AddAsyncConnectAndDisconnectionCheck branch. I've since separated out the AsyncConnect on it's own branch and that's pending a merge but the Disconnect check needs a rethink. I'm happy to reconsider if you have any suggestions.

I read through and and came to the same conclusion. Handle it myself as every connection is unique.

On a side note, I used this on a server and LiteGuard would not load for some reason. I kept getting Could not load file or assembly 'LiteGuard, Version=0.10.0.0, Culture=neutral, PublicKeyToken=d38e0b7ae24b08a1' or one of its dependencies. The system cannot find the file specified.
It worked fine on my local PC.

You only used light guard on 1 line. I extracted out the code from light guard and replaced the line. Here it is is you want to drop your dependency on Light Guard.

/// <summary>
/// Initialises a new instance of the <see cref="Client"/> class.
/// </summary>
/// <param name="byteStream">The stream served by the host connected to.</param>
/// <param name="token">The cancellation token.</param>
/// <param name="timeout">The timeout to wait for initial successful connection to <cref>byteStream</cref>.</param>
public Client(IByteStream byteStream, CancellationToken token, TimeSpan timeout)
  : base(byteStream, token)
{
        if (byteStream == null)
        {
            throw new ArgumentNullException(
                "byteStream", string.Format(CultureInfo.InvariantCulture, "{0} is null.", byteStream));
        }

        DateTime timeoutEnd = DateTime.Now.Add(timeout);
  AutoResetEvent are = new AutoResetEvent(false);
  while (!this.ByteStream.Connected && timeoutEnd > DateTime.Now)
  {
    are.WaitOne(2);
  }

  if (!this.ByteStream.Connected)
  {
    throw new InvalidOperationException("Unable to connect to the host.");
  }

Replacing https://www.nuget.org/packages/LiteGuard/ with https://www.nuget.org/packages/LiteGuard.Source/ is the way I'll get around to at some point... should solve your issue though I do wonder what was wrong there.

As I also suggested on #4 if you've got a PR that would fix the issue without breaking existing functionality I'd be happy to try it out.