From 12169da8bd587ddee8aa6edc5903173d08059ca4 Mon Sep 17 00:00:00 2001 From: Yannik Enss Date: Wed, 18 Mar 2020 12:18:29 +0100 Subject: [PATCH] use persistent connection for polling --- mpdclient.ino | 55 ++++++++++++++++++++++++--------------------------- 1 file changed, 26 insertions(+), 29 deletions(-) diff --git a/mpdclient.ino b/mpdclient.ino index 30f3576..1a2f2e0 100644 --- a/mpdclient.ino +++ b/mpdclient.ino @@ -22,7 +22,7 @@ Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); const char* ssid = "hiddennetworkforchromecast"; const char* password = "raisingelephantsissoutterlyboring"; -WiFiClient espClient; +WiFiClient songinfoClient; struct song_info { String title; @@ -266,37 +266,34 @@ int get_player_info(player_info* player_info) { } int get_song_info(song_info* song_info) { - WiFiClient client; + if (!songinfoClient.connected()) { + Serial.println("reconnect"); + if (!songinfoClient.connect(MPDHOST, MPDPORT)) { + display_error("mpd connect failed"); + Serial.println("mpd connect failed"); + songinfoClient.stop(); + return 1; + } + } - if (client.connect(MPDHOST, MPDPORT)) { - Serial.println("connected"); - client.print("currentsong\n"); + songinfoClient.print("currentsong\n"); - while (client.connected() || client.available()) - { - if (client.available()) - { - String line = client.readStringUntil('\n'); - if (line.startsWith("Title: ")) { - song_info->title = line.substring(7); - } - else if (line.startsWith("Artist: ")) { - song_info->artist = line.substring(8); - } - else if (line.equals("OK")) { - client.stop(); - } - } + while (songinfoClient.connected() || songinfoClient.available()) + { + if (songinfoClient.available()) + { + String line = songinfoClient.readStringUntil('\n'); + if (line.startsWith("Title: ")) { + song_info->title = line.substring(7); } - - client.stop(); - Serial.println("connection done"); - } - else { - display_error("mpd connect failed"); - client.stop(); - return 1; - } + else if (line.startsWith("Artist: ")) { + song_info->artist = line.substring(8); + } + else if (line.equals("OK")) { + break; + } + } + } return 0; }