1
0
forked from metin2/client
client/src/UserInterface/PythonNetworkStreamPhaseHandShake.cpp

126 lines
3.0 KiB
C++

#include "StdAfx.h"
#include "PythonNetworkStream.h"
#include "PythonApplication.h"
#include "Packet.h"
#include "../eterpack/EterPackManager.h"
// HandShake ---------------------------------------------------------------------------
void CPythonNetworkStream::HandShakePhase()
{
TPacketHeader header;
if (!CheckPacket(&header))
return;
switch (header)
{
case HEADER_GC_PHASE:
if (RecvPhasePacket())
return;
break;
case HEADER_GC_HANDSHAKE:
{
if (!Recv(sizeof(TPacketGCHandshake), &m_HandshakeData))
return;
Tracenf("HANDSHAKE RECV %u %d", m_HandshakeData.dwTime, m_HandshakeData.lDelta);
ELTimer_SetServerMSec(m_HandshakeData.dwTime+ m_HandshakeData.lDelta);
//m_dwBaseServerTime = m_HandshakeData.dwTime+ m_HandshakeData.lDelta;
//m_dwBaseClientTime = ELTimer_GetMSec();
m_HandshakeData.dwTime = m_HandshakeData.dwTime + m_HandshakeData.lDelta + m_HandshakeData.lDelta;
m_HandshakeData.lDelta = 0;
Tracenf("HANDSHAKE SEND %u", m_HandshakeData.dwTime);
if (!Send(sizeof(TPacketGCHandshake), &m_HandshakeData))
{
assert(!"Failed Sending Handshake");
return;
}
CTimer::Instance().SetBaseTime();
return;
}
break;
case HEADER_GC_PING:
RecvPingPacket();
return;
break;
}
RecvErrorPacket(header);
}
void CPythonNetworkStream::SetHandShakePhase()
{
if ("HandShake"!=m_strPhase)
m_phaseLeaveFunc.Run();
Tracen("");
Tracen("## Network - Hand Shake Phase ##");
Tracen("");
m_strPhase = "HandShake";
m_dwChangingPhaseTime = ELTimer_GetMSec();
m_phaseProcessFunc.Set(this, &CPythonNetworkStream::HandShakePhase);
m_phaseLeaveFunc.Set(this, &CPythonNetworkStream::__LeaveHandshakePhase);
SetGameOnline();
if (__DirectEnterMode_IsSet())
{
// None
}
else
{
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_LOGIN], "OnHandShake", Py_BuildValue("()"));
}
}
bool CPythonNetworkStream::RecvHandshakePacket()
{
TPacketGCHandshake kHandshakeData;
if (!Recv(sizeof(TPacketGCHandshake), &kHandshakeData))
return false;
Tracenf("HANDSHAKE RECV %u %d", kHandshakeData.dwTime, kHandshakeData.lDelta);
m_kServerTimeSync.m_dwChangeServerTime = kHandshakeData.dwTime + kHandshakeData.lDelta;
m_kServerTimeSync.m_dwChangeClientTime = ELTimer_GetMSec();
kHandshakeData.dwTime = kHandshakeData.dwTime + kHandshakeData.lDelta + kHandshakeData.lDelta;
kHandshakeData.lDelta = 0;
Tracenf("HANDSHAKE SEND %u", kHandshakeData.dwTime);
kHandshakeData.header = HEADER_CG_TIME_SYNC;
if (!Send(sizeof(TPacketGCHandshake), &kHandshakeData))
{
assert(!"Failed Sending Handshake");
return false;
}
SendSequence();
return true;
}
bool CPythonNetworkStream::RecvHandshakeOKPacket()
{
TPacketGCBlank kBlankPacket;
if (!Recv(sizeof(TPacketGCBlank), &kBlankPacket))
return false;
DWORD dwDelta=ELTimer_GetMSec()-m_kServerTimeSync.m_dwChangeClientTime;
ELTimer_SetServerMSec(m_kServerTimeSync.m_dwChangeServerTime+dwDelta);
Tracenf("HANDSHAKE OK RECV %u %u", m_kServerTimeSync.m_dwChangeServerTime, dwDelta);
return true;
}