mirror of
https://github.com/Laxilef/OTGateway.git
synced 2025-12-13 11:44:29 +05:00
refactor: optimizing work with network
This commit is contained in:
@@ -13,6 +13,7 @@ void NetworkConnection::setup(bool useDhcp) {
|
|||||||
|
|
||||||
void NetworkConnection::reset() {
|
void NetworkConnection::reset() {
|
||||||
status = Status::NONE;
|
status = Status::NONE;
|
||||||
|
rawDisconnectReason = 0;
|
||||||
disconnectReason = DisconnectReason::NONE;
|
disconnectReason = DisconnectReason::NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -33,22 +34,25 @@ void NetworkConnection::onEvent(System_Event_t *event) {
|
|||||||
switch (event->event) {
|
switch (event->event) {
|
||||||
case EVENT_STAMODE_CONNECTED:
|
case EVENT_STAMODE_CONNECTED:
|
||||||
status = useDhcp ? Status::CONNECTING : Status::CONNECTED;
|
status = useDhcp ? Status::CONNECTING : Status::CONNECTED;
|
||||||
|
rawDisconnectReason = 0;
|
||||||
disconnectReason = DisconnectReason::NONE;
|
disconnectReason = DisconnectReason::NONE;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EVENT_STAMODE_GOT_IP:
|
case EVENT_STAMODE_GOT_IP:
|
||||||
status = Status::CONNECTED;
|
status = Status::CONNECTED;
|
||||||
|
rawDisconnectReason = 0;
|
||||||
disconnectReason = DisconnectReason::NONE;
|
disconnectReason = DisconnectReason::NONE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EVENT_STAMODE_DHCP_TIMEOUT:
|
case EVENT_STAMODE_DHCP_TIMEOUT:
|
||||||
status = Status::DISCONNECTED;
|
status = Status::DISCONNECTED;
|
||||||
|
rawDisconnectReason = 0;
|
||||||
disconnectReason = DisconnectReason::DHCP_TIMEOUT;
|
disconnectReason = DisconnectReason::DHCP_TIMEOUT;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EVENT_STAMODE_DISCONNECTED:
|
case EVENT_STAMODE_DISCONNECTED:
|
||||||
status = Status::DISCONNECTED;
|
status = Status::DISCONNECTED;
|
||||||
|
rawDisconnectReason = event->event_info.disconnected.reason;
|
||||||
disconnectReason = convertDisconnectReason(event->event_info.disconnected.reason);
|
disconnectReason = convertDisconnectReason(event->event_info.disconnected.reason);
|
||||||
|
|
||||||
// https://github.com/esp8266/Arduino/blob/d5eb265f78bff9deb7063d10030a02d021c8c66c/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp#L231
|
// https://github.com/esp8266/Arduino/blob/d5eb265f78bff9deb7063d10030a02d021c8c66c/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp#L231
|
||||||
@@ -63,6 +67,7 @@ void NetworkConnection::onEvent(System_Event_t *event) {
|
|||||||
auto& src = event->event_info.auth_change;
|
auto& src = event->event_info.auth_change;
|
||||||
if ((src.old_mode != AUTH_OPEN) && (src.new_mode == AUTH_OPEN)) {
|
if ((src.old_mode != AUTH_OPEN) && (src.new_mode == AUTH_OPEN)) {
|
||||||
status = Status::DISCONNECTED;
|
status = Status::DISCONNECTED;
|
||||||
|
rawDisconnectReason = 0;
|
||||||
disconnectReason = DisconnectReason::OTHER;
|
disconnectReason = DisconnectReason::OTHER;
|
||||||
|
|
||||||
wifi_station_disconnect();
|
wifi_station_disconnect();
|
||||||
@@ -79,25 +84,27 @@ void NetworkConnection::onEvent(WiFiEvent_t event, WiFiEventInfo_t info) {
|
|||||||
switch (event) {
|
switch (event) {
|
||||||
case ARDUINO_EVENT_WIFI_STA_CONNECTED:
|
case ARDUINO_EVENT_WIFI_STA_CONNECTED:
|
||||||
status = useDhcp ? Status::CONNECTING : Status::CONNECTED;
|
status = useDhcp ? Status::CONNECTING : Status::CONNECTED;
|
||||||
|
rawDisconnectReason = 0;
|
||||||
disconnectReason = DisconnectReason::NONE;
|
disconnectReason = DisconnectReason::NONE;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ARDUINO_EVENT_WIFI_STA_GOT_IP:
|
case ARDUINO_EVENT_WIFI_STA_GOT_IP:
|
||||||
case ARDUINO_EVENT_WIFI_STA_GOT_IP6:
|
case ARDUINO_EVENT_WIFI_STA_GOT_IP6:
|
||||||
status = Status::CONNECTED;
|
status = Status::CONNECTED;
|
||||||
|
rawDisconnectReason = 0;
|
||||||
disconnectReason = DisconnectReason::NONE;
|
disconnectReason = DisconnectReason::NONE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ARDUINO_EVENT_WIFI_STA_LOST_IP:
|
case ARDUINO_EVENT_WIFI_STA_LOST_IP:
|
||||||
status = Status::DISCONNECTED;
|
status = Status::DISCONNECTED;
|
||||||
|
rawDisconnectReason = 0;
|
||||||
disconnectReason = DisconnectReason::DHCP_TIMEOUT;
|
disconnectReason = DisconnectReason::DHCP_TIMEOUT;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
|
case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
|
||||||
status = Status::DISCONNECTED;
|
status = Status::DISCONNECTED;
|
||||||
|
rawDisconnectReason = info.wifi_sta_disconnected.reason;
|
||||||
disconnectReason = convertDisconnectReason(info.wifi_sta_disconnected.reason);
|
disconnectReason = convertDisconnectReason(info.wifi_sta_disconnected.reason);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -148,3 +155,4 @@ NetworkConnection::DisconnectReason NetworkConnection::convertDisconnectReason(u
|
|||||||
bool NetworkConnection::useDhcp = false;
|
bool NetworkConnection::useDhcp = false;
|
||||||
NetworkConnection::Status NetworkConnection::status = Status::NONE;
|
NetworkConnection::Status NetworkConnection::status = Status::NONE;
|
||||||
NetworkConnection::DisconnectReason NetworkConnection::disconnectReason = DisconnectReason::NONE;
|
NetworkConnection::DisconnectReason NetworkConnection::disconnectReason = DisconnectReason::NONE;
|
||||||
|
uint8_t NetworkConnection::rawDisconnectReason = 0;
|
||||||
@@ -27,6 +27,7 @@ namespace NetworkUtils {
|
|||||||
|
|
||||||
static Status status;
|
static Status status;
|
||||||
static DisconnectReason disconnectReason;
|
static DisconnectReason disconnectReason;
|
||||||
|
static uint8_t rawDisconnectReason;
|
||||||
|
|
||||||
static void setup(bool useDhcp);
|
static void setup(bool useDhcp);
|
||||||
static void setUseDhcp(bool value);
|
static void setUseDhcp(bool value);
|
||||||
|
|||||||
@@ -212,7 +212,7 @@ namespace NetworkUtils {
|
|||||||
}
|
}
|
||||||
#endif*/
|
#endif*/
|
||||||
|
|
||||||
WiFi.disconnect(false, true);
|
this->disconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this->hasStaCredentials()) {
|
if (!this->hasStaCredentials()) {
|
||||||
@@ -266,13 +266,17 @@ namespace NetworkUtils {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void disconnect() {
|
||||||
|
WiFi.disconnect(false, true);
|
||||||
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
if (this->reconnectFlag) {
|
if (this->reconnectFlag) {
|
||||||
this->delayCallback(5000);
|
this->delayCallback(5000);
|
||||||
|
|
||||||
Log.sinfoln(FPSTR(L_NETWORK), F("Reconnecting..."));
|
Log.sinfoln(FPSTR(L_NETWORK), F("Reconnecting..."));
|
||||||
this->reconnectFlag = false;
|
this->reconnectFlag = false;
|
||||||
this->resetWifi();
|
this->disconnect();
|
||||||
NetworkConnection::reset();
|
NetworkConnection::reset();
|
||||||
this->delayCallback(1000);
|
this->delayCallback(1000);
|
||||||
|
|
||||||
@@ -297,7 +301,7 @@ namespace NetworkUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (this->isApEnabled() && millis() - this->connectedTime > this->reconnectInterval && !this->hasApClients()) {
|
if (this->isApEnabled() && millis() - this->connectedTime > this->reconnectInterval && !this->hasApClients()) {
|
||||||
Log.sinfoln(FPSTR(L_NETWORK), F("Stop AP because connected, start only STA"));
|
Log.sinfoln(FPSTR(L_NETWORK), F("Stop AP because STA connected"));
|
||||||
|
|
||||||
WiFi.mode(WIFI_STA);
|
WiFi.mode(WIFI_STA);
|
||||||
return;
|
return;
|
||||||
@@ -348,7 +352,7 @@ namespace NetworkUtils {
|
|||||||
|
|
||||||
NetworkConnection::reset();
|
NetworkConnection::reset();
|
||||||
if (!this->connect(true, this->connectionTimeout)) {
|
if (!this->connect(true, this->connectionTimeout)) {
|
||||||
Log.straceln(FPSTR(L_NETWORK), F("Connection failed. Status: %d, reason: %d"), NetworkConnection::getStatus(), NetworkConnection::getDisconnectReason());
|
Log.straceln(FPSTR(L_NETWORK), F("Connection failed. Status: %d, reason: %d, raw reason: %d"), NetworkConnection::getStatus(), NetworkConnection::getDisconnectReason(), NetworkConnection::rawDisconnectReason);
|
||||||
}
|
}
|
||||||
|
|
||||||
this->prevReconnectingTime = millis();
|
this->prevReconnectingTime = millis();
|
||||||
|
|||||||
@@ -623,6 +623,10 @@ protected:
|
|||||||
if (this->stateWebServer()) {
|
if (this->stateWebServer()) {
|
||||||
this->webServer->handleClient();
|
this->webServer->handleClient();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!this->stateDnsServer() && !this->stateWebServer()) {
|
||||||
|
this->delay(250);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isAuthRequired() {
|
bool isAuthRequired() {
|
||||||
|
|||||||
Reference in New Issue
Block a user