146 lines
3.3 KiB
C++
146 lines
3.3 KiB
C++
#include "stdafx.h"
|
|
|
|
#include "NetworkObject.h"
|
|
#include "Session.h"
|
|
|
|
NetworkObject::NetworkObject()
|
|
{
|
|
session_ = NULL;
|
|
header_size_type_ = HEADER_SIZE_BODY;
|
|
temp_stored_ip_ = 0;
|
|
}
|
|
|
|
NetworkObject::~NetworkObject()
|
|
{
|
|
}
|
|
|
|
void NetworkObject::Disconnect(BOOL bGracefulDisconnect)
|
|
{
|
|
if (session_) {
|
|
session_->Disconnect(bGracefulDisconnect != false);
|
|
}
|
|
}
|
|
|
|
void NetworkObject::OnDisconnect()
|
|
{
|
|
header_size_type_ = HEADER_SIZE_BODY;
|
|
}
|
|
|
|
BOOL NetworkObject::Send(BYTE* pMsg, WORD size)
|
|
{
|
|
if (!session_ || session_->HasDisconnectOrdered() || session_->ShouldBeRemoved()) {
|
|
return false;
|
|
}
|
|
return session_->Send(pMsg, size);
|
|
}
|
|
|
|
BOOL NetworkObject::SendEx(DWORD number_of_messages, BYTE **ppMsg, WORD *pwSize)
|
|
{
|
|
if (!session_ || session_->HasDisconnectOrdered() || session_->ShouldBeRemoved()) {
|
|
return false;
|
|
}
|
|
return session_->SendEx(number_of_messages, ppMsg, pwSize);
|
|
}
|
|
|
|
void NetworkObject::Redirect(NetworkObject* network_object)
|
|
{
|
|
assert(network_object != NULL && "NULL Æ÷ÀÎÅÍ·Î Redirect ½Ãµµ");
|
|
assert(session_ != NULL);
|
|
|
|
session_->BindNetworkObject(network_object);
|
|
}
|
|
|
|
char* NetworkObject::GetIP()
|
|
{
|
|
if (session_) {
|
|
return session_->GetIP();
|
|
}
|
|
else {
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
DWORD NetworkObject::GetIPAddress()
|
|
{
|
|
if (session_)
|
|
{
|
|
SOCKADDR_IN* pSA_IN = (SOCKADDR_IN*)session_->GetSockAddr();
|
|
return (DWORD)pSA_IN->sin_addr.s_addr;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
WORD NetworkObject::GetPort()
|
|
{
|
|
if (session_)
|
|
{
|
|
SOCKADDR_IN* pSA_IN = (SOCKADDR_IN*)session_->GetSockAddr();
|
|
return (WORD)pSA_IN->sin_port;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
#include "SendBuffer.h"
|
|
#include "RecvBuffer.h"
|
|
|
|
void NetworkObject::GetSendBufferInfo(BUFFER_INFO& bufferINFO)
|
|
{
|
|
if (session_) {
|
|
const SendBuffer* send_buffer = session_->GetSendBuffer();
|
|
send_buffer->GetBufferSizeInfo(bufferINFO.m_dwMaxBufferSize, bufferINFO.m_dwCurrentUsedSize);
|
|
}
|
|
else {
|
|
bufferINFO.m_dwMaxBufferSize = 0;
|
|
bufferINFO.m_dwCurrentUsedSize = 0;
|
|
}
|
|
}
|
|
|
|
void NetworkObject::GetRecvBufferInfo(BUFFER_INFO& bufferINFO)
|
|
{
|
|
if (session_) {
|
|
const RecvBuffer* recv_buffer = session_->GetRecvBuffer();
|
|
recv_buffer->GetBufferSizeInfo(bufferINFO.m_dwMaxBufferSize, bufferINFO.m_dwCurrentUsedSize);
|
|
}
|
|
else {
|
|
bufferINFO.m_dwMaxBufferSize = 0;
|
|
bufferINFO.m_dwCurrentUsedSize = 0;
|
|
}
|
|
}
|
|
|
|
int NetworkObject::SetSockOpt(int level, int optname, const char FAR *optval, int optlen)
|
|
{
|
|
if (session_) {
|
|
return session_->SetSockOpt(level, optname, optval, optlen);
|
|
}
|
|
else {
|
|
return SOCKET_ERROR;
|
|
}
|
|
}
|
|
|
|
void NetworkObject::SetSession(Session* session)
|
|
{
|
|
session_ = session;
|
|
|
|
if (session_) {
|
|
temp_stored_ip_ = GetIPAddress();
|
|
}
|
|
}
|
|
|
|
// CHANGES: f110615.2L, added to solve high-load network bottleneck problem
|
|
bool NetworkObject::UseSendPendingBuffer(DWORD pending_buffer_size)
|
|
{
|
|
if (session_ == NULL) {
|
|
return false;
|
|
};
|
|
return session_->GetSendBuffer()->UsePendingBuffer(pending_buffer_size);
|
|
}
|
|
|
|
// CHANGES: f110616.3L, added to solve high-load network bottleneck problem
|
|
bool NetworkObject::UseRecvDualBuffer(DWORD second_buffer_size)
|
|
{
|
|
if (session_ == NULL) {
|
|
return false;
|
|
};
|
|
return session_->GetRecvBuffer()->UseDualBuffer(second_buffer_size);
|
|
}
|