├── .cproject
├── .gitignore
├── .project
├── Makefile
├── ReadMe.md
├── config
├── bag
│ └── item.json
├── monster
│ ├── ai_behavior.xml
│ └── ai_config.json
├── player
│ ├── level.json
│ └── util.json
├── server
│ ├── server_conf.json
│ └── server_misc.json
├── sql
│ ├── account.sql
│ ├── game.sql
│ └── log.sql
├── struct
│ ├── game_struct.xml
│ ├── log_struct.xml
│ ├── message.define
│ └── msg_struct.xml
└── vip
│ ├── recharge.json
│ └── vip.json
├── db_server
├── DB_Manager.cpp
├── DB_Manager.h
├── DB_Server.cpp
├── DB_Server.h
├── DB_Worker.cpp
├── DB_Worker.h
├── Mongo_Operator.cpp
├── Mongo_Operator.h
├── Mongo_Struct.cpp
├── Mongo_Struct.h
├── Mysql_Operator.cpp
├── Mysql_Operator.h
├── Mysql_Struct.cpp
└── Mysql_Struct.h
├── doc
├── gen_msg.sh
├── git使用说明.txt
├── struct_tool
├── websocket.html
├── 压力测试20160715.docx
├── 服务器导出API.xlsx
├── 服务器技术说明.docx
└── 服务器架构图.ppt
├── env
├── curl-7.50.1.tar.gz
├── install_server.sh
├── jsoncpp-bin-0.5.0-release.tar.bz2
├── mongodb-bin-linux-x86_64-3.0.8.tar.gz
├── mongodb-lib-3.0.8.tar.gz
├── mysql-connector-c++-1.1.7-linux-el7-x86-64bit.tar.gz
├── netlib.tar.gz
├── openssl-1.0.1g.tar.gz
└── v8.tar.gz
├── game_server
├── AI_Manager.cpp
├── AI_Manager.h
├── Aoi_Entity.cpp
├── Aoi_Entity.h
├── Aoi_Manager.cpp
├── Aoi_Manager.h
├── Behavior_Tree.cpp
├── Behavior_Tree.h
├── Game_Connector.cpp
├── Game_Connector.h
├── Game_Manager.cpp
├── Game_Manager.h
├── Game_Player.cpp
├── Game_Player.h
├── Game_Scene.cpp
├── Game_Scene.h
├── Game_Server.cpp
├── Game_Server.h
├── Game_Timer.cpp
├── Game_Timer.h
├── Scene_Entity.cpp
├── Scene_Entity.h
├── Scene_Manager.cpp
└── Scene_Manager.h
├── gate_server
├── Gate_Client_Messager.cpp
├── Gate_Client_Messager.h
├── Gate_Connector.cpp
├── Gate_Connector.h
├── Gate_Inner_Messager.cpp
├── Gate_Inner_Messager.h
├── Gate_Manager.cpp
├── Gate_Manager.h
├── Gate_Player.cpp
├── Gate_Player.h
├── Gate_Server.cpp
├── Gate_Server.h
├── Gate_Timer.cpp
└── Gate_Timer.h
├── js
├── bag.js
├── config.js
├── enum.js
├── error.js
├── game_player.js
├── game_server.js
├── guild.js
├── mail.js
├── master_player.js
├── master_server.js
├── message.js
├── npc.js
├── offline.js
├── rank.js
├── struct.js
├── timer.js
└── util.js
├── lib
├── Accept.cpp
├── Accept.h
├── Base_Struct.cpp
├── Base_Struct.h
├── Block_Buffer.h
├── Block_List.h
├── Block_Pool_Group.h
├── Common_Func.cpp
├── Common_Func.h
├── Config.cpp
├── Config.h
├── Connect.cpp
├── Connect.h
├── Connector.cpp
├── Connector.h
├── Date_Time.cpp
├── Date_Time.h
├── Epoll_Watcher.cpp
├── Epoll_Watcher.h
├── Event_Handler.h
├── Hot_Update.cpp
├── Hot_Update.h
├── Http_Client.cpp
├── Http_Client.h
├── Http_Parser_Wrap.cpp
├── Http_Parser_Wrap.h
├── Lib_Log.cpp
├── Lib_Log.h
├── List.h
├── Log.cpp
├── Log.h
├── Log_Connector.cpp
├── Log_Connector.h
├── Mutex_Guard.h
├── Mysql_Conn.cpp
├── Mysql_Conn.h
├── Object_Pool.h
├── Priority_Queue.h
├── Public_Define.cpp
├── Public_Define.h
├── Receive.cpp
├── Receive.h
├── Send.cpp
├── Send.h
├── Server.cpp
├── Server.h
├── Sha1.cpp
├── Sha1.h
├── Svc.cpp
├── Svc.h
├── Svc_Http.cpp
├── Svc_Http.h
├── Svc_Static_List.h
├── Svc_Tcp.cpp
├── Svc_Tcp.h
├── Svc_WebSocket.cpp
├── Svc_WebSocket.h
├── Thread.h
├── Thread_Mutex.h
├── Time_Value.cpp
├── Time_Value.h
├── Xml.cpp
├── Xml.h
├── http_parser.cpp
├── http_parser.h
├── tinystr.cpp
├── tinystr.h
├── tinyxml.cpp
├── tinyxml.h
├── tinyxmlerror.cpp
└── tinyxmlparser.cpp
├── log_server
├── Log_DB.cpp
├── Log_DB.h
├── Log_File.cpp
├── Log_File.h
├── Log_Manager.cpp
├── Log_Manager.h
├── Log_Server.cpp
├── Log_Server.h
├── Log_Struct.cpp
├── Log_Struct.h
├── Log_Timer.cpp
└── Log_Timer.h
├── login_server
├── Login_Client_Messager.cpp
├── Login_Client_Messager.h
├── Login_Inner_Messager.cpp
├── Login_Inner_Messager.h
├── Login_Manager.cpp
├── Login_Manager.h
├── Login_Player.cpp
├── Login_Player.h
├── Login_Server.cpp
├── Login_Server.h
├── Login_Timer.cpp
└── Login_Timer.h
├── main.cpp
├── master_server
├── Master_Connector.cpp
├── Master_Connector.h
├── Master_Manager.cpp
├── Master_Manager.h
├── Master_Player.cpp
├── Master_Player.h
├── Master_Server.cpp
├── Master_Server.h
├── Master_Timer.cpp
└── Master_Timer.h
├── misc
├── Daemon.cpp
├── Daemon.h
├── Daemon_Server.cpp
├── Daemon_Server.h
├── Debug_Server.cpp
├── Debug_Server.h
├── Inner_Msg.cpp
├── Inner_Msg.h
├── Message.h
├── Msg_Manager.cpp
├── Msg_Manager.h
├── Msg_Struct.cpp
├── Msg_Struct.h
├── Player.cpp
├── Player.h
├── Public_Struct.cpp
├── Public_Struct.h
├── Server_Config.cpp
├── Server_Config.h
├── Server_Manager.cpp
└── Server_Manager.h
└── v8
├── Entity_Wrap.cpp
├── Entity_Wrap.h
├── Server_Wrap.cpp
├── Server_Wrap.h
├── V8_Manager.cpp
├── V8_Manager.h
├── V8_Wrap.cpp
└── V8_Wrap.h
/.gitignore:
--------------------------------------------------------------------------------
1 | /Debug/
2 | /Release/
3 | /natives_blob.bin
4 | /snapshot_blob.bin
5 | /server
6 | /obj/
7 |
--------------------------------------------------------------------------------
/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | server
4 |
5 |
6 |
7 |
8 |
9 | org.eclipse.cdt.managedbuilder.core.genmakebuilder
10 | clean,full,incremental,
11 |
12 |
13 |
14 |
15 | org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder
16 | full,incremental,
17 |
18 |
19 |
20 |
21 |
22 | org.eclipse.cdt.core.cnature
23 | org.eclipse.cdt.core.ccnature
24 | org.eclipse.cdt.managedbuilder.core.managedBuildNature
25 | org.eclipse.cdt.managedbuilder.core.ScannerConfigNature
26 |
27 |
28 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 |
2 | ###在这里添加源文件目录
3 | SRCDIR= ./\
4 | ./db_server/\
5 | ./game_server/\
6 | ./gate_server/\
7 | ./log_server/\
8 | ./login_server/\
9 | ./master_server/\
10 | ./misc/\
11 | ./v8/
12 |
13 | ###这里定义目标文件目录
14 | OBJDIR =./obj/
15 |
16 | TARGET_NAME=server
17 |
18 | BIN=./
19 |
20 | INCLUDE=-I/usr/local/include/netlib\
21 | $(addprefix -I, $(SRCDIR))
22 |
23 | LIBDIR=-L./
24 |
25 | LIB=-lnetlib\
26 | -lv8\
27 | -lv8_libplatform\
28 | -lcurl\
29 | -lcrypto\
30 | -lmongoclient\
31 | -lmysqlcppconn\
32 | -ljsoncpp\
33 | -lboost_filesystem\
34 | -lboost_thread-mt\
35 |
36 | CC=g++
37 |
38 | DEPENS=-MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)"
39 |
40 | DEBUGFLAG=-O0 -g3 -c -Wall -fmessage-length=0 -std=c++11
41 |
42 | RELEASEFLAG=-O3 -Wall -c -fmessage-length=0 -std=c++11
43 |
44 | LDFLAG=
45 |
46 | BIN_TARGET=$(OBJDIR)bin/$(TARGET_NAME)
47 |
48 | SRCS=$(wildcard $(addsuffix *.cpp, $(SRCDIR)))
49 |
50 | OBJECTS:=$(addprefix $(OBJDIR), $(subst ./,,$(SRCS:.cpp=.o)))
51 |
52 | .PHONY:all mkobjdir clean
53 |
54 | all:mkobjdir $(BIN_TARGET)
55 |
56 | -include $(OBJECTS:.o=.d)
57 |
58 | $(BIN_TARGET):$(OBJECTS)
59 | $(CC) $(LDFLAG) -o $@ $^ $(LIBDIR) $(LIB)
60 | @echo " "
61 | @echo "Finished building target: $(TARGET_NAME)"
62 | @echo " "
63 | @-cp -f $(BIN_TARGET) $(BIN)
64 |
65 | $(OBJDIR)%.o:%.cpp
66 | ifeq ($(MODE), DEBUG)
67 | @echo "Building DEBUG MODE target $@"
68 | $(CC) $(INCLUDE) $(DEBUGFLAG) $(DEPENS) -o "$(@)" "$(<)"
69 | else
70 | @echo "Building RELEASE MODE target $@"
71 | $(CC) $(INCLUDE) $(RELEASEFLAG) $(DEPENS) -o "$(@)" "$(<)"
72 | endif
73 | @echo " "
74 |
75 | mkobjdir:
76 | @test -d $(OBJDIR) || (mkdir $(OBJDIR) && mkdir $(OBJDIR)bin $(addprefix $(OBJDIR), $(subst ./,,$(SRCDIR))))
77 |
78 | clean:
79 | -rm -rf $(OBJDIR)
80 |
--------------------------------------------------------------------------------
/ReadMe.md:
--------------------------------------------------------------------------------
1 | 服务器是异步非阻塞的多进程多线程架构,运行于CentOS7操作系统。服务器底层使用C++编写,高效稳定,
2 | 使用TCP协议进行进程间以及与客户端的通信。同时也支持UDP、Websocket、Http协议。
3 | 网络通信协议使用自定义格式,具备加密功能,安全高效。游戏数据库支持MongoDB和Mysql,可以选择自己想要的数据库。
4 | 逻辑层使用简单高效的Javascript进行开发,集成Google V8引擎解析脚本,保证脚本运行效率,有js经验的开发人员可以快速上手。
5 |
6 | 服务器分为LoginServer,GateServer,GameServer,MasterServer,DBServer,LogServer。
7 |
8 | LoginServer:客户端发送账号密码到LoginServer,LoginServer去AccountDb验证,
9 | 验证失败断开连接,验证成功,则生成session, 根据玩家账号hash和gate在线人数选择GateIp,GatePort,发送给客户端。
10 |
11 | GateServer:接受客户端发过来的连接,向LoginServer进行session验证,验证成功玩家可以正常登录,
12 | 然后就开始接收客户端消息,转发到Game,Master,类似网关中转器。
13 |
14 | GameServer:
15 | 1、创建角色,角色登录,从DbServer加载数据返回给client,存储玩家数据
16 | 2、场景管理模块
17 | 3、AOI模块
18 | 4、定时器管理模块
19 | 5、怪物AI模块
20 | 6、Player管理模块
21 | 7、C++消息解析包装成js对象
22 |
23 | MasterServer:
24 | 1、管理GameServer,玩家在GameServer进程间跳转
25 | 2、存储在线玩家数据,进行相关校验验证,存储每个玩家对应的gameserver
26 | 3、存储公共数据,例如帮派,好友,邮件,聊天,组队
27 |
28 | V8:V8引擎管理模块,js代码解析,执行js代码,C++函数导出
29 |
30 | DbServer:
31 | 1、建立mongodb引擎和存取数据接口
32 | 2、建立Mysql引擎和存取数据接口
33 |
34 | LogServer:
35 | 1、实现写服务器文件日志功能
36 | 2、实现写玩家操作日志到Mysql Log数据库
37 |
--------------------------------------------------------------------------------
/config/bag/item.json:
--------------------------------------------------------------------------------
1 | {
2 | "100000001": {
3 | "sort": 1,
4 | "name": "测试武器1",
5 | "color": 2,
6 | "attack": 10,
7 | "exp": 20,
8 | "level_exp" : [100,200,300,400,500],
9 | "career": 3,
10 | "part": 0,
11 | "level": 0,
12 | "price": 10
13 | },
14 |
15 | "100000002": {
16 | "sort": 1,
17 | "name": "测试武器2",
18 | "color": 2,
19 | "attack": 10,
20 | "exp": 20,
21 | "level_exp" : [100,200,300,400,500],
22 | "career": 3,
23 | "part": 0,
24 | "level": 0,
25 | "price": 10
26 | },
27 |
28 | "100000003": {
29 | "sort": 1,
30 | "name": "测试武器3",
31 | "color": 2,
32 | "attack": 10,
33 | "exp": 20,
34 | "level_exp" : [100,200,300,400,500],
35 | "career": 3,
36 | "part": 0,
37 | "level": 0,
38 | "price": 10
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/config/monster/ai_behavior.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/config/monster/ai_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "thinking_interval" : 1000,
3 | "low_hp" : 30,
4 | "low_mp" : 30
5 | }
6 |
--------------------------------------------------------------------------------
/config/player/level.json:
--------------------------------------------------------------------------------
1 | {
2 | "1" : {
3 | "level_exp" : 25
4 | },
5 | "2" : {
6 | "level_exp" : 50
7 | },
8 | "3" : {
9 | "level_exp" : 100
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/config/player/util.json:
--------------------------------------------------------------------------------
1 | {
2 | "max_player_level" : 90,
3 | "max_vip_level" : 2,
4 | "daily_refresh_time" : 8
5 | }
6 |
--------------------------------------------------------------------------------
/config/server/server_conf.json:
--------------------------------------------------------------------------------
1 | {
2 | "receive_timeout" : 300, //服务器与客户端心跳等待最大时间 单位:s
3 | "server_send_interval" : 100, //服务器定时发送数据时间 单位:us
4 | "connector_send_interval" : 100, //内部服务器定时发送数据时间 单位:us
5 | //各个服务器配置
6 | "log_server" : {
7 | "server_id" : 1, //服务器id
8 | "server_ip" : "127.0.0.1", //日志服务器ip
9 | "server_port" : 8000 , //日志服务器监听端口
10 | "network_protocol" : 0 //网络协议类型 0:TCP 1:UDP 2:WEBSOCKET
11 | },
12 | "db_server" : {
13 | "server_id" : 1, //服务器id
14 | "server_ip" : "127.0.0.1", //数据库服务器ip
15 | "server_port" : 8100 , //数据库服务器监听端口
16 | "network_protocol" : 0 //网络协议类型 0:TCP 1:UDP 2:WEBSOCKET
17 | },
18 | "login_client_server" : {
19 | "server_id" : 1, //服务器id
20 | "server_ip" : "127.0.0.1", //登录服务器ip
21 | "server_port" : 8200, //登录服务器监听客户端连接的端口
22 | "network_protocol" : 0 //网络协议类型 0:Tcp 1:Udp 2:Websocket 3:Http
23 | },
24 | "login_gate_server" : {
25 | "server_id" : 1, //服务器id
26 | "server_ip" : "127.0.0.1", //登录服务器ip
27 | "server_port" : 8201, //登录服务器监听网关服连接的端口
28 | "network_protocol" : 0 //网络协议类型 0:TCP 1:UDP 2:WEBSOCKET
29 | },
30 | "master_gate_server" : {
31 | "server_id" : 1, //服务器id
32 | "server_ip" : "127.0.0.1", //中央服务器ip
33 | "server_port" : 8300, //中央服务器监听网关服连接的端口
34 | "network_protocol" : 0 //网络协议类型 0:TCP 1:UDP 2:WEBSOCKET
35 | },
36 | "master_game_server" : {
37 | "server_id" : 1, //服务器id
38 | "server_ip" : "127.0.0.1", //中央服务器ip
39 | "server_port" : 8301, //中央服务器监听游戏服连接的端口
40 | "network_protocol" : 0 //网络协议类型 0:TCP 1:UDP 2:WEBSOCKET
41 | },
42 | "master_http_server" : {
43 | "server_id" : 1, //服务器id
44 | "server_ip" : "127.0.0.1", //中央服务器ip
45 | "server_port" : 8080, //中央服务器监听后台连接的端口
46 | "network_protocol" : 3 //网络协议类型 0:Tcp 1:Udp 2:Websocket 3:Http
47 | },
48 | "game_server" : [
49 | {
50 | "server_id" : 1, //服务器id
51 | "server_ip" : "127.0.0.1", //游戏服务器ip
52 | "server_port" : 8400, //游戏服务器监听网关服连接的端口
53 | "network_protocol" : 0 //网络协议类型 0:TCP 1:UDP 2:WEBSOCKET
54 | },
55 | {
56 | "server_id" : 2, //服务器id
57 | "server_ip" : "127.0.0.1", //游戏服务器ip
58 | "server_port" : 8401, //游戏服务器监听网关服连接的端口
59 | "network_protocol" : 0 //网络协议类型 0:TCP 1:UDP 2:WEBSOCKET
60 | }
61 | ],
62 | "gate_server" : [
63 | {
64 | "server_id" : 1, //服务器id
65 | "server_ip" : "127.0.0.1", //网关服务器ip
66 | "server_port" : 8500, //网关服务器监听客户端连接的端口
67 | "network_protocol" : 0 //网络协议类型 0:TCP 1:UDP 2:WEBSOCKET
68 | },
69 | {
70 | "server_id" : 2, //服务器id
71 | "server_ip" : "127.0.0.1", //网关服务器ip
72 | "server_port" : 8501, //网关服务器监听客户端连接的端口
73 | "network_protocol" : 0 //网络协议类型 0:TCP 1:UDP 2:WEBSOCKET
74 | }
75 | ]
76 | }
77 |
--------------------------------------------------------------------------------
/config/server/server_misc.json:
--------------------------------------------------------------------------------
1 | {
2 | "server_type" : 1, //服务器架构类型 1:多进程 2:多线程
3 | "db_type" : 1, //数据库类型 1:mongodb 2:mysql
4 | "server_label" : "test", //服务器标签,ps查询进程时候区分用
5 | "lib_log_switcher" : 0, //网络库日志开关,1表示写入磁盘文件
6 | "server_log_switcher" : 0, //服务器日志开关,1表示写入磁盘文件
7 | "verify_pack" : 1, //是否开启数据包安全验证
8 | "msg_count" : 1, //是否开启消息统计
9 | "agent_num" : 1, //平台编号,比如37wan编号为1,生成角色id,帮派id时候用
10 | "server_num" : 1, //服务器编号,比如1服编号为1,生成角色id,帮派id时候用
11 | "aoi_radius" : 10, //aoi范围单位
12 | "game_db_struct_path" : "config/struct/game_struct.xml",
13 | "log_db_struct_path" : "config/struct/log_struct.xml",
14 | "msg_struct_path" : "config/struct/msg_struct.xml",
15 | "game_server_path" : "js/game_server.js",
16 | "master_server_path" : "js/master_server.js",
17 | "ai_behavior_path" : "config/monster/ai_behavior.xml",
18 | //mongodb游戏数据库配置
19 | "mongodb_game" : {
20 | "ip" : "127.0.0.1",
21 | "port" : 27017
22 | },
23 | //mysql游戏数据库配置
24 | "mysql_game" : {
25 | "ip" : "127.0.0.1",
26 | "port" : 3306,
27 | "user" : "root",
28 | "password" : "123456",
29 | "dbname" : "game",
30 | "dbpoolname" : "game_pool"
31 | },
32 | //mysql 帐号数据库配置
33 | "mysql_account" : {
34 | "ip" : "127.0.0.1",
35 | "port" : 3306,
36 | "user" : "root",
37 | "password" : "123456",
38 | "dbname" : "account",
39 | "dbpoolname" : "account_pool"
40 | },
41 | //mysql 日志数据库配置
42 | "mysql_log" : {
43 | "ip" : "127.0.0.1",
44 | "port" : 3306,
45 | "user" : "root",
46 | "password" : "123456",
47 | "dbname" : "log",
48 | "dbpoolname" : "log_pool"
49 | }
50 | }
51 |
52 |
--------------------------------------------------------------------------------
/config/sql/account.sql:
--------------------------------------------------------------------------------
1 | CREATE DATABASE IF NOT EXISTS `account` DEFAULT CHARACTER SET utf8;
2 | USE `account`;
3 |
4 | DROP TABLE IF EXISTS `account_info`;
5 | CREATE TABLE `account_info` (
6 | account varchar(120) NOT NULL,
7 | password varchar(120) NOT NULL default '',
8 | PRIMARY KEY (`account`)
9 | )ENGINE=InnoDB DEFAULT CHARSET=utf8;
10 |
11 |
12 |
--------------------------------------------------------------------------------
/config/sql/game.sql:
--------------------------------------------------------------------------------
1 | CREATE DATABASE IF NOT EXISTS `game` DEFAULT CHARACTER SET utf8;
2 |
3 | USE `game`;
4 |
5 | DROP TABLE IF EXISTS `global`;
6 | CREATE TABLE `global` (
7 | type varchar(120) NOT NULL,
8 | value bigint(20) NOT NULL default '0',
9 | PRIMARY KEY (`type`)
10 | )ENGINE=InnoDB DEFAULT CHARSET=utf8;
11 |
12 | DROP TABLE IF EXISTS `role`;
13 | CREATE TABLE `role` (
14 | role_id bigint(20) NOT NULL auto_increment,
15 | role_name varchar(120) NOT NULL default '',
16 | account varchar(120) NOT NULL default '',
17 | client_ip varchar(120) NOT NULL default '',
18 | agent_num int(11) NOT NULL default '0',
19 | server_num int(11) NOT NULL default '0',
20 | level int(11) NOT NULL default '0',
21 | exp int(11) NOT NULL default '0',
22 | gender tinyint(3) NOT NULL default '0',
23 | career tinyint(3) NOT NULL default '0',
24 | create_time int(11) NOT NULL default '0',
25 | login_time int(11) NOT NULL default '0',
26 | logout_time int(11) NOT NULL default '0',
27 | vip_level int(11) NOT NULL default '0',
28 | vip_exp int(11) NOT NULL default '0',
29 | charge_gold int(11) NOT NULL default '0',
30 | guild_id bigint(20) NOT NULL default '0',
31 | guild_name varchar(120) NOT NULL default '',
32 | scene_id int(11) NOT NULL default '0',
33 | pos_x int(11) NOT NULL default '0',
34 | pos_y int(11) NOT NULL default '0',
35 | pos_z int(11) NOT NULL default '0',
36 | PRIMARY KEY (role_id)
37 | )ENGINE=InnoDB DEFAULT CHARSET=utf8;
38 |
39 | DROP TABLE IF EXISTS `bag`;
40 | CREATE TABLE `bag` (
41 | role_id bigint(20) NOT NULL auto_increment,
42 | copper int(11) NOT NULL default '0',
43 | gold int(11) NOT NULL default '0',
44 | item_map text NOT NULL,
45 | PRIMARY KEY (role_id)
46 | )ENGINE=InnoDB DEFAULT CHARSET=utf8;
47 |
48 | DROP TABLE IF EXISTS `mail`;
49 | CREATE TABLE `mail` (
50 | role_id bigint(20) NOT NULL auto_increment,
51 | total_count int(11) NOT NULL default '0',
52 | mail_map text NOT NULL,
53 | PRIMARY KEY (role_id)
54 | )ENGINE=InnoDB DEFAULT CHARSET=utf8;
55 |
56 | DROP TABLE IF EXISTS `guild`;
57 | CREATE TABLE `guild` (
58 | guild_id bigint(20) NOT NULL auto_increment,
59 | guild_name varchar(120) NOT NULL default '',
60 | chief_id bigint(20) NOT NULL default '0',
61 | create_time int(11) NOT NULL default '0',
62 | member_list text NOT NULL,
63 | app_list text NOT NULL,
64 | PRIMARY KEY (guild_id)
65 | )ENGINE=InnoDB DEFAULT CHARSET=utf8;
66 |
67 | DROP TABLE IF EXISTS `rank`;
68 | CREATE TABLE `rank` (
69 | rank_type bigint(20) NOT NULL auto_increment,
70 | min_value int(11) NOT NULL default '0',
71 | min_role_id bigint(20) NOT NULL default '0',
72 | member_map text NOT NULL,
73 | PRIMARY KEY (rank_type)
74 | )ENGINE=InnoDB DEFAULT CHARSET=utf8;
75 |
76 | DROP TABLE IF EXISTS `offline`;
77 | CREATE TABLE `offline` (
78 | role_id bigint(20) NOT NULL auto_increment,
79 | guild_id bigint(20) NOT NULL default '0',
80 | guild_name varchar(120) NOT NULL default '',
81 | PRIMARY KEY (role_id)
82 | )ENGINE=InnoDB DEFAULT CHARSET=utf8;
83 |
--------------------------------------------------------------------------------
/config/sql/log.sql:
--------------------------------------------------------------------------------
1 | CREATE DATABASE IF NOT EXISTS `log` DEFAULT CHARACTER SET utf8;
2 |
3 | USE `log`;
4 |
5 | DROP TABLE IF EXISTS `logout`;
6 | CREATE TABLE `logout` (
7 | role_id bigint(20) NOT NULL,
8 | role_name varchar(120) NOT NULL default '',
9 | account varchar(120) NOT NULL default '',
10 | level int(11) NOT NULL default '0',
11 | client_ip varchar(120) NOT NULL default '',
12 | login_time int(11) NOT NULL default '0',
13 | logout_time int(11) NOT NULL default '0'
14 | )ENGINE=InnoDB DEFAULT CHARSET=utf8;
15 |
16 |
--------------------------------------------------------------------------------
/config/struct/log_struct.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/config/vip/recharge.json:
--------------------------------------------------------------------------------
1 | {
2 | "10400" : {
3 | "vip_exp" : 150,
4 | "order" : 23,
5 | "gold" : 150
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/config/vip/vip.json:
--------------------------------------------------------------------------------
1 | {
2 | "0" : {
3 | "max_buy_vitality" : 1,
4 | "level_exp" : 50,
5 | "refresh_shop_count" : 3,
6 | "exchange_count" : 3
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/db_server/DB_Manager.h:
--------------------------------------------------------------------------------
1 | /*
2 | * DB_Manager.h
3 | *
4 | * Created on: Dec 29, 2015
5 | * Author: zhangyalei
6 | */
7 |
8 | #ifndef DB_MANAGER_H_
9 | #define DB_MANAGER_H_
10 |
11 | #include "DB_Worker.h"
12 | #include "Log.h"
13 | #include "Object_Pool.h"
14 | #include "Thread_Mutex.h"
15 |
16 | class DB_Manager {
17 | public:
18 | typedef Object_Pool DB_Worker_Pool;
19 | typedef std::vector DB_Worker_Vector;
20 | typedef boost::unordered_map DB_Cache_Id_Map;
21 | typedef boost::unordered_map DB_Cache_Account_Map;
22 |
23 | static DB_Manager *instance(void);
24 | static void destroy(void);
25 |
26 | int init(int server_id);
27 | int start(void);
28 |
29 | int push_data_block(Block_Buffer *buf);
30 | int send_data_block(int cid, Block_Buffer &buf);
31 |
32 | inline Struct_Id_Map& db_struct_id_map() { return db_struct_id_map_; }
33 | inline Struct_Name_Map& db_struct_name_map() { return db_struct_name_map_; }
34 | inline DB_Cache_Id_Map& db_cache_id_map() { return db_cache_id_map_; }
35 | inline DB_Cache_Account_Map& db_cache_account_map() { return db_cache_account_map_; }
36 |
37 | inline Base_Struct *get_player_data_struct() {
38 | return db_struct_name_map_.find("Player_Data")->second;
39 | }
40 | inline Base_Struct *get_master_data_struct() {
41 | return db_struct_name_map_.find("Master_Data")->second;
42 | }
43 |
44 | int64_t create_player(Create_Role_Info &role_info);
45 | int64_t create_guild(Create_Guild_Info &role_info);
46 |
47 | private:
48 | DB_Manager(void);
49 | virtual ~DB_Manager(void);
50 | DB_Manager(const DB_Manager &);
51 | const DB_Manager &operator=(const DB_Manager &);
52 |
53 | private:
54 | static DB_Manager *instance_;
55 |
56 | DB_Worker_Pool db_worker_pool_;
57 | DB_Worker_Vector db_worker_vec_;
58 |
59 | Struct_Id_Map db_struct_id_map_;
60 | Struct_Name_Map db_struct_name_map_;
61 | DB_Cache_Id_Map db_cache_id_map_;
62 | DB_Cache_Account_Map db_cache_account_map_;
63 |
64 | int load_player_num_; //加载数据的玩家数量
65 | int create_player_num_; //创建的玩家数量
66 | int save_player_num_; //保存数据的玩家数量
67 | int db_data_num_; //保存数据库的消息数量
68 | int db_type_; //数据库类型
69 | };
70 |
71 | #define DB_MANAGER DB_Manager::instance()
72 |
73 | #endif /* DB_MANAGER_H_ */
74 |
--------------------------------------------------------------------------------
/db_server/DB_Server.cpp:
--------------------------------------------------------------------------------
1 | /*
2 | * DB_Server.cpp
3 | *
4 | * Created on: Dec 29, 2015
5 | * Author: zhangyalei
6 | */
7 |
8 | #include "DB_Server.h"
9 | #include "DB_Manager.h"
10 |
11 | DB_Server::DB_Server(void) { }
12 |
13 | DB_Server::~DB_Server(void) { }
14 |
15 | DB_Server *DB_Server::instance_ = 0;
16 |
17 | DB_Server *DB_Server::instance(void) {
18 | if (! instance_)
19 | instance_ = new DB_Server;
20 | return instance_;
21 | }
22 |
23 | void DB_Server::process_list(void) {
24 | Block_Buffer *buf = 0;
25 | while (1) {
26 | if (!block_list_.empty()) {
27 | buf = block_list_.pop_front();
28 | DB_MANAGER->push_data_block(buf);
29 | } else {
30 | //没有数据时候延迟
31 | Time_Value::sleep(Time_Value(0,100));
32 | }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/db_server/DB_Server.h:
--------------------------------------------------------------------------------
1 | /*
2 | * DB_Server.h
3 | *
4 | * Created on: Dec 29, 2015
5 | * Author: zhangyalei
6 | */
7 |
8 | #ifndef DB_SERVER_H_
9 | #define DB_SERVER_H_
10 |
11 | #include "Server.h"
12 |
13 | class DB_Server: public Server {
14 | public:
15 | static DB_Server *instance(void);
16 |
17 | virtual void process_list(void);
18 |
19 | private:
20 | DB_Server(void);
21 | virtual ~DB_Server(void);
22 | DB_Server(const DB_Server &);
23 | const DB_Server &operator=(const DB_Server &);
24 |
25 | private:
26 | static DB_Server *instance_;
27 | };
28 |
29 | #define DB_SERVER DB_Server::instance()
30 |
31 | #endif /* DB_SERVER_H_ */
32 |
--------------------------------------------------------------------------------
/db_server/DB_Worker.h:
--------------------------------------------------------------------------------
1 | /*
2 | * DB_Worker.h
3 | *
4 | * Created on: Dec 29, 2015
5 | * Author: zhangyalei
6 | */
7 |
8 | #ifndef DB_WORKER_H_
9 | #define DB_WORKER_H_
10 |
11 | #include "Public_Struct.h"
12 | #include "Thread.h"
13 | #include "Thread_Mutex.h"
14 | #include "Block_List.h"
15 |
16 | class DB_Worker: public Thread {
17 | public:
18 | typedef Block_List Data_List;
19 |
20 | DB_Worker(void);
21 | virtual ~DB_Worker(void);
22 |
23 | void run_handler(void);
24 | void process_list(void);
25 |
26 | //其他数据库消息
27 | int process_data_block(Block_Buffer *buffer);
28 | //创建角色
29 | int process_create_player(int cid, Create_Role_Info &role_info);
30 | //加载玩家数据
31 | int process_load_player(int cid, std::string &account);
32 | //保存玩家数据
33 | int process_save_player(int cid, int status, Block_Buffer &buffer);
34 | // 创建公会
35 | int process_create_guild(int cid, Create_Guild_Info &guild_info);
36 | // 加载master数据
37 | int process_load_master(int cid);
38 |
39 | //玩家数据处理
40 | int create_player_data(int64_t role_id, Block_Buffer &buffer);
41 | int load_player_data(int64_t role_id, Block_Buffer &buffer);
42 | int save_player_data(Block_Buffer &buffer);
43 |
44 | // 创建角色
45 | int push_create_player(Block_Buffer *buffer);
46 | //加载玩家数据
47 | int push_load_player(Block_Buffer *buffer);
48 | //保存玩家数据
49 | int push_save_player(Block_Buffer *buffer);
50 | //其他数据库消息
51 | int push_data_block(Block_Buffer *buffer);
52 |
53 | private:
54 | Data_List create_player_list_; //创建的玩家数据列表
55 | Data_List load_player_list_; //加载的玩家数据列表
56 | Data_List save_player_list_; //保存的玩家数据列表
57 | Data_List data_list_; //其他数据库消息消息列表
58 | };
59 |
60 | ////////////////////////////////////////////////////////////////////////////////
61 | inline int DB_Worker::push_create_player(Block_Buffer *buffer) {
62 | create_player_list_.push_back(buffer);
63 | return 0;
64 | }
65 |
66 | inline int DB_Worker::push_load_player(Block_Buffer *buffer) {
67 | load_player_list_.push_back(buffer);
68 | return 0;
69 | }
70 |
71 | inline int DB_Worker::push_save_player(Block_Buffer *buffer) {
72 | save_player_list_.push_back(buffer);
73 | return 0;
74 | }
75 |
76 | inline int DB_Worker::push_data_block(Block_Buffer *buffer) {
77 | data_list_.push_back(buffer);
78 | return 0;
79 | }
80 |
81 | #endif /* DB_WORKER_H_ */
82 |
--------------------------------------------------------------------------------
/db_server/Mongo_Operator.h:
--------------------------------------------------------------------------------
1 | /*
2 | * Mongo_Operator.h
3 | *
4 | * Created on: Dec 29, 2015
5 | * Author: zhangyalei
6 | */
7 |
8 | #ifndef DB_OPERATOR_H_
9 | #define DB_OPERATOR_H_
10 |
11 | #include "Public_Struct.h"
12 | #include "Object_Pool.h"
13 | #include "mongo/client/dbclient.h"
14 |
15 | using namespace mongo;
16 |
17 | class Mongo_Operator {
18 | public:
19 | typedef boost::unordered_map Connection_Map;
20 | typedef Object_Pool Connection_Pool;
21 |
22 | static Mongo_Operator *instance(void);
23 | mongo::DBClientConnection &connection(void);
24 |
25 | int init(void);
26 | int load_db_cache(void);
27 |
28 | int64_t generate_id(std::string type);
29 | int64_t create_player(Create_Role_Info &role_info);
30 | int64_t create_guild(Create_Guild_Info &guild_info);
31 |
32 | private:
33 | Mongo_Operator(void);
34 | virtual ~Mongo_Operator(void);
35 | Mongo_Operator(const Mongo_Operator &);
36 | const Mongo_Operator &operator=(const Mongo_Operator &);
37 |
38 | private:
39 | static Mongo_Operator *instance_;
40 | Connection_Pool connection_pool_;
41 | Connection_Map connection_map_;
42 | MUTEX connection_map_lock_;
43 |
44 | int agent_num_; //代理编号
45 | int server_num_; //服务器编号
46 | };
47 |
48 | #define MONGO_INSTANCE Mongo_Operator::instance()
49 | #define MONGO_CONNECTION MONGO_INSTANCE->connection()
50 |
51 | #endif /* DB_OPERATOR_H_ */
52 |
--------------------------------------------------------------------------------
/db_server/Mongo_Struct.h:
--------------------------------------------------------------------------------
1 | /*
2 | * Mongo_Struct.h
3 | *
4 | * Created on: Jul 20, 2016
5 | * Author: zhangyalei
6 | */
7 |
8 | #ifndef MONGO_STRUCT_H_
9 | #define MONGO_STRUCT_H_
10 |
11 | #include "Base_Struct.h"
12 | #include "mongo/client/dbclient.h"
13 |
14 | using namespace mongo;
15 | class Mongo_Struct: public Base_Struct {
16 | public:
17 | Mongo_Struct(Xml &xml, TiXmlNode *node);
18 | virtual ~Mongo_Struct();
19 |
20 | virtual void create_data(int64_t key_index, Block_Buffer &buffer);
21 | virtual void load_data(int64_t key_index, Block_Buffer &buffer);
22 | virtual void save_data(Block_Buffer &buffer);
23 | virtual void save_data_vector(Block_Buffer &buffer);
24 | virtual void delete_data(Block_Buffer &buffer);
25 |
26 | private:
27 | void create_data_arg(const Field_Info &field_info, Block_Buffer &buffer, BSONObjBuilder &builder, int64_t key_index);
28 | void create_data_vector(const Field_Info &field_info, Block_Buffer &buffer, BSONObjBuilder &builder);
29 | void create_data_struct(const Field_Info &field_info, Block_Buffer &buffer, BSONObjBuilder &builder);
30 |
31 | void build_buffer_arg(const Field_Info &field_info, Block_Buffer &buffer, BSONObj &bsonobj);
32 | void build_buffer_vector(const Field_Info &field_info, Block_Buffer &buffer, BSONObj &bsonobj);
33 | void build_buffer_struct(const Field_Info &field_info, Block_Buffer &buffer, BSONObj &bsonobj);
34 |
35 | void build_bson_arg(const Field_Info &field_info, Block_Buffer &buffer, BSONObjBuilder &builder);
36 | void build_bson_vector(const Field_Info &field_info, Block_Buffer &buffer, BSONObjBuilder &builder);
37 | void build_bson_struct(const Field_Info &field_info, Block_Buffer &buffer, BSONObjBuilder &builder);
38 | };
39 |
40 | #endif /* MONGO_STRUCT_H_ */
41 |
--------------------------------------------------------------------------------
/db_server/Mysql_Operator.h:
--------------------------------------------------------------------------------
1 | /*
2 | * Mysql_Operator.h
3 | *
4 | * Created on: Jul 20, 2016
5 | * Author: zhangyalei
6 | */
7 |
8 | #ifndef MYSQL_OPERATOR_H_
9 | #define MYSQL_OPERATOR_H_
10 |
11 | #include "Mysql_Conn.h"
12 | #include "Public_Struct.h"
13 |
14 | class Mysql_Operator {
15 | public:
16 | typedef boost::unordered_map Connection_Map;
17 |
18 | static Mysql_Operator *instance(void);
19 | Mysql_Conn *connection(void);
20 |
21 | int init(void);
22 | int load_db_cache(void);
23 |
24 | int64_t generate_id(std::string type);
25 | int64_t create_player(Create_Role_Info &role_info);
26 | int64_t create_guild(Create_Guild_Info &guild_info);
27 |
28 | private:
29 | Mysql_Operator(void);
30 | virtual ~Mysql_Operator(void);
31 | Mysql_Operator(const Mysql_Operator &);
32 | const Mysql_Operator &operator=(const Mysql_Operator &);
33 |
34 | private:
35 | static Mysql_Operator *instance_;
36 | Connection_Map connection_map_;
37 | MUTEX connection_map_lock_;
38 |
39 | int agent_num_; //代理编号
40 | int server_num_; //服务器编号
41 | };
42 |
43 | #define MYSQL_INSTANCE Mysql_Operator::instance()
44 | #define MYSQL_CONNECTION MYSQL_INSTANCE->connection()
45 |
46 | #endif /* MYSQL_OPERATOR_H_ */
47 |
--------------------------------------------------------------------------------
/db_server/Mysql_Struct.h:
--------------------------------------------------------------------------------
1 | /*
2 | * Mysql_Struct.h
3 | *
4 | * Created on: Jul 20, 2016
5 | * Author: zhangyalei
6 | */
7 |
8 | #ifndef MYSQL_STRUCT_H_
9 | #define MYSQL_STRUCT_H_
10 |
11 | #include "Base_Struct.h"
12 | #include "Mysql_Conn.h"
13 |
14 | class Mysql_Struct: public Base_Struct {
15 | public:
16 | Mysql_Struct(Xml &xml, TiXmlNode *node);
17 | virtual ~Mysql_Struct();
18 |
19 | virtual void create_data(int64_t key_index, Block_Buffer &buffer);
20 | virtual void load_data(int64_t key_index, Block_Buffer &buffer);
21 | virtual void save_data(Block_Buffer &buffer);
22 | virtual void save_data_vector(Block_Buffer &buffer);
23 | virtual void delete_data(Block_Buffer &buffer);
24 |
25 | private:
26 | int create_data_arg(const Field_Info &field_info, Block_Buffer &buffer, Block_Buffer &blob_buffer);
27 | int create_data_vector(const Field_Info &field_info, Block_Buffer &buffer, Block_Buffer &blob_buffer);
28 | int create_data_struct(const Field_Info &field_info, Block_Buffer &buffer, Block_Buffer &blob_buffer);
29 |
30 | void build_buffer_arg(const Field_Info &field_info, Block_Buffer &buffer, sql::ResultSet *result);
31 | void build_buffer_vector(const Field_Info &field_info, Block_Buffer &buffer, sql::ResultSet *result);
32 | void build_buffer_struct(const Field_Info &field_info, Block_Buffer &buffer, sql::ResultSet *result);
33 |
34 | int build_len_arg(const Field_Info &field_info, Block_Buffer &buffer);
35 | int build_len_vector(const Field_Info &field_info, Block_Buffer &buffer);
36 | int build_len_struct(const Field_Info &field_info, Block_Buffer &buffer);
37 | };
38 |
39 | #endif /* MYSQL_STRUCT_H_ */
40 |
--------------------------------------------------------------------------------
/doc/gen_msg.sh:
--------------------------------------------------------------------------------
1 | #! /bin/bash
2 |
3 | DEFINE_PATH='../config/struct/'
4 | JS_TARGET='../js'
5 |
6 | function gen_msg(){
7 | gen_js
8 | gen_msgid
9 | cp_file
10 | rm_file
11 | }
12 |
13 | function gen_js(){
14 | ./struct_tool js $DEFINE_PATH 'game_struct.xml' 'struct'
15 | ./struct_tool js $DEFINE_PATH 'msg_struct.xml' 'struct'
16 | }
17 |
18 | function gen_msgid(){
19 | ./struct_tool msg $DEFINE_PATH 'message.define' 'msg'
20 | }
21 |
22 | function cp_file(){
23 | wildcard='.*'
24 | cp -rf JS/* $JS_TARGET
25 | cp -rf '../config/struct/game_struct.xml' '../../robot/config'
26 | cp -rf '../config/struct/msg_struct.xml' '../../robot/config'
27 | }
28 |
29 | function rm_file(){
30 | rm -rf JS
31 | }
32 |
33 | gen_msg
--------------------------------------------------------------------------------
/doc/git使用说明.txt:
--------------------------------------------------------------------------------
1 | linux生成sshkey方法
2 | 1.ls -al ~/.ssh
3 | 2.ssh-keygen -t rsa -b 4096 -C "784599938@qq.com"
4 | 3.ssh-agent -s
5 | eval $(ssh-agent -s)
6 | ssh-add ~/.ssh/id_rsa
7 | 4.cat /root/.ssh/id_rsa.pub copy content to github
8 | 5.ssh -T git@github.com
9 |
10 | 将本地工作区代码还原为git服务器上面版本
11 | git checkout -- js/hero.js
12 |
13 | change your romote url from https to ssh:
14 | git remote set-url origin git@github.com:xxx/xxx.git
15 | git remote -v
16 |
17 | change your romote url from ssh to https:
18 | git remote set-url origin https://github.com/xxx/xxx.git
19 | git remote -v
20 |
21 | 本地提交项目到github
22 | 1、本地配置
23 | git config --global user.name 'zhangyalei'
24 | git config --global user.email '784599938@qq.com'
25 | 2、新建Git项目并提交到Github
26 | mkdir testdir
27 | cd testdir
28 | touch README.md
29 | git init #初始化一个本地库
30 | git add README.md #添加文件到本地仓库
31 | git rm README.md #本地倒库内删除
32 | git commit -m "first commit" #提交到本地库并备注,此时变更仍在本地。
33 | git commit -a ##自动更新变化的文件,a可以理解为auto
34 | git remote add xxx git@github.com:xxx/xxx.git #增加一个远程服务器的别名。
35 | git remote add xxx https://github.com/xxx/xxx.git #增加一个远程服务器的别名。
36 | git remote rm xxx ##删除远程版本库的别名
37 | git push -u remotename master #将本地文件提交到Github的remoname版本库中。此时才更新了本地变更到github服务上。
38 |
39 | 分支版本操作
40 | 1、创建和合并分支
41 | git branch #显示当前分支是master
42 | git branch new-feature #创建分支
43 | git checkout new-feature #切换到新分支
44 | vi page_cache.inc.php
45 | git add page_cache.inc.php
46 | git commit -a -m "added initial version of page cache"
47 | git push origin new-feature ##把分支提交到远程服务器,只是把分支结构和内容提交到远程,并没有发生和主干的合并行为。
48 | 2、如果new-feature分支成熟了,觉得有必要合并进master
49 | git checkout master #切换到新主干
50 | git merge new-feature ##把分支合并到主干
51 | git branch #显示当前分支是master
52 | git push #此时主干中也合并了new-feature的代码
--------------------------------------------------------------------------------
/doc/struct_tool:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javapretty/game_server/a6f40a1393fde830338bd84eaca9f59bccee975b/doc/struct_tool
--------------------------------------------------------------------------------
/doc/websocket.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | websocket test
7 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/doc/压力测试20160715.docx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javapretty/game_server/a6f40a1393fde830338bd84eaca9f59bccee975b/doc/压力测试20160715.docx
--------------------------------------------------------------------------------
/doc/服务器导出API.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javapretty/game_server/a6f40a1393fde830338bd84eaca9f59bccee975b/doc/服务器导出API.xlsx
--------------------------------------------------------------------------------
/doc/服务器技术说明.docx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javapretty/game_server/a6f40a1393fde830338bd84eaca9f59bccee975b/doc/服务器技术说明.docx
--------------------------------------------------------------------------------
/doc/服务器架构图.ppt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javapretty/game_server/a6f40a1393fde830338bd84eaca9f59bccee975b/doc/服务器架构图.ppt
--------------------------------------------------------------------------------
/env/curl-7.50.1.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javapretty/game_server/a6f40a1393fde830338bd84eaca9f59bccee975b/env/curl-7.50.1.tar.gz
--------------------------------------------------------------------------------
/env/jsoncpp-bin-0.5.0-release.tar.bz2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javapretty/game_server/a6f40a1393fde830338bd84eaca9f59bccee975b/env/jsoncpp-bin-0.5.0-release.tar.bz2
--------------------------------------------------------------------------------
/env/mongodb-bin-linux-x86_64-3.0.8.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javapretty/game_server/a6f40a1393fde830338bd84eaca9f59bccee975b/env/mongodb-bin-linux-x86_64-3.0.8.tar.gz
--------------------------------------------------------------------------------
/env/mongodb-lib-3.0.8.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javapretty/game_server/a6f40a1393fde830338bd84eaca9f59bccee975b/env/mongodb-lib-3.0.8.tar.gz
--------------------------------------------------------------------------------
/env/mysql-connector-c++-1.1.7-linux-el7-x86-64bit.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javapretty/game_server/a6f40a1393fde830338bd84eaca9f59bccee975b/env/mysql-connector-c++-1.1.7-linux-el7-x86-64bit.tar.gz
--------------------------------------------------------------------------------
/env/netlib.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javapretty/game_server/a6f40a1393fde830338bd84eaca9f59bccee975b/env/netlib.tar.gz
--------------------------------------------------------------------------------
/env/openssl-1.0.1g.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javapretty/game_server/a6f40a1393fde830338bd84eaca9f59bccee975b/env/openssl-1.0.1g.tar.gz
--------------------------------------------------------------------------------
/env/v8.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javapretty/game_server/a6f40a1393fde830338bd84eaca9f59bccee975b/env/v8.tar.gz
--------------------------------------------------------------------------------
/game_server/AI_Manager.cpp:
--------------------------------------------------------------------------------
1 | /*
2 | * Created on: Aug 19, 2016
3 | * Author: lijunliang
4 | */
5 |
6 | #include "Xml.h"
7 | #include "AI_Manager.h"
8 | #include "Scene_Entity.h"
9 | #include "Server_Config.h"
10 |
11 | AI_Manager* AI_Manager::instance_ = NULL;
12 |
13 | AI_Manager *AI_Manager::instance() {
14 | if(instance_ == NULL)
15 | instance_ = new AI_Manager;
16 | return instance_;
17 | }
18 |
19 | AI_Manager::AI_Manager()
20 | {
21 |
22 | }
23 |
24 | AI_Manager::~AI_Manager() {
25 |
26 | }
27 |
28 | void AI_Manager::init() {
29 | Xml xml;
30 | const Json::Value &server_misc = SERVER_CONFIG->server_misc();
31 | xml.load_xml(server_misc["ai_behavior_path"].asString().c_str());
32 | TiXmlNode *node = xml.get_root_node();
33 | XML_LOOP_BEGIN(node)
34 | std::string label = xml.get_key(node);
35 | int monster_id = xml.get_attr_int(node, "id");
36 | Behavior_Tree *tree = new Behavior_Tree(monster_id);
37 | tree->init(xml, xml.enter_node(node, label.c_str()));
38 | behavior_tree_map_[tree->monster_id()] = tree;
39 | XML_LOOP_END(node)
40 | }
41 |
42 | int AI_Manager::thinking(Local