Files
2022-10-26 12:25:11 +08:00

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);
}