IronsDu / brynet

A Header-Only cross-platform C++ TCP network library . We can use vcpkg(https://github.com/Microsoft/vcpkg/tree/master/ports/brynet) install brynet.
MIT License
1.05k stars 241 forks source link

在session->setDataCallback<brynet::net::TcpConnection::DataCallback>()函数中怎么获得session #103

Open KenForever1 opened 3 years ago

KenForever1 commented 3 years ago

using DataCallback = std::function<void(brynet::base::BasePacketReader&)>;中只能获得数据,请问怎么同时获得sender的session呢

IronsDu commented 3 years ago

使用lambda作为callback。在lambda里capture session。比如:

session->setDataCallback([session](brynet::base::BasePacketReader&) {
});
KenForever1 commented 3 years ago

感谢,如果直接绑定callback函数就拿不到session,如果采用lambda函数捕获session,然后调用回调函数就可以拿到了。比如:

session->setDataCallback<brynet::net::TcpConnection::DataCallback>(
                [session, this](brynet::base::BasePacketReader &reader) {
                    dataCallBackFuncWithSession(session, reader);
                });
IronsDu commented 3 years ago

@kkt 也可以在 Listener的AddEnterCallback 里构造你业务层的对象(看起来就像你dataCallBackFuncWithSession函数的类型),然后直接把session存进去。就没必要在 setDataCallback 里捕获session了。