분류 전체보기
- 윈XP : 사용 가능한 저장소가 부족하여 이 명령을 처리할 수 없습니다. 2013.04.26 1
- MySQL Cluster Quick Start Guide - LINUX(CentOS), mysql 클러스터 세팅 2013.03.18
- 윈도우 라이센스 초기화 2013.01.28
- windows script host 확인 2013.01.28
- ODBC에서 DB와 서버랑 맵핑하는 자료형 정리 2013.01.10 1
- 맵 이동 2012.12.26 3
- 계 회칙 2012.11.26 1
- 로비서버 <-> 게임서버, 게임 시작 루틴 2012.10.31 1
- 서버에서 사용하는 패킷 구조 2012.10.29 1
- Navigation failed. 2012.10.22 1
윈XP : 사용 가능한 저장소가 부족하여 이 명령을 처리할 수 없습니다.
MySQL Cluster Quick Start Guide - LINUX(CentOS), mysql 클러스터 세팅
MySQL Cluster Quick Start Guide - LINUX(CentOS), mysql 클러스터 세팅
속도나 비용면에서 mySQL이 좋은거 같고, 그 중에 클러스터 방법이 게임서버에 적절한 DB인거 같다.
설치하기 전에 참고로 내 컴퓨터 제 소프트/하드 웨어 사양이다.
OS: Windows 2008 R2 x64 Enterprise (full) Terminal (Remote User) V6.01 Build 7601 Service Pack 1
CPU: Intel Core i7 Quad 2600 (Sandy Bridge) 3.40GHz [D2]
RAM: 4.00GB
1. VMware Player 설치 (ver. 5.0.1)
설치 링크: 링크
2. CentOS ISO이미지 다운 받기 (ver. 6.3)
실치 링크: 링크
이 근처에 있는거 아무거나들어가서 6.3을 다운 받으면 됨
3. VMware로 CentOS 설치하기~
Customize Hardware를 누르면 하드웨어 세팅을 할 수 있는데 원한다면 더 고사양이나 저사양으로 세팅하면 됨~
4. CentOS에서 Cluster 돌리기
set.zip에 cmd.txt에 있는 명령어를 한번 실행해주면 된다.
아래 "set.zip"에 실제로 세팅에 사용했던 파일을 업로드 해뒀다. 참고하면 된다.
- cmd.txt -
-Run-
[user1@localhost ~]$ cd ~
[user1@localhost ~]$ tar xvf Downloads/mysql-cluster-gpl-7.2.10-linux2.6-i686.tar.gz
[user1@localhost ~]$ ln -s mysql-cluster-gpl-7.2.10-linux2.6-i686/ mysqlc
[user1@localhost ~]$ mkdir my_cluster my_cluster/ndb_data my_cluster/mysqld_data my_cluster/conf
[user1@localhost ~]$ vi my_cluster/conf/my.cnf
[user1@localhost ~]$ vi my_cluster/conf/config.ini
[user1@localhost ~]$ chmod 755 my_cluster/conf/my.cnf
[user1@localhost ~]$ cd mysqlc
[user1@localhost mysqlc]$ scripts/mysql_install_db --no-defaults --datadir=/home/user1/my_cluster/mysqld_data/
[user1@localhost my_cluster]$ cd ../my_cluster/
[user1@localhost my_cluster]$ /home/user1/mysqlc/bin/ndb_mgmd -f conf/config.ini --initial --configdir=/home/user1/my_cluster/conf/
[user1@localhost my_cluster]$ /home/user1/mysqlc/bin/ndbd -c localhost:1186
[user1@localhost my_cluster]$ /home/user1/mysqlc/bin/ndbd -c localhost:1186
[user1@localhost my_cluster]$ /home/user1/mysqlc/bin/ndb_mgm -e show
[user1@localhost my_cluster]$ /home/user1/mysqlc/bin/mysqld --defaults-file=conf/my.cnf &
-Test-
[user1@localhost my_cluster]$ /home/user1/mysqlc/bin/mysql -h 127.0.0.1 -P 5000 -u root
mysql> create database clusterdb;use clusterdb;
mysql> create table simples (id int not null primary key) engine=ndb;
mysql> insert into simples values (1),(2),(3),(4);
mysql> select * from simples;
+----+
| id |
+----+
| 3 |
| 1 |
| 2 |
| 4 |
+----+
4 rows in set (0.03 sec)
-Safely shut down-
[user1@localhost my_cluster]$ /home/user1/mysqlc/bin/mysqladmin -u root -h 127.0.0.1 -P 5000 shutdown
[user1@localhost my_cluster]$ /home/user1/mysqlc/bin/ndb_mgm -e shutdown
- end cmd.txt -
- my.cnf -
[mysqld]
ndbcluster
datadir=/home/user1/my_cluster/mysqld_data
basedir=/home/user1/mysqlc
port=5000
위와 동일한 버전으로 똑같이 따라했다면 아마 별 무리 없이 세팅이 가능할 것이다.
윈도우 라이센스 초기화
1. 원도우 키 + R
2. cmd 실행
3. slmgr -rearm
4. 재부팅
windows script host 확인
1. 원도우 키 + R
2. cmd 실행
3. slmgr /dlv
---------------------------
Windows Script Host
---------------------------
Software licensing service version: 6.1.7601.17514
Name: Windows Server(R), ServerStandard edition
Description: Windows Operating System - Windows Server(R), TIMEBASED_EVAL channel
Activation ID: da71774d-b2c9-4c42-bb7b-a66365d5abb2
Application ID: 55c92734-d682-4d71-983e-d6ec3f16059f
Extended PID: 00477-00168-001-000034-00-1042-7601.0000-1362012
Installation ID: 005170525401783855619911354565442066339180044582488124
Processor Certificate URL: http://go.microsoft.com/fwlink/?LinkID=88342
Machine Certificate URL: http://go.microsoft.com/fwlink/?LinkID=88343
Use License URL: http://go.microsoft.com/fwlink/?LinkID=88345
Product Key Certificate URL: http://go.microsoft.com/fwlink/?LinkID=88344
Partial Product Key: J9HDR
License Status: Initial grace period
Time remaining: 14400 minute(s) (10 day(s))
Remaining Windows rearm count: 4
Trusted time: 2013-01-28 오후 2:07:23
---------------------------
OK
---------------------------
ODBC에서 DB와 서버랑 맵핑하는 자료형 정리
ODBC에서 DB와 서버랑 맵핑하는 자료형 정리
C Type identifier | ODBC C Typedef | C Type |
---|---|---|
SQL_C_CHAR | SQLCHAR | unsigned char |
SQL_C_STINYINT | SCHAR | char |
SQL_C_UTINYINT [i] | UCHAR | unsigned char |
SQL_C_SSHORT [h] | SQLSMALLINT | short int |
SQL_C_USHORT [h] [i] | SQLUSMALLINT | unsigned short int |
SQL_C_SLONG [h] | SQLINTEGER | int |
SQL_C_ULONG [h] [i] | SQLUINTEGER | unsigned int |
SQL_C_SBIGINT | SQLBIGINT | _int64 [g] |
SQL_C_UBIGINT [i] | SQLUBIGINT | unsigned _int64 [g] solidDB does not support unsigned data types such as this. |
SQL_C_FLOAT | SQLREAL | float |
SQL_C_DOUBLE | SQLDOUBLE SQLFLOAT | double |
SQL_C_NUMERIC | SQLNUMERIC | unsigned char [f] |
SQL_C_DECIMAL | SQLDECIMAL | unsigned char [f] |
SQL_C_BINARY | SQLCHAR * | unsigned char * |
SQL_C_TYPE_DATE [c] | SQL_DATE_STRUCT | struct tagDATE_STRUCT{ SQLSMALLINT year; SQLUSMALLINT month; SQLUSMALLINT day; } DATE_STRUCT; [a] |
SQL_C_TYPE_TIME [c] | SQL_TIME_STRUCT | struct tagTIME_STRUCT { SQLUSMALLINT hour; SQLUSMALLINT minute;[d] SQLUSMALLINT second;[e] } |
SQL_C_TYPE_TIMESTAMP [c] | SQL_TIMESTAMP_STRUCT | struct tagTIMESTAMP_STRUCT { SQLSMALLINT year; [a] SQLUSMALLINT month; [b] SQLUSMALLINT day; [c] SQLUSMALLINT hour; SQLUSMALLINT minute; [d] SQLUSMALLINT second;[e] SQLUINTEGER fraction; } |
맵 이동
void 맵이동()
{
if( 맵을 생성해야 하나? )
{
맵 생성;
Npc 생성;
}
기존 맵에 있는 클라가 걸려있는 버프 저장;
기존 맵에 있는 클라에 유닛 제거;
방금 접속한 클라 생성;
방금 접속한 클라에게 이전맵에서 가지고 있었던 버프를 걸어줌;
방금 접속한 클라 정보를 맵안에 모든 클라에게 정보 전송;
방금 접속한 클라 버프정보를 맵안에 모든 클라에게 정보 전송;
Npc 정보 -> 방금 접속한 클라에게 전송;
Npc 버프 정보-> 방금 접속한 클라에게 전송;
기존 맵에 있었던 클라 정보 -> 방금 접속한 클라에게 정보 전송;
기존 맵에 있었던 클라 버프 정보 -> 방금 접속한 클라에게 버프 정보 전송;
}
계 회칙
제 1 장 총칙
제 1 조 [명칭] - 본 회의 명칭은 "1.5"로 한다.
제 2 조 [목적] - 회원 상호간의 친목을 도모하고, 우정을 깊게하는데 목적이 있다.
제 2 장 회원
제 1 조 [가입]
1) 입회를 원하는 사람이 있을 때 회원들의 만장일치로 입회한다.
2) 입회비로는 기존 잔액을 1/n로 나눈 금액을 입금해야 한다.
제 2 조 [탈퇴]
1) 회원 탈퇴는 개인자유이며, 기존 잔액을 받지 못 한다. 하지만 부득이한 사정에 의한 탈퇴는 1/n을 지급한다.
제 3 장 회원 운영
제 1 조 [조직구성] - 회장 1명, 부회장 1명
제 2 조 [회장의 임무] - 회장은 총괄 운영과 회무를 관장하며, 부회장은 서포트를 한다.
제 3 조 [임원선출 및 임기] - 분기별(1월, 4월, 7월, 10월) 정기모임에 다수결로 회장을 선출하며 임기는 3개월이다. 부회장은 회장 마음대로 뽑는다.
제 4장 모임
제 1조 [모임]
1) 정기 모임은 매월 1째주 금요일로 지정한다.
2) 정기 모임 이외에도 회장과 회원이 조율해서 날짜를 지정해 모임이 잡힐 수 있다.
제 5장 회비 운영
제 1 조 [회비의 징수]
1) 매월 7일까지 이만오천원(\25,000)씩 전용계좌(신한은행, 110-377-292650)로 입금 한다.
2) 날짜를 어길 시 벌금 오천원이며, 무단으로 3회 이상 입금하지 않을 시 강제 탈퇴가 된다.
3) 회장이 일일이 신경쓰는 일이 없도록 자동이체를 걸어두는걸 원칙으로 한다.
4) 모임에 참석하지 않아도 동일하게 납부해야 한다.
제 2 조 [회비의 사용]
1) 모든 결제는 반드시 체크카드로 하도록 한다. 따로 서면으로 기록하는 번거로움을 피하기 위함이다.
2) 모임이 진행되는데 사용되는 모든 금전적인 부분에서 사용하도록 한다.
3) 사용 내역(통장 내역)은 회장에게 요청해 언제든지 열람 가능하다.
제 6장 해산
제 1 조 [해산] - 해산은 회원들의 만장일치로 결정이 되며, 기존 잔액을 1/n로 나눠서 배분하고 해산한다.
로비서버 <-> 게임서버, 게임 시작 루틴
1. 로비서버 -> 게임서버
클라 정보 전달
2. 게임서버
클라가 접속하길 기다린다. (10초간)
3. 게임서버
접속이 완료 되면 각 클라 정보를 각 클라에게 보낸다.
4. 클라 -> 게임서버
클라에서 준비가 완료되면 게임서버로 게임을 시작 할 모든 준비가 끝났음을 알린다.
5. 게임서버 -> 클라
모든 클라에게 게임 시작을 알린다.
서버에서 사용하는 패킷 구조
서버에서 사용하는 패킷 구조
전체 4096 Bytes |
|||
전체 패킷 길이 4 Bytes |
고유번호(패킷복사, 해킹방지) 4 Bytes |
프로토콜 4 Bytes | 데이터 4084 Bytes |
암호화 |
1. 전체 패킷 길이
1개의 패킷이 어디까지 인지 알려준다.
2. 고유번호
클라에서 패킷을 보낼 때 마다 하나씩 증가시키는 것이 원칙이고, 서버에서는 순차적으로 패킷이 왔는데, 만약 증가되지 않으면 복사 패킷으로 인지해서 그 패킷은 무시하게 된다.
3. 프로토콜
패킷의 용도를 담는 곳으로, 캐릭터가 이동한다던지, 공격한다던지 정해진 규칙에 따라서 패킷 내용을 채운다.
4. 데이터
프로토콜에서 정한 규칙에 따른 데이터들을 나열해 놓은 것으로, 캐릭터 이동이라면 X, Y 좌표 값이고, 공격이라면 특정 몬스터 인덱스 값, 사용되는 스킬 번호등 이러한 정보들이 담기게 된다.
대략의 코드 구조
// LENGTH(4) | PACKET_NUMBER(4) | PROTOCOL(4) | DATA (4084)
// 패킷의 전체 길이 계산
// 패킷 전체 길이 = 패킷 길이 + 패킷 고유 번호 + 프로토콜 + 데이터 길이
WORD PacketLength = sizeof(PacketLength)/*LENGTH*/ +
sizeof(DWORD)/*PACKETNUMBER*/ +
sizeof(DWORD)/*PROTOCOL*/ +
(WORD)packetLength;
// 패킷 길이가 최대 버퍼 길이보다 길면 실패함
if (PacketLength >= MAX_BUFFER_LENGTH)
return FALSE;
// 고유번호를 하나 증가시킵니다.
mCurrentPacketNumber++;
// 들어온 데이터를 이용해서 패킷을 만들기 위한 버퍼
BYTE TempBuffer[MAX_BUFFER_LENGTH] = {0,};
// 패킷을 만듭니다.
// 패킷에 인덱스를 붙여 순서 보정을 해 주어야 한다.
// [=>패킷전체길이][고유번호][프로토콜][데이터]
memcpy(TempBuffer, &PacketLength, sizeof(PacketLength));
// [패킷전체길이][=>고유번호][프로토콜][데이터]
memcpy(TempBuffer +
sizeof(WORD)/*LENGTH*/,
&mCurrentPacketNumber, sizeof(DWORD));
// [패킷전체길이][고유번호][=>프로토콜][데이터]
memcpy(TempBuffer +
sizeof(WORD)/*LENGTH*/ +
sizeof(DWORD)/*PACKETNUMBER*/,
&protocol, sizeof(DWORD));
// [패킷전체길이][고유번호][프로토콜][=>데이터]
memcpy(TempBuffer +
sizeof(WORD)/*LENGTH*/ +
sizeof(DWORD)/*PACKETNUMBER*/ +
sizeof(DWORD)/*PROTOCOL*/,
packet, packetLength);
// 보내는 데이터를 Encrypt 함수를 이용해서 암호화합니다.
CCrypt::Encrypt(TempBuffer + sizeof(DWORD), TempBuffer + sizeof(DWORD), PacketLength - sizeof(DWORD));
클라이언트와 논의 후 바뀐 패킷 구조
전체 4096 Bytes | |||
전체 패킷 길이 2 Bytes | 고유번호(패킷복사, 해킹방지) 4 Bytes | 프로토콜 4 Bytes | 데이터 4086 Bytes |
암호화 |
Navigation failed.
---------------------------
Microsoft Visual Studio
---------------------------
Navigation failed. Cannot find C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\VCWizards\AppWiz\Generic\Application\HTML\1033\default.htm
---------------------------
OK
---------------------------
도구->옵션