/* ====================================================================
 * 파    일 :	serverProtocol.h
 * 목    적 :	
 * 작 성 자 :	곽철중
 * 작 성 일 :	06/12/26
 * 주의사항 :	
 * =================================================================== */
#ifndef __SERVERL_PROTOCOL_H__
#define __SERVERL_PROTOCOL_H__

//#ifndef WINVER
//#define WINVER          0x0500
//#endif
//
//#ifndef _WIN32_WINNT
//#define _WIN32_WINNT    0x0500
//#endif

#pragma once

// 윈도우즈 헤더
#include <windows.h>

// IRIS Login Srv Ports
#define T_LOGIN_CPORT			14400

// IRIS Game Srv Ports
#define T_GAME_CPORT			14600

// IRIS Common Ports
#define U_LOGIN_SPORT			15002
#define U_GAME_SPORT			15004

// IRIS Server & Channel
#define MAX_SERVER		20					// 최대 서버수
#define MAX_CHANNEL		20					// 최대 채널수

#define MAKECID(S,C) (((S<<16)&0xffff0000)|(C&0x0000ffff))

enum CHANNEL_NUMBER
{
	CHN_01 =  1,						// 공용 채널
	CHN_10 = 10,						// 공용 채널
	CHN_11,								// 전용 채널-PVP
};

#define STATUS_SYNC_INIT		0		// 00초
#define STATUS_SYNC_TIME		20000	// 20초
#define STATUS_SYNC_WAIT		60000	// 60초

// 상태 (0준비/1원활/2보통/3혼잡)
enum SERVER_STATUS
{
	_E_STATUS_CLOSED_ = 0,				// 등록된 채널이 없는 상태
	_E_STATUS_RUNABLE_,					// 작업 수행대기
	_E_STATUS_RUNNING_S1_,				// 작업 수행하고 있음 - 일반 사용자 제한 해지 (원활)
	_E_STATUS_RUNNING_S2_,				// 작업 수행하고 있음 - 일반 사용자 제한 해지 (보통)
	_E_STATUS_RUNNING_S3_,				// 작업 수행하고 있음 - 일반 사용자 제한 해지 (혼잡)
	_E_STATUS_CLOSING_,					// 채널 닫기중

	_E_STATUS_FIN_WAIT1_,				// 마지막 대기 1
	_E_STATUS_FIN_WAIT2_,				// 마지막 대기 2
	_E_STATUS_LAST_ACK_,				// 최종 확인
	_E_STATUS_DELETE_,					// 강제삭제
	_E_STATUS_ERROR_,					// 오류발생
};

enum PVP_STATUS
{
	_E_PVP_CLOSED_ = 0,					// 종료(완료)
	_E_PVP_RUNABLE_,					// 작업 수행대기
	_E_PVP_RUNNING_,					// 작업 수행하고 있음
	_E_PVP_CLOSING_,					// 종료중
};

enum SERVER_PROTOCOL
{
	// 채널
	MB_CH_SYNC_SYN = 0,
	MB_CH_LIST_SYN,
	MB_CH_STATUS_SYN,

	// 공지
	MB_SERVER_NOTICE_SYN,

	// 채팅
	MB_CHAT_SHOUT_SYN,
	MB_CHAT_SYN,

	// PVP
	MB_PVP_STATUS_SYN,
	MB_PVP_NOTICE_SYN,

	// 길드
	MB_GUILD_SYNC_SYN,
	MB_GUILD_CONNECTSYNC_SYN,

	// 몬스터
	MB_MONSTER_SYN_SYN,
};

// 1Byte 정렬 설정
#pragma pack(1)

#ifndef _MSGBUF_
#define _MSGBUF_
struct MSGBUF
{
//	char category;
	char protocol;
};
#endif

// SERVER_PROTOCOL::MB_CH_SYNC_SYN
struct MB_SYN_CH_SYNC : MSGBUF {};

// SERVER_PROTOCOL::MB_CH_LIST_SYN
struct MB_SYN_CH_LIST : MSGBUF
{
	long rowCount;
	struct
	{
		long cid;							// Connection Index (Server & Channel Number)
		BYTE status;						// SERVER_STATUS 참조
	} channels[1];
	long Length ( ) { return (sizeof(MB_SYN_CH_LIST)-sizeof(channels)) + (sizeof(channels)*rowCount); }
};

// SERVER_PROTOCOL::MB_CH_STATUS_SYN
struct MB_SYN_CH_STATUS : MSGBUF
{
	long cid;								// Connection Index (Server & Channel Number)
	BYTE status;							// SERVER_STATUS 참조
};

// SERVER_PROTOCOL::MB_SERVER_NOTICE_SYN
// defined commondefines.h file
#define MAX_SERVER_NOTICE_LEN	127
#define MAX_SERVER_NOTICE_BUF	MAX_SERVER_NOTICE_LEN+1

struct MB_SYN_SERVER_NOTICE : MSGBUF
{
	long    cid;							// Connection Index (Server & Channel Number)
	wchar_t message[MAX_SERVER_NOTICE_BUF];	// 메세지
};

// SERVER_PROTOCOL::MB_CHAT_SHOUT_SYN
// defined commondefines.h file
#define MAX_NAME_LEN	16
#define MAX_NAME_BUF	MAX_NAME_LEN+1
#define MAX_CHAT_LEN	127
#define MAX_CHAT_BUF	MAX_CHAT_LEN+1

struct MB_SYN_CHAT_SHOUT : MSGBUF
{
	long		   cid;						// Connection Index (Server & Channel Number)
	unsigned short numOfMap;				// 보낸 캐릭터 위치
	long           characterIdx;            // 보낸 캐릭터 고유번호
	wchar_t        name[MAX_NAME_BUF];		// 보낸 캐릭터 이름
	wchar_t        message[MAX_CHAT_BUF];	// 메세지
};

// SERVER_PROTOCOL::MB_PVP_STATUS_SYN
struct MB_SYN_PVP_STATUS : MSGBUF
{
	long cid;								// Connection Index (Server & Channel Number)
	BYTE status;							// PVP_STATUS 참조
};

// SERVER_PROTOCOL::MB_PVP_NOTICE_SYN
struct MB_SYN_PVP_NOTICE : MSGBUF
{
	long cid;								// Connection Index (Server & Channel Number)
	unsigned char leftMinute;				// 남은시간(분)
};

// SERVER_PROTOCOL::MB_GUILD_SYNC_SYN
struct MB_SYN_GUILD_SYNC : MSGBUF
{
	long cid;								// Connection Index (Server & Channel Number)
	char msg[1];							// 메시지
};

// SERVER_PROTOCOL::MB_GUILD_CONNECTSYNC_SYN
struct MB_SYN_GUILD_CONNECTSYNC : MSGBUF
{
	long cid;								// Connection Index (Server & Channel Number)
};

// SERVER_PROTOCOL::MB_MONSTER_SYNC_SYN
struct MB_SYN_MONSTER_SYNC : MSGBUF
{
	long cid;								// Connection Index (Server & Channel Number)
	char msg[1];							// 메시지
};

// SERVER_PROTOCOL::MB_CHAT_SYN
struct MB_SYN_CHAT_SYNC : MSGBUF
{
	long cid;								// Connection Index (Server & Channel Number)
	char msg[1];							// 메시지
};


// 1Byte 정렬 해제
#pragma pack( )

#endif // __SERVERL_PROTOCOL_H__
