mirror of
https://github.com/esphome/esphome.git
synced 2025-10-03 18:42:23 +01:00
sever needs multi
This commit is contained in:
@@ -153,8 +153,8 @@ void BLEServer::gatts_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t ga
|
||||
case ESP_GATTS_CONNECT_EVT: {
|
||||
ESP_LOGD(TAG, "BLE Client connected");
|
||||
this->add_client_(param->connect.conn_id);
|
||||
if (this->on_connect_callback_) {
|
||||
(*this->on_connect_callback_)(param->connect.conn_id);
|
||||
for (auto &callback : this->on_connect_callbacks_) {
|
||||
callback(param->connect.conn_id);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -162,8 +162,8 @@ void BLEServer::gatts_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t ga
|
||||
ESP_LOGD(TAG, "BLE Client disconnected");
|
||||
this->remove_client_(param->disconnect.conn_id);
|
||||
this->parent_->advertising_start();
|
||||
if (this->on_disconnect_callback_) {
|
||||
(*this->on_disconnect_callback_)(param->disconnect.conn_id);
|
||||
for (auto &callback : this->on_disconnect_callbacks_) {
|
||||
callback(param->disconnect.conn_id);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@@ -55,12 +55,12 @@ class BLEServer : public Component, public GATTsEventHandler, public BLEStatusEv
|
||||
|
||||
void ble_before_disabled_event_handler() override;
|
||||
|
||||
// Direct callback registration - only allocates when callback is set
|
||||
// Direct callback registration - supports multiple callbacks
|
||||
void on_connect(std::function<void(uint16_t)> &&callback) {
|
||||
this->on_connect_callback_ = std::make_unique<std::function<void(uint16_t)>>(std::move(callback));
|
||||
this->on_connect_callbacks_.push_back(std::move(callback));
|
||||
}
|
||||
void on_disconnect(std::function<void(uint16_t)> &&callback) {
|
||||
this->on_disconnect_callback_ = std::make_unique<std::function<void(uint16_t)>>(std::move(callback));
|
||||
this->on_disconnect_callbacks_.push_back(std::move(callback));
|
||||
}
|
||||
|
||||
protected:
|
||||
@@ -75,8 +75,8 @@ class BLEServer : public Component, public GATTsEventHandler, public BLEStatusEv
|
||||
void add_client_(uint16_t conn_id) { this->clients_.insert(conn_id); }
|
||||
void remove_client_(uint16_t conn_id) { this->clients_.erase(conn_id); }
|
||||
|
||||
std::unique_ptr<std::function<void(uint16_t)>> on_connect_callback_;
|
||||
std::unique_ptr<std::function<void(uint16_t)>> on_disconnect_callback_;
|
||||
std::vector<std::function<void(uint16_t)>> on_connect_callbacks_;
|
||||
std::vector<std::function<void(uint16_t)>> on_disconnect_callbacks_;
|
||||
|
||||
std::vector<uint8_t> manufacturer_data_{};
|
||||
esp_gatt_if_t gatts_if_{0};
|
||||
|
Reference in New Issue
Block a user