• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++实现的分布式游戏服务端引擎KBEngine详解

C++实现的分布式游戏服务端引擎KBEngine详解

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了kbengine服务器引擎,kbengine,kbengine教程,kbengine官网,kbengine论坛等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

KBEngine 是一款开源的游戏服务端引擎,使用简单的约定协议就能够使客户端与服务端进行交互,
使用KBEngine插件能够快速与(Unity3D, OGRE, Cocos2d, HTML5, 等等)技术结合形成一个完整的客户端。

服务端底层框架使用c++编写,游戏逻辑层使用Python(支持热更新),开发者无需重复的实现一些游戏服务端通用的底层技术,
将精力真正集中到游戏开发层面上来,快速的打造各种网络游戏。

(经常被问到承载上限,kbengine底层架构被设计为多进程分布式动态负载均衡方案,
理论上只需要不断扩展硬件就能够不断增加承载上限,单台机器的承载上限取决于游戏逻辑本身的复杂度。)

cstdkbe.hpp

/*
This source file is part of KBEngine
For the latest info, see http://www.kbengine.org/
 
Copyright (c) 2008-2012 KBEngine.
 
KBEngine is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
 
KBEngine is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
 
You should have received a copy of the GNU Lesser General Public License
along with KBEngine. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef KBE_CSTDKBE_HPP
#define KBE_CSTDKBE_HPP
#include "cstdkbe/platform.hpp"
#include "cstdkbe/singleton.hpp"
#include "cstdkbe/kbeversion.hpp"
#include "cstdkbe/kbemalloc.hpp"
#include "cstdkbe/stringconv.hpp"
#include "cstdkbe/format.hpp"
 
namespace KBEngine{
/** 安全的释放一个指针内存 */
#define SAFE_RELEASE(i)                   \
  if (i)                         \
    {                          \
      delete i;                    \
      i = NULL;                    \
    }
 
/** 安全的释放一个指针数组内存 */
#define SAFE_RELEASE_ARRAY(i)                \
  if (i)                         \
    {                          \
      delete[] i;                   \
      i = NULL;                    \
    }
 
#ifdef CODE_INLINE
  #define INLINE  inline
#else
  #define INLINE
#endif
 
/** kbe时间 */
extern GAME_TIME g_kbetime;
 
/** 账号的类别 */
enum ACCOUNT_TYPE
{
  ACCOUNT_TYPE_NORMAL = 1,  // 普通账号
  ACCOUNT_TYPE_MAIL = 2,   // email账号(需激活)
  ACCOUNT_TYPE_SMART = 3   // 智能识别
};
 
enum ACCOUNT_FLAGS
{
  ACCOUNT_FLAG_NORMAL = 0x00000000,
  ACCOUNT_FLAG_LOCK = 0x000000001,
  ACCOUNT_FLAG_NOT_ACTIVATED = 0x000000002
};
 
/** entity的mailbox类别 */
enum ENTITY_MAILBOX_TYPE
{
  MAILBOX_TYPE_CELL                        = 0,
  MAILBOX_TYPE_BASE                        = 1,
  MAILBOX_TYPE_CLIENT                       = 2,
  MAILBOX_TYPE_CELL_VIA_BASE                   = 3,
  MAILBOX_TYPE_BASE_VIA_CELL                   = 4,
  MAILBOX_TYPE_CLIENT_VIA_CELL                  = 5,
  MAILBOX_TYPE_CLIENT_VIA_BASE                  = 6,
};
 
/** mailbox的类别对换为字符串名称 严格和ENTITY_MAILBOX_TYPE索引匹配 */
const char ENTITY_MAILBOX_TYPE_TO_NAME_TABLE[][8] = 
{
  "cell",
  "base",
  "client",
  "cell",
  "base",
  "client",
  "client",
};
 
/** 定义服务器各组件类别 */
enum COMPONENT_TYPE
{
  UNKNOWN_COMPONENT_TYPE = 0,
  DBMGR_TYPE       = 1,
  LOGINAPP_TYPE      = 2,
  BASEAPPMGR_TYPE     = 3,
  CELLAPPMGR_TYPE     = 4,
  CELLAPP_TYPE      = 5,
  BASEAPP_TYPE      = 6,
  CLIENT_TYPE       = 7,
  MACHINE_TYPE      = 8,
  CONSOLE_TYPE      = 9,
  MESSAGELOG_TYPE     = 10,
  BOTS_TYPE        = 11,
  WATCHER_TYPE      = 12,
  BILLING_TYPE      = 13,
  COMPONENT_END_TYPE   = 14,
};
 
/** 当前服务器组件类别和ID */
extern COMPONENT_TYPE g_componentType;
extern COMPONENT_ID g_componentID;
 
/** 定义服务器各组件名称 */
const char COMPONENT_NAME[][255] = {
  "unknown",
  "dbmgr",
  "loginapp",
  "baseappmgr",
  "cellappmgr",
  "cellapp",
  "baseapp",
  "client",
  "kbmachine",
  "console",
  "messagelog",
  "bots",
  "watcher",
  "billing",
};
 
const char COMPONENT_NAME_1[][255] = {
  "unknown  ",
  "dbmgr   ",
  "loginapp  ",
  "baseappmgr ",
  "cellappmgr ",
  "cellapp  ",
  "baseapp  ",
  "client   ",
  "kbmachine ",
  "console  ",
  "messagelog ",
  "bots",
  "watcher",
  "billing",
};
 
inline const char* COMPONENT_NAME_EX(COMPONENT_TYPE CTYPE)
{                  
  if(CTYPE < 0 || CTYPE >= COMPONENT_END_TYPE)
  {
    return COMPONENT_NAME[UNKNOWN_COMPONENT_TYPE];
  }
 
  return COMPONENT_NAME[CTYPE];
}
 
inline const char* COMPONENT_NAME_EX_1(COMPONENT_TYPE CTYPE)
{                  
  if(CTYPE < 0 || CTYPE >= COMPONENT_END_TYPE)
  {
    return COMPONENT_NAME_1[UNKNOWN_COMPONENT_TYPE];
  }
 
  return COMPONENT_NAME_1[CTYPE];
}
 
inline COMPONENT_TYPE ComponentName2ComponentType(const char* name)
{
  for(int i=0; i<(int)COMPONENT_END_TYPE; i++)
  {
    if(kbe_stricmp(COMPONENT_NAME[i], name) == 0)
      return (COMPONENT_TYPE)i;
  }
 
  return UNKNOWN_COMPONENT_TYPE;
}
 
// 所有的组件列表
const COMPONENT_TYPE ALL_COMPONENT_TYPES[] = {BASEAPPMGR_TYPE, CELLAPPMGR_TYPE, DBMGR_TYPE, CELLAPP_TYPE, 
            BASEAPP_TYPE, LOGINAPP_TYPE, MACHINE_TYPE, CONSOLE_TYPE, MESSAGELOG_TYPE, 
            WATCHER_TYPE, BILLING_TYPE, BOTS_TYPE, UNKNOWN_COMPONENT_TYPE};
 
// 所有的后端组件列表
const COMPONENT_TYPE ALL_SERVER_COMPONENT_TYPES[] = {BASEAPPMGR_TYPE, CELLAPPMGR_TYPE, DBMGR_TYPE, CELLAPP_TYPE, 
            BASEAPP_TYPE, LOGINAPP_TYPE, MACHINE_TYPE, MESSAGELOG_TYPE, 
            WATCHER_TYPE, BILLING_TYPE, BOTS_TYPE, UNKNOWN_COMPONENT_TYPE};
 
// 所有的后端组件列表
const COMPONENT_TYPE ALL_GAME_SERVER_COMPONENT_TYPES[] = {BASEAPPMGR_TYPE, CELLAPPMGR_TYPE, DBMGR_TYPE, CELLAPP_TYPE, 
            BASEAPP_TYPE, LOGINAPP_TYPE, BILLING_TYPE, UNKNOWN_COMPONENT_TYPE};
 
// 所有的辅助性组件
const COMPONENT_TYPE ALL_HELPER_COMPONENT_TYPE[] = {MESSAGELOG_TYPE, UNKNOWN_COMPONENT_TYPE};
 
// 返回是否是一个有效的组件
#define VALID_COMPONENT(C_TYPE) ((C_TYPE) > 0 && (C_TYPE) < COMPONENT_END_TYPE)
 
 
// 前端应用的类别, All client type
enum COMPONENT_CLIENT_TYPE
{
  UNKNOWN_CLIENT_COMPONENT_TYPE  = 0,
 
  // 移动类,手机,平板电脑
  // Mobile, Phone, Pad(Allowing does not contain Python-scripts and entitydefs analysis, can be imported protocol from network)
  CLIENT_TYPE_MOBILE       = 1,
 
  // 独立的Windows/Linux/Mac应用程序(包含python脚本,entitydefs解析与检查entitydefs的MD5,原生的)
  // Windows/Linux/Mac Application program (Contains the Python-scripts, entitydefs parsing and check entitydefs-MD5, Native)
  CLIENT_TYPE_PC         = 2,  
 
  // 不包含Python脚本,entitydefs协议可使用网络导入
  // Web, HTML5, Flash
  CLIENT_TYPE_BROWSER       = 3,  
 
  // 包含Python脚本,entitydefs解析与检查entitydefs的MD5,原生的
  // bots (Contains the Python-scripts, entitydefs parsing and check entitydefs-MD5, Native)
  CLIENT_TYPE_BOTS        = 4,  
 
  // 轻端类, 可不包含python脚本,entitydefs协议可使用网络导入
  // Mini-Client(Allowing does not contain Python-scripts and entitydefs analysis, can be imported protocol from network)
  CLIENT_TYPE_MINI        = 5,  
 
  // End
  CLIENT_TYPE_END         = 6   
};
 
/** 定义前端应用的类别名称 */
const char COMPONENT_CLIENT_NAME[][255] = {
  "UNKNOWN_CLIENT_COMPONENT_TYPE",
  "CLIENT_TYPE_MOBILE",
  "CLIENT_TYPE_PC",
  "CLIENT_TYPE_BROWSER",
  "CLIENT_TYPE_BOTS",
  "CLIENT_TYPE_MINI",
};
 
// 所有前端应用的类别
const COMPONENT_CLIENT_TYPE ALL_CLIENT_TYPES[] = {CLIENT_TYPE_MOBILE, CLIENT_TYPE_PC, CLIENT_TYPE_BROWSER, 
                        CLIENT_TYPE_BOTS, CLIENT_TYPE_MINI, UNKNOWN_CLIENT_COMPONENT_TYPE};
 
typedef int8 CLIENT_CTYPE;
 
// 前端是否支持浮点数
// #define CLIENT_NO_FLOAT
 
// 一个cell的默认的边界或者最小大小
#define CELL_DEF_MIN_AREA_SIZE       500.0f
 




 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++实现的分布式游戏服务端引擎KBEngine详解

相关文章

  • 2017-05-28C++ 面试题翻译电话号码实例代码
  • 2017-05-28C语言中的abs()函数和exp()函数的用法
  • 2017-05-28简单总结C++中的修饰符类型
  • 2017-05-28C++文件依存关系介绍
  • 2017-05-28C语言 二级指针详解及示例代码
  • 2017-05-28C++多线程编程简单实例
  • 2017-05-28Protocol Buffer技术深入理解(C++实例)
  • 2017-05-28用C语言程序判断大小端模式
  • 2017-05-28C语言中fgetgrent()函数和fgetpwent()函数的用法对比
  • 2017-05-28用typedef定义类型详细总结

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 详谈全排列next_permutation() 函数的用法(推荐)
    • 详解C语言中条件判断语句if和switch的用法
    • c++加法高精度算法的简单实现
    • 深入探讨C语言中局部变量与全局变量在内存中的存放位置
    • C++中引用&与取地址&的区别分析
    • C++将CBitmap类中的图像保存到文件的方法
    • VC下通过系统快照实现进程管理的方法
    • C#委托所蕴含的函数指针概念详细解析
    • C++卸载程序功能示例
    • C 语言进制之间的转换

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有