twitchchat icon indicating copy to clipboard operation
twitchchat copied to clipboard

unexpected EOF in tokio_demo example

Open fenhl opened this issue 3 years ago • 4 comments

After making the tokio_demo example compile by replacing tokio::time::delay_for with tokio::time::sleep, it gives the following output:

we're connecting!
Error: reached an unexpected EOF

No messages are actually sent to Twitch chat.

fenhl avatar May 07 '21 23:05 fenhl

I randomly get this as well, and I had to downgrade to Tokio 0.2 otherwise I'd get an error related to Tokio's reactor not running. But it seems unpredictable.

Bauxitedev avatar Sep 02 '21 12:09 Bauxitedev

Update: as a temporary workaround, I use a simple spinloop that tries to connect at most once per second. So if the connection fails, it'll try again one second later, until it (randomly) succeeds.

use tokio::{join, time::delay_for}; //Using the Tokio runtime

...

loop {
        println!("connecting to twitch...");

        //Avoid spinning like a maniac when an error occurs repeatedly
        let minimum_loop_delay = delay_for(Duration::from_millis(1000));

        //Join the two futures together so we wait on them both concurrently
        match join!(twitch_loop(), minimum_loop_delay) {
            (Ok(()), _) => println!("connected to twitch!"),
            (Err(e), _) => println!("twitch conn. failed: {:?}", e),
        }
    }

Bauxitedev avatar Sep 06 '21 08:09 Bauxitedev

Update2: it turns out if you change your password or enable 2FA, you get this error repeatedly and consistently until you generate a new OAuth2 key. Then it works like 90% of the time, the other 10% I just spinloop until it works, see my code above.

Bauxitedev avatar Sep 07 '21 17:09 Bauxitedev

The best I was able to reproduce was by passing in a bogus oauth token. The streams looked like so:

> CAP REQ :twitch.tv/membership
> CAP REQ :twitch.tv/tags
> CAP REQ :twitch.tv/commands
> PASS oauth:12345....XYZ
> NICK mrhalzy
< :tmi.twitch.tv CAP * ACK :twitch.tv/membership
< :tmi.twitch.tv CAP * ACK :twitch.tv/tags
< :tmi.twitch.tv CAP * ACK :twitch.tv/commands
< :tmi.twitch.tv NOTICE * :Login authentication failed

I suspect it's the last line that doesn't parse.

halzy avatar Feb 25 '22 03:02 halzy