Fixed one thread per session implementation. Kind of. Still seems to have a handle leak on Windows. However, it does not scale at all and needs to be reverted. It won't even handle 500 players with 500 games on a dual core high end machine.
This commit is contained in:
@@ -18,9 +18,9 @@
|
||||
***************************************************************************/
|
||||
|
||||
#include <net/clientcontext.h>
|
||||
#include <net/sendercallback.h>
|
||||
#include <net/senderthread.h>
|
||||
|
||||
class ClientSenderCallback : public SenderCallback
|
||||
class ClientSenderCallback : public SenderCallback, public SessionDataCallback
|
||||
{
|
||||
public:
|
||||
ClientSenderCallback() {}
|
||||
@@ -30,6 +30,10 @@ public:
|
||||
{
|
||||
}
|
||||
|
||||
virtual void SignalSessionTerminated(unsigned /*session*/)
|
||||
{
|
||||
}
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
@@ -40,10 +44,14 @@ ClientContext::ClientContext()
|
||||
{
|
||||
bzero(&m_clientSockaddr, sizeof(m_clientSockaddr));
|
||||
m_senderCallback.reset(new ClientSenderCallback());
|
||||
m_senderThread.reset(new SenderThread(*m_senderCallback));
|
||||
m_senderThread->Start();
|
||||
}
|
||||
|
||||
ClientContext::~ClientContext()
|
||||
{
|
||||
m_senderThread->SignalStop();
|
||||
m_senderThread->WaitStop();
|
||||
}
|
||||
|
||||
SOCKET
|
||||
@@ -56,7 +64,7 @@ ClientContext::GetSocket() const
|
||||
void
|
||||
ClientContext::SetSocket(SOCKET sockfd)
|
||||
{
|
||||
m_sessionData.reset(new SessionData(sockfd, SESSION_ID_GENERIC, *m_senderCallback));
|
||||
m_sessionData.reset(new SessionData(sockfd, SESSION_ID_GENERIC, m_senderThread, *m_senderCallback));
|
||||
}
|
||||
|
||||
boost::shared_ptr<SessionData>
|
||||
|
||||
Reference in New Issue
Block a user