47 lines
1.2 KiB
C++
47 lines
1.2 KiB
C++
#include <server/socket/FakeSocket.h>
|
|
|
|
namespace td {
|
|
namespace server {
|
|
|
|
void FakeSocket::SendPeer(PeerID a_Peer, const protocol::PacketBase& a_Packet) {
|
|
auto socket = m_Clients.at(a_Peer);
|
|
assert(socket.has_value());
|
|
socket.value()->OnReceive(a_Packet);
|
|
}
|
|
|
|
void FakeSocket::ReceiveFromFakePeer(PeerID a_Peer, const protocol::PacketBase& a_Packet) {
|
|
OnReceivePeer(a_Peer, a_Packet);
|
|
}
|
|
|
|
PeerID FakeSocket::ConnectFakePeer(const std::shared_ptr<client::FakeSocket>& a_Socket) {
|
|
int peerId = GetNextFreeId();
|
|
if (peerId == -1) {
|
|
peerId = m_Clients.size();
|
|
m_Clients.push_back(a_Socket);
|
|
} else {
|
|
m_Clients.emplace(m_Clients.begin() + peerId, a_Socket);
|
|
}
|
|
a_Socket->OnConnect();
|
|
OnConnectPeer(peerId);
|
|
return peerId;
|
|
}
|
|
|
|
void FakeSocket::DisconnectFakePeer(PeerID a_Peer) {
|
|
auto socket = m_Clients.at(a_Peer);
|
|
assert(socket.has_value());
|
|
socket.value()->OnDisconnect();
|
|
OnDisconnectPeer(a_Peer);
|
|
}
|
|
|
|
int FakeSocket::GetNextFreeId() {
|
|
auto it = std::find_if(m_Clients.begin(), m_Clients.end(), [](const auto& a_Value) { return !a_Value.has_value(); });
|
|
|
|
if (it == m_Clients.end())
|
|
return -1;
|
|
|
|
return std::distance(m_Clients.begin(), it);
|
|
}
|
|
|
|
} // namespace server
|
|
} // namespace td
|