Skip to content

Commit

Permalink
add all files
Browse files Browse the repository at this point in the history
  • Loading branch information
koolhazz committed Apr 16, 2014
0 parents commit 6524fd5
Show file tree
Hide file tree
Showing 224 changed files with 50,756 additions and 0 deletions.
160 changes: 160 additions & 0 deletions .svn/pristine/00/0007ed025e8d8aa31987dfcbc215c14a1048fca2.svn-base
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
#pragma once

#include "log.h"

enum PACKETVER
{
SERVER_PACKET_DEFAULT_VER = 1,
SERVER_PACKET_DEFAULT_SUBVER = 1,
SERVER_PACKET_DEFAULT_SUBCMD = 0,
SERVER_PACKET_DEFAULT_SEQ = 1,
SERVER_PACKET_DEFAULT_SOURCETYPE = 1,
SERVER_PACKET_MAX_COMMAND = 65535
};

typedef unsigned char BYTE;

#define cast(T, t) (T)(t)
#define cast_uint16(t) cast(unsigned short, (t))


// ��������
template <class INPUT_PACKET>
class PacketParser
{
public:
PacketParser(void)
{
m_pBuf = m_Packet.packet_buf();
m_version = SERVER_PACKET_DEFAULT_VER;
m_subVersion = SERVER_PACKET_DEFAULT_SUBVER;
reset();
}
virtual ~PacketParser(void){}
// ����Packet
virtual int OnPacketComplete(INPUT_PACKET *) = 0;
// ����PACKET����
int ParsePacket(char *data, int length)
{
int ret = -1; //��������
int ndx = 0;
while(ndx < length && m_nStatus != REQ_ERROR)//���ܻ�ͬʱ��������
{
switch(m_nStatus)
{
case REQ_REQUEST:
case REQ_HEADER:
if(!read_header(data, length, ndx))
break;
ret = parse_header();
if(ret != 0)
{
m_nStatus = REQ_ERROR;
break;
}else
m_nStatus = REQ_BODY;
case REQ_BODY:
if(parse_body(data, length, ndx))
m_nStatus = REQ_DONE;
break;
default:
return -1;
}
if(m_nStatus == REQ_ERROR)
return ret;
if(m_nStatus == REQ_DONE)
{
if(OnPacketComplete(&m_Packet) == -1)
return -1;
this->reset();
}
}
return 0; // return 0 to continue
}
protected:
void reset(void)
{
m_nStatus = REQ_REQUEST;
m_nPacketPos = 0;
m_nBodyLen = 0;
m_Packet.Reset();//����ɸ�λ
}

public:
short m_version;
short m_subVersion;

private:
// ��ǰ����״̬
int m_nStatus;
// PacketPos
int m_nPacketPos;
// BODY����
int m_nBodyLen;
// PacketBuffer ָ��
char *m_pBuf;
// PacketBuffer
INPUT_PACKET m_Packet;
// ״̬
enum REQSTATUS{ REQ_REQUEST=0, REQ_HEADER, REQ_BODY, REQ_DONE, REQ_PROCESS, REQ_ERROR };

private:

// ��ȡPacketͷ����
bool read_header(char *data, int length, int &ndx)
{
while(m_nPacketPos < INPUT_PACKET::PACKET_HEADER_SIZE && ndx < length)//
{
m_pBuf[m_nPacketPos++] = data[ndx++];
}
if(m_nPacketPos < INPUT_PACKET::PACKET_HEADER_SIZE)
return false;

return true;
}
// ����Packetͷ��Ϣ
int parse_header(void) //0:�ɹ� -1:������ -2:���Χ���� -3:�汾���� -4:���ȴ���
{
if(m_pBuf[2] != 'B' || m_pBuf[3] != 'Y')
return -1;

unsigned short nCmdType = cast_uint16(m_Packet.GetCmdType());
if(nCmdType <= 0 || nCmdType >= SERVER_PACKET_MAX_COMMAND)
return -2;

char v1 = m_Packet.GetVersion();
char v2 = m_Packet.GetSubVersion();
if(v1 != m_version || v2 != m_subVersion)
return -3;
m_nBodyLen = m_Packet.GetBodyLength();
if(m_nBodyLen >= 0 && m_nBodyLen < (INPUT_PACKET::PACKET_BUFFER_SIZE - 2))
return 0;
return -4;
}
// ����BODY����
bool parse_body(char *data, int length, int &ndx)
{
int nNeed = (m_nBodyLen+2) - m_nPacketPos;
int nBuff = length - ndx;

if(nNeed <= 0)
return true;
if(nBuff <= 0)
return false;

int nCopy = nBuff < nNeed ? nBuff : nNeed;
if(!m_Packet.WriteBody(data + ndx, nCopy))
return false;

m_nPacketPos += nCopy;
ndx += nCopy;

if(m_nPacketPos < (m_nBodyLen + 2))
return false;

return true;
}
};

//short PacketParser<NETInputPacket>::m_version = SERVER_PACKET_DEFAULT_VER;
//short PacketParser<NETInputPacket>::m_subVersion = SERVER_PACKET_DEFAULT_SUBVER;
64 changes: 64 additions & 0 deletions .svn/pristine/00/009d345251314bd5777e2de3d04ab75806a35a0f.svn-base
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
#include "timer_event.h"
#include "lua_interface.h"
#include "log.h"

void handle_timeout(void* ptr)
{
TimerEvent* sh = (TimerEvent*)ptr;
sh->OnTimer(sh->m_ev.time_id);
}

unsigned long TimerEvent::m_increase_id = 0;
timer_list_t timer_list;

TimerEvent::TimerEvent()
{
m_guid = ++m_increase_id;
}

TimerEvent::~TimerEvent(void)
{
}

void TimerEvent::StartTimer(int sec, int usec)
{
m_timeout = sec;
start_timer(sec, usec, &m_ev);
}

void TimerEvent::StopTimer()
{
stop_timer(&m_ev);
}

void TimerEvent::ResetTimer()
{
StopTimer();
StartTimer(m_timeout);
}

//void TimerEvent::SetTimerId(int timer_id)
void TimerEvent::SetTimerId(unsigned long timer_id)
{
m_ev.time_id = timer_id;
m_ev.callback = handle_timeout;
m_ev.ptr = this;
}

//void TimerEvent::OnTimer(int timer_id)
void TimerEvent::OnTimer(unsigned long timer_id)
{
int ret;

log_debug("TimerEvent::OnTimer, timer_id = %lu \n", m_ev.time_id);

call_lua("handle_timeout", "d>d", m_guid, &ret);
}

int
TimerEvent::GetRemain()
{
return remain_timer(&m_ev);
}


Loading

0 comments on commit 6524fd5

Please sign in to comment.