KBEngine官方论坛

 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 配置 开服
查看: 197|回复: 5

entitycall.client 每次都会new 一个对象出来?

[复制链接]

166

主题

602

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
发表于 2019-1-11 15:52:24 | 显示全部楼层 |阅读模式
  1. if(strcmp(ccattr, ENTITYCALL_TYPE_TO_NAME_TABLE[type_]) != 0)
  2.         {
  3.                 int8 mbtype = -1;

  4.                 if(strcmp(ccattr, "cell") == 0)
  5.                 {
  6.                         if(type_ == ENTITYCALL_TYPE_BASE_VIA_CELL)
  7.                                 mbtype = ENTITYCALL_TYPE_CELL;
  8.                         else
  9.                                 mbtype = ENTITYCALL_TYPE_CELL_VIA_BASE;
  10.                 }
  11.                 else if(strcmp(ccattr, "base") == 0)
  12.                 {
  13.                         if(type_ == ENTITYCALL_TYPE_CELL_VIA_BASE)
  14.                                 mbtype = ENTITYCALL_TYPE_BASE;
  15.                         else
  16.                                 mbtype = ENTITYCALL_TYPE_BASE_VIA_CELL;
  17.                 }
  18.                 else if(strcmp(ccattr, "client") == 0)
  19.                 {
  20.                         if(type_ == ENTITYCALL_TYPE_BASE)
  21.                                 mbtype = ENTITYCALL_TYPE_CLIENT_VIA_BASE;
  22.                         else if(type_ == ENTITYCALL_TYPE_CELL)
  23.                                 mbtype = ENTITYCALL_TYPE_CLIENT_VIA_CELL;
  24.                 }
  25.                
  26.                 if(mbtype != -1)
  27.                 {
  28.                         if(g_componentType != CLIENT_TYPE && g_componentType != BOTS_TYPE)
  29.                         {
  30.                                 return new EntityCall(pScriptModule_, &addr_, componentID_,
  31.                                         id_, (ENTITYCALL_TYPE)mbtype);
  32.                         }
  33.                         else
  34.                         {
  35.                                 Py_INCREF(this);
  36.                                 return this;
  37.                         }
  38.                 }
  39.         }
复制代码


在 entitycall的onGetAttr 函数中,每次调用 entitycall.client 都 new EntityCall ??


回复

使用道具 举报

5

主题

5245

帖子

214748万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2147483647

引擎扛把子

发表于 2019-1-11 16:14:27 | 显示全部楼层
是的
QQ:3603661
3603661@qq.com
回复

使用道具 举报

166

主题

602

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
 楼主| 发表于 2019-1-11 17:01:51 | 显示全部楼层

那就是对于entitycall(跨进程)entitycall.client 拿到的都是非None了??

发现了一个问题,如果是同进程在传递entity,它没有转成entitycall,这个时候entitycall.client 是直接那个实体(而非是实体的entitycall)的entity的client属性
回复

使用道具 举报

166

主题

602

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
 楼主| 发表于 2019-1-11 17:08:45 | 显示全部楼层
这样导致的一个问题就是,我要给客户端发消息

1. 如果是在同一进程,我得判断 entitycall.client (因为这个时候entitycall其实是entity)如果为true我才去调用客户端方法
2. 如果在不同进程,就是entitycall,每次entitycall.client 都new一个对象,我感觉有些浪费,我就不想去new,直接去entitycall.client.methodxxx   

那问题就来了,代码其实是不明确知道entitycall是entity还是entitycall,在是entitycall的情况下,感觉每次去给客户端发消息会进行如下操作: if entitycall.client: entitycall.client.methodxxx    这样相当于new 了两个对象,有些浪费

回复

使用道具 举报

5

主题

5245

帖子

214748万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2147483647

引擎扛把子

发表于 2019-1-11 18:02:47 | 显示全部楼层
QQ:3603661
3603661@qq.com
回复

使用道具 举报

166

主题

602

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
 楼主| 发表于 2019-1-11 18:20:24 | 显示全部楼层
柯标 发表于 2019-1-11 18:02
https://github.com/kbengine/kbengine/issues/994

好的,感谢,等着后面更新一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|KBEngine Forum

GMT+8, 2019-6-25 11:19 , Processed in 0.035258 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表