Browse Source

v2.3 | 修复zcan没有回执的BUG

master
zhaohe 4 months ago
parent
commit
6c8bce0f12
  1. 3
      README.md
  2. 2
      src/configs/version.hpp
  3. 19
      src/service/extapi_service.cpp
  4. 2
      src/service/extapi_service.hpp
  5. 13
      src/service/wbesocket_connect_mgr_service.cpp
  6. 2
      src/service/wbesocket_connect_mgr_service.hpp

3
README.md

@ -12,9 +12,10 @@
```
## 依赖
## 版本
```
v2.3 | 修复zcan没有回执的BUG
```

2
src/configs/version.hpp

@ -1,2 +1,2 @@
#pragma once
#define VERSION "2.2"
#define VERSION "2.3"

19
src/service/extapi_service.cpp

@ -120,7 +120,7 @@ void ExtAPIService::initialize() {
}
string chname = webSocket.getUrl().substr(1);
WbesocketConnectMgrService::insertNewClient(chname, findws(chname), make_shared<WebSocketConnectInfo>(connectionState->getRemoteIp()));
WbesocketConnectMgrService::insertNewClient(chname, findws(&webSocket), make_shared<WebSocketConnectInfo>(connectionState->getRemoteIp()));
} else if (msg->type == ix::WebSocketMessageType::Message) {
string chname = webSocket.getUrl().substr(1);
auto channel = DataChannelMgr::findByChannel(chname);
@ -132,7 +132,7 @@ void ExtAPIService::initialize() {
} else if (msg->type == ix::WebSocketMessageType::Close) {
string chname = webSocket.getUrl().substr(1);
logger->info("close connect ip: {},url: {}, channel:{}", connectionState->getRemoteIp(), webSocket.getUrl(), chname);
WbesocketConnectMgrService::removeClient(chname, findws(chname));
WbesocketConnectMgrService::removeClient(chname, findws(&webSocket));
}
});
@ -144,10 +144,15 @@ void ExtAPIService::initialize() {
WbesocketConnectMgrService::findClientByName(fromch->getAlias(), clients);
for (auto ch : clients) {
if (ch) {
WebSocketSendInfo sendInfo;
if (binary) {
ch->sendBinary(string(data, len));
sendInfo = ch->sendBinary(string(data, len));
} else {
ch->sendText(string(data, len));
sendInfo = ch->sendText(string(data, len));
}
if (!sendInfo.success) {
logger->error("send data to client {} failed", (int64_t)ch.get());
}
}
}
@ -184,12 +189,12 @@ void ExtAPIService::initialize() {
logger->info("======================================================");
};
shared_ptr<WebSocket> ExtAPIService::findws(string chname) {
if (chname.empty()) return nullptr;
shared_ptr<WebSocket> ExtAPIService::findws(WebSocket *ws) {
if (!ws) return nullptr;
auto clients = m_wsServer->getClients();
for (auto it : clients) {
if (it->getUrl().substr(1) == chname) {
if (it.get() == ws) {
return it;
}
}

2
src/service/extapi_service.hpp

@ -48,6 +48,6 @@ class ExtAPIService {
void initialize();
private:
shared_ptr<WebSocket> findws(string chname);
shared_ptr<WebSocket> findws(WebSocket* ws);
};
} // namespace iflytop

13
src/service/wbesocket_connect_mgr_service.cpp

@ -48,9 +48,22 @@ void WbesocketConnectMgrService::findClientByName(string chname, list<shared_ptr
return;
}
list<shared_ptr<WebSocket>> rmoveClients;
for (auto ch : it->second) {
if (ch->getReadyState() == ix::ReadyState::Closed || ch->getReadyState() == ix::ReadyState::Closing) {
rmoveClients.push_back(ch);
continue;
}
clients.push_back(ch);
}
for (auto ch : rmoveClients) {
it->second.remove(ch);
wsClientsInfo.erase((void *)ch.get());
GET_LOGGER(WSConnectMgr)->info("remove client: {} {}, channel: {}", ch->getUrl(), (void *)ch.get(), chname);
}
}
json WbesocketConnectMgrService::getConnectionList() {

2
src/service/wbesocket_connect_mgr_service.hpp

@ -45,6 +45,8 @@ class WbesocketConnectMgrService {
static void removeClient(string chname, shared_ptr<WebSocket> client);
static void findClientByName(string chname, list<shared_ptr<WebSocket>> &clients);
static json getConnectionList();
static void updateConnectList();
};
} // namespace iflytop
Loading…
Cancel
Save