knightonline/server/shared/SocketDefines.h

49 lines
824 B
C++

#pragma once
enum SocketIOEvent
{
SOCKET_IO_EVENT_READ_COMPLETE = 0,
SOCKET_IO_EVENT_WRITE_END = 1,
SOCKET_IO_THREAD_SHUTDOWN = 2,
NUM_SOCKET_IO_EVENTS = 3,
};
class OverlappedStruct
{
public:
OVERLAPPED m_overlap;
SocketIOEvent m_event;
Atomic<bool> m_inUse;
OverlappedStruct(SocketIOEvent ev) : m_event(ev)
{
memset(&m_overlap, 0, sizeof(OVERLAPPED));
m_inUse = false;
};
OverlappedStruct()
{
memset(&m_overlap, 0, sizeof(OVERLAPPED));
m_inUse = false;
}
INLINE void Reset(SocketIOEvent ev)
{
memset(&m_overlap, 0, sizeof(OVERLAPPED));
m_event = ev;
}
void Mark()
{
bool val = false;
if (!m_inUse.compare_exchange(val, true))
TRACE("!!!! Network: Detected double use of read/write event! Previous event was %u.\n", m_event);
}
void Unmark()
{
m_inUse = false;
}
};