目录

服务器

```

  void maini(){

    printf("hello world");

  }

```

  1. 最小资产库创建

  2. entity配置

  3. 实体的Python实现

  4. 创建第一个空间Space

  5. 让entity进入空间Space

客户端(unity)

  1. 生成客户端SDK

  2. 实现Client部分验证

验证测试

====================================正文=====================================

服务器

  1. 最小资产库创建

    • 运行文件“new_assets.bat”,生成最小资产库“server_assets”,更名为“first_assets"
  2. entity配置

    • entity声明
      ```
      void main(){
        printf("shit");
      }
      ```

      hasClient 表示这个实体有客户端

    • entity配置
      • 新建def配置文件,配置文件名称规定为(实体名称.def)
      • 添加方法声明
        <root>
        <!-- Cell上的方法 -->
        <CellMethods>
        <Broadcast>
        <!--Exposed 表示此方法暴漏给客户端调用-->
        <Exposed/>
        <Arg> UNICODE </Arg>
        </Broadcast>
        </CellMethods> <!-- 客户端上的方法 -->
        <ClientrMethods>
        <onEnter>
        </onEnter> <SendMsgToServer>
        <Arg> UNICODE </Arg>
        </SendMsgToServer>
        </ClientrMethods>
        </root>

        {项目资产库}\scripts\entity_defs\PlayerEntity.def

  3. entity的 Python实现

    • 名称规则(实体名.py)
    • base文件夹下的部分
      # -*- coding utf-8 -*-
      import KBEngine
      from KBEDebug import * class FirstPlayer(KBEngine.Proxy):
      #base部分的实现
      def __init__(self):
      KBEngine.Entity.__init__(self)

      {资产库}\base\FirstPlayer.py

    • cell文件夹下的部分
      # -*- coding: utf-8 -*-
      import KBEngine
      from KBEDebug import * class FirstEntity(KBEngine.Entity):
      def __init__(self):
      KBEngine.Entity.__init__(self)
      #这里是FirstEntity的cell,当其Cell创建完毕时,通知其自身的客户端的onEnter函数
      self.client.onEnter() def SendMsgToServer(self, callerID, content):
      INFO_MSG("FirstPlay-SendMsgToServer")
      #广播给所有客户端
      self.allClient.Broadcast(str(self.id) + ":" + content)

      {资产库}\scripts\cell\FirstPlayer.py

    • entity何时创建?
      教程采用:使用账户入口对第一个enetity进行创建,只添加一句:<accountEntityScriptType> FirstEntity </accountEntityScriptType>
          <dbmgr>
      <account_system>
      <accountEntityScriptType> PlayerEntity </accountEntityScriptType>

      {项目资产库}/res/server/kbengine.xml

  4. Space配置

    • entity声明和def文件配置

      <root>
      <PlayerEntity hasClient="true"></PlayerEntity>
      <!-- 添加下面这行 -->
      <WorldSpace></WorldSpace>
      </root>

      {资产库}\scripts\entities.xml

    • <root>
      <!-- BaseApp上的远程方法 -->
      <BaseMethods>
      </BaseMethods>
      <!-- CellApp上的远程方法 -->
      <CellMethods>
      </CellMethods>
      </root>

      {资产库}\scripts\entity_defs\WorldSpace.def

  5. Space的 Python实现

    • 名称规则(空间名.py)
    • base部分
      # -*- coding-utf8 -*-
      import KBEngine
      from KBEDebug import * class WorldSpace(KBEngine.Space):
      # WorldSpace的base部分,这是一个实体,并不是Space本身,Space位于内存中,我们通过这个实体关联并控制Space
      def __init__(self):
      KBEngine.Space.__init__(self)
      # 在全局变量globaldata字典中保存Space
      KBEngine.globalData["WorldSpace"] = self

      {资产库}\scripts\base\WorldSpace.py

    • cell部分
      import KBEngine
      
      class WorldSpace(KBEngine.Space):
      def __init__(self):
      KBEngine.Space.__init__(self)
      pass

      {资产库}\scripts\cell\WoldSpace.py

    • space何时创建
      教程采用:Baseapp就绪时创建Space空间,在baseapp就绪后加载空间space
      def onBaseAppReady(isBootstrap):
      """
      KBEngine method.
      baseapp已经准备好了
      @param isBootstrap: 是否为第一个启动的baseapp
      @type isBootstrap: BOOL
      """
      INFO_MSG('onBaseAppReady: isBootstrap=%s, appID=%s, bootstrapGroupIndex=%s, bootstrapGlobalIndex=%s' % \
      (isBootstrap, os.getenv("KBE_COMPONENTID"), os.getenv("KBE_BOOTIDX_GROUP"), os.getenv("KBE_BOOTIDX_GLOBAL")))
      #添加此句以使得space在baseapp启动后就加载进来
      KBEngine.createEntityLocally("WorldSpace", {})

      {资产库}\scripts\base\kbemain.py

  6. 验证空间Space是否加载成功

    1. 开始验证:打开guiconsole(......\kbengine-2.4.\kbe\tools\server\guiconsole)选择baseapp,然后选中debug便签,输入Python语句:KBEngine.entities.items(),Ctrl+Enter执行语句,输出结果如下:
    2. 错误警告

      我们可能需要设置一下用户账户和密码,位置在{资产库}res\server\kbengine.xml: root -> dbmgr -> databaseInterfaces -> default -> auth

    3. 注意2(9个窗口一个都不能少)
      折叠的代码中所有的实例名称(PlayerEntity 或者 FIrstPlayer 选一个统一)都需要统一,我上面没有再修改,吐槽博客园的编辑器   (¬︿¬☆)

  7. 让entity进入空间Space

    1. 我们再次打开之前的文件({项目资产库}/scripts/base/PlayerEntity.py)
    2. 添加一个回调和函数,onClientEnabled ,因为我们的PlayerEntity继承了Proxy,所以当客户端可用时,这个函数会被执行,此时我们选择让entity进入空间

客户端(unity)

  1. 生成客户端SDK

    1. 配置SDK生成工具
  2. 实现Client部分验证

验证测试

KBE实践——登录案例的更多相关文章

  1. Quartz应用实践入门案例二(基于java工程)

    在web应用程序中添加定时任务,Quartz的简单介绍可以参看博文<Quartz应用实践入门案例一(基于Web应用)> .其实一旦学会了如何应用开源框架就应该很容易将这中框架应用与自己的任 ...

  2. Quartz应用实践入门案例一(基于Web环境)

    Quartz是一个完全由java编写的开源作业调度框架,正是因为这个框架整合了许多额外的功能,所以在使用上就显得相当容易.只是需要简单的配置一下就能轻松的使用任务调度了.在Quartz中,真正执行的j ...

  3. Android first---文件读取(登录案例编写为主)

    以android登录案例来介绍文件的读取与androidAPI给予的方法 第一步:绘制界面 绘制方法:在线性布局下面设置相对布局 代码部分: <LinearLayout xmlns:androi ...

  4. ADO.NET学习系列(三)----做一个登录案例

    总体思路.根据用户输入的用户名和密码,来判断,和数据库里面存的是不是一样,如果一样就表明登录成功,否则就登录失败. 方案一: 1.select* from 表名 where username=&quo ...

  5. 基于Struts2框架实现登录案例 之 使用Struts2标签库简化表单+继承ActionSupport完成输入交验

    一,使用Struts2标签库简化表单 在文章[基于Struts2框架实现登录案例]的基础上,通过使用Struts标签库可以简化登录页面login2.jsp <%@ page language=& ...

  6. 简单登录案例(SharedPreferences存储账户信息)&联网请求图片并下载到SD卡(文件外部存储)

    新人刚学习Android两周,写一个随笔算是对两周学习成果的巩固,不足之处欢迎各位建议和完善. 这次写的是一个简单登录案例,大概功能如下: 注册的账户信息用SharedPreferences存储: 登 ...

  7. Android(java)学习笔记213:开源框架post和get方式提交数据(qq登录案例)

    1.前面提到Http的get/post方式  . HttpClient方式,实际工作的时候不常用到,因为这些方式编写代码是很麻烦的 2.Android应用会经常使用http协议进行传输,网上会有很完善 ...

  8. Android(java)学习笔记212:中文乱码的问题处理(qq登录案例)

    1.我们在之前的笔记中LoginServlet.java中,我们Tomcat服务器回复给客户端的数据是英文的"Login Success","Login Failed&q ...

  9. [转载]DevOps在传统企业的落地实践及案例分享

    内容来源:2017年6月10日,优维科技高级解决方案架构师黄星玲在“DevOps&SRE 超越传统运维之道”进行<DevOps在传统企业的落地实践及案例分享>演讲分享.IT 大咖说 ...

随机推荐

  1. Swift4 基础

    创建: 2018/02/17 完成: 2018/02/19 更新: 2018/02/25 补充参照型只有类的实例和闭包 更新: 2018/03/03 加红加粗for-in注意事项, 常量不用也不能声明 ...

  2. 洛谷 P2761 软件补丁问题 【spfa】

    -为什么最短路的题会出现在网络流24里?? 因为范围是15所以直接把每个状态作为一个点,向它能转移到的点连有向边即可.可以不用建图(据说建图存不下?),直接枚举m个转移方案.位运算比较麻烦注意不要写错 ...

  3. 洛谷P2082 区间覆盖(加强版)(珂朵莉树)

    传送门 虽然是黄题而且还是一波离散就能解决的东西 然而珂朵莉树还是很好用 相当于一开始区间全为0,然后每一次区间赋值,问最后总权值 珂朵莉树搞一搞就好了 //minamoto #include< ...

  4. 【插件开发】—— 14 Site is incorrect!编辑器启动报错!

    前言 博文纵览 最近在弄编辑器的时候出现了一个十分尴尬的错误!这里收录一下: BUG如下图所示: 目测堆栈,与自己开发的代码无关.完全是Eclipse自己初始化的时候遇到了问题,最头疼的就是这种问题. ...

  5. 多选下拉框(select 下拉多选)

    方法一:使用multiple-select.js和multiple-select .css实现 HTML代码: <select id='checkedLevel' style="wid ...

  6. java中WGS84坐标(ios)转换BD-09坐标(百度坐标)

    iPhone的GPS定位(CLLocationManager)获得的经纬坐标是基于WGS-84坐标系(世界标准),Google地图使用的是GCJ-02坐标系(中国特色的火星坐标系),百度的经纬坐标在G ...

  7. Bryce1010的操作系统课程设计

    https://download.csdn.net/download/fire_to_cheat_/10221003 上面是课程设计的代码,下载需要一些积分. 1.作业调度 2.磁盘调度 常见的磁盘调 ...

  8. jmeter(十六)Jmeter之Bean shell使用(一)

    一.什么是Bean Shell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法; BeanShell是一种松散类型的脚本语言(这点和JS类似); BeanS ...

  9. js对象数组深度去重和深度排序

    使用collect.js处理数组和对象 https://github.com/ecrmnn/collect.js/# 引入collect.js https://github.com/ecrmnn/co ...

  10. swiper4初始化/swiper-init/data-swiper

    用data属性初始化swiper <!DOCTYPE html> <html lang="en"> <head> <meta charse ...