forked from LosaDev/ls-2019-source
81 lines
1.5 KiB
C++
81 lines
1.5 KiB
C++
#include "stdafx.h"
|
|
#include "cSession.h"
|
|
#include "../include/IIocpContext.h"
|
|
|
|
|
|
void tinet_ntoa(uint32 IP, TCHAR* buffer)
|
|
{
|
|
SOCKADDR_IN sockAddr;
|
|
sockAddr.sin_addr.s_addr = IP;
|
|
|
|
#ifdef UNICODE
|
|
char szIP[16];
|
|
strcpy_s(szIP, sizeof(szIP), inet_ntoa(sockAddr.sin_addr));
|
|
|
|
uint32 length = MultiByteToWideChar(CP_ACP, 0, szIP, sizeof(szIP)-1, NULL, NULL);
|
|
MultiByteToWideChar(CP_ACP, 0, szIP, sizeof(szIP)-1, buffer, length);
|
|
buffer[length] = NULL;
|
|
#else
|
|
strcpy_s(buffer, sizeof(buffer), inet_ntoa(sockAddr.sin_addr));
|
|
#endif
|
|
}
|
|
|
|
void cSession::OnConnect()
|
|
{
|
|
TCHAR szIP[64];
|
|
tinet_ntoa(GetContext()->GetIP(), szIP);
|
|
|
|
TransferEnd();
|
|
Debug(_T("@¼ÒÄÏ Á¢¼Ó(%s)\n"), szIP);
|
|
}
|
|
|
|
void cSession::OnDisconnect()
|
|
{
|
|
TransferEnd();
|
|
Debug(_T("@¼ÒÄÏ Á¢¼ÓÇØÁ¦\n"));
|
|
}
|
|
|
|
BOOL cSession::TransferBegin(const TCHAR* file, const uint32 length)
|
|
{
|
|
if(!m_transfer)
|
|
{
|
|
m_transfer = TRUE;
|
|
if(length > G_MAXFILESIZE)
|
|
m_buffer.Resize(G_MAXFILESIZE*2);
|
|
else
|
|
m_buffer.Resize(length);
|
|
|
|
m_transferLength = 0;
|
|
ZeroMemory(m_file, sizeof(m_file));
|
|
CopyMemory(m_file, file, sizeof(m_file));
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL cSession::TransferDo(const uint8* buffer, const uint32 length)
|
|
{
|
|
if(m_transfer)
|
|
{
|
|
m_transferLength += length;
|
|
return m_buffer.Append(buffer, length);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
void cSession::TransferWrite()
|
|
{
|
|
if(m_transfer)
|
|
{
|
|
m_buffer.Erase();
|
|
}
|
|
}
|
|
|
|
void cSession::TransferEnd()
|
|
{
|
|
m_transfer = FALSE;
|
|
m_buffer.Erase();
|
|
ZeroMemory(m_file, sizeof(m_file));
|
|
}
|
|
|