
插件开发
wherwh
这个作者很懒,什么都没留下…
展开
-
插件开发技术说明(4)---xml编程
以下是sba.pr协议规则文件中2个协议处理的描述.通过本示例可以了解如何使用l编写xml协议处理脚本,取代编写c++代码。 使用xml协议规则文件的具体的局限和缺陷后续给出。 7150-Request:演示如何insert7151-Request:演示如何查询数据,有条件 EId,UserID,CoEId,GoodsID企业ID,用户ID,供应商I原创 2015-05-27 16:06:06 · 519 阅读 · 0 评论 -
插件开发技术说明(14)---服务配置访问
服务端系统参数配置有2种:.集中配置在数据库(t_sys_cfg).插件配置文件:仅影响当前进程配置项作为资源需要统一定义.服务配置项ID定义在common\svc_para.h文件中.目前定义如下: (新增的配置项加入到此文件中)#define CATEGORY_PIC_FILE_PATH 101 ///< 类别图片目录#define MYGOODS_P原创 2015-09-11 19:37:51 · 470 阅读 · 0 评论 -
图片缩略处理
以下是利用CxImage实现对图片缩放的试验代码.#include "ximage.h"#pragma comment(lib,"cximage.lib")#pragma comment(lib,"jpeg.lib")int ResampleImage(CxImage &image,float factor) { int m_w = image.GetWidth(); in原创 2015-09-11 12:42:12 · 740 阅读 · 0 评论 -
缓存管理器实现
1.缓存管理器代码如下:#ifndef H_CACHEMGR#define H_CACHEMGR#include #include #include using namespace std;////////////////////////////////////////////////////////////////////////////////template cla原创 2015-09-15 05:54:37 · 854 阅读 · 0 评论 -
插件开发技术说明(15)---文件自动分目录存储
1.说明用途:.当文件数量很大,在单一目录下时无法容纳,需要把文件自动分散到不同的目录下.特性:.指定一个$HOME目录,可限定每个目录下最多文件数量.分级目录保存,如$HOME\1,$HOME\2.在$HOME\1下再分目录保存,以保证可容纳足够数量的文件. 按每个目录最大文件数2000个计算,3级可存储的文件数为:2000*2000*2000个文件.文件原创 2015-09-15 06:16:04 · 488 阅读 · 0 评论 -
当向导生成的插件编译出现问题时
编译调试release版本rc_finder插件碰到的问题:1.Activate函数编译错误 parent::Activate(); /// 2.生成的文件为exe文件解决:General|Configuration Type设置为D"ynamic Library(.dll)"3.加载插件失败:用Dependency Walker检查发现导出的函数为_CreateModul原创 2015-05-22 18:11:09 · 1191 阅读 · 0 评论 -
一个请求返回多个应答消息的支持
目的及应用场景:客户端1次查询1页商品图片(5x4=20个)时,服务端每获取1张图片则立即返回而不是处理完20个图片后一起返回。这样,可以让客户端和服务端交替并行执行,提高响应速度。为了支持一个请求返回多个响应包的情况,消息属性增加CONT_MASK:enum MSG_ATTR_MASK { CONT_MASK = 0X0001, ///< 是否有后续包, 0-无原创 2015-09-18 15:41:49 · 1833 阅读 · 0 评论 -
CRecordsetBindObject优化
在2个方面,对CRecordsetBindObject优化:1.简化绑定,并消除安全隐患2.类型比较采用数字类型的变量类型编码而不是类型名称串,提高处理速度 目前使用数据库记录对象绑定的用法如下: CRecordsetBindObject binder; binder.BindRecordset(prs); ///< 把Status字段与CPurcha原创 2015-09-19 17:35:06 · 550 阅读 · 0 评论 -
协议设计注意事项
1.编码使用避免编码使用不当,不统一.示例:供应商ID CoEid必填 -1:全部 !-1:查询指定供应商修改为0表示全部,其它表示指定的供应商ID0不是有效的企业id,有效的企业id是>0的整数(32位)0可以理解为未指定.保持编码在项目内一致.2.需要指明是否分页,排序方式示例:查询常购商品(7293)---该协议从界面上看不出支持分页。本身也未原创 2015-09-30 01:10:43 · 523 阅读 · 0 评论 -
插件开发技术说明(15)---单据处理编程模式
以CSale为例说明.1.定义单据类包括主表类和明细类.#include "RecordsetBinder.h" ///< BIND_DECLARE,...class CSale:public CSheet{public: CSale():CSheet(2050) { } CSale(SLIC_SHEETID sheet_id):CSheet(2050,sheet_id)原创 2015-09-24 01:52:24 · 831 阅读 · 0 评论 -
服务端错误编码与提示处理
。错误编码定义根据应用错误和公共错误分别定义在以下文件:cqq_error.h: 公共错误.错误编码分配区间:1-3999slic_error.h: 智店宝应用的所有错误定义.错误编码分配区间:5100-7999。协议处理错误处理设执行某个协议的处理函数:int result = HandleA(in,out,or);result==0,表示成功.非0表示失败。原创 2015-11-25 20:38:16 · 2280 阅读 · 0 评论 -
多事件引擎实现
初级实现的事件引擎是单实例的,存在应用限制.1.背景在主站上ipe_b,data_sync_i都是事件处理器,共用一个t_Sys_EventQueue。一个事件处理者只有一个CEventHandleMap,其中每个事件只有一个对应的处理函数.ehong扫描t_Sys_EventQueue,扫描未处理的事件.调用每个注册的事件处理器。若一个事件2个插件都要响应原创 2015-11-27 19:04:39 · 1096 阅读 · 0 评论 -
插件开发技术说明(19)---通用查询处理
CORMBase解决的是实体记录到对象的双向操作问题.绑定到一个固定的表上.如CORMBase的Load方法查询的字段全部来自该表。对于跨表查询无法支持。早期的在查询函数中声明绑定器,逐个查询列进行绑定可以实现.但代码结构欠佳,并且每次调用都要构造对象和绑定,影响性能.增加基础类CQuerier(通用查询器)类模板,简化查询处理.把查询结果按对象处理.1原创 2016-03-04 14:54:42 · 638 阅读 · 0 评论 -
插件开发技术说明(18)---异步任务队列使用
本文以sd插件为例说明异步任务的使用.1.定义文件sd.h修改class CSd增加成员: string batch_op_task_name_; ///< 自动批操作任务名称.默认:batch_op. IAsyncTaskEngine *async_task_engine_; ///< 异步任务引擎 IAsyncTask* batch_op_task_; ///2.实原创 2016-02-22 17:04:29 · 517 阅读 · 0 评论 -
插件开发技术说明(17)---应用CRUD开发模式范例
对一个数据库表进行增,删,修改,查询操作是常见的编程任务.统一和简化此类开发任务,可以提高开发效率,包括实现,调试和维护.本文以常购商品的功能为例,说明基于需求完整实现的过程.1.功能与协议提供门店经常采购商品信息的管理,提供对快捷订单的支持.一个协议的功能单一化,避免让一个协议承载太多功能,协议与用例一一对应作为设计原则。常购商品的4协议如下:.新原创 2015-10-10 21:08:26 · 841 阅读 · 0 评论 -
UTA使用说明
1 项目介绍 1.1 概述1.1.1 什么是UTA?UTA是UMX-Thrift协议网关插件.负责在采用UMX协议的程序和Thrift服务之间做透明转换,如接入nw.js客户端访问现有的thrift服务。 1.1.2 原理应用协议定义可以和thrift服务对应。uta作为thrift的客户端。利用cpg的c++反射能力,实现基于配置原创 2016-08-10 21:13:36 · 4115 阅读 · 0 评论 -
cpgf.metagen扩展
在"uta使用说明"中,对cpgf生成的代码的需要手工处理(2.7,2.8),为了消除此环节对cpgf的meta根据进行修改. 代码修改后新的配置文件(TestService.js)内容如下:var config = { projectID:"TestService", mainSourceFile:"register_meta_TestServi原创 2016-08-10 21:35:43 · 1426 阅读 · 0 评论 -
wms接口开发说明
1 概述zdb平台与第三方平台对接的一个范例。基于sealink wms定义的接口实现。接口技术要求简述如下:l http协议l 消息body采用json格式l 通过url传递系统参数 zdb端实现上行部分的接口(WTE),2个平台之间彼此调用,实现业务流程的衔接。 本文用采购进货和验收确认为例描述具体的代码实现。 2 接口作为开发原创 2017-03-09 17:24:41 · 7378 阅读 · 0 评论 -
插件开发技术说明(13)---含明细列表查询的处理
查询一个列表,每个列表项有对应的一组明细记录(这里称为含明细列表).这是开发过程中常见的应用场景.如查询订单列表,同时返回每个订单的明细。umx协议支持CRowset的列是一个CRowset(dtRowset类型),但umx.js未实现.如果在服务端完成分拆,则返回多个CRowset.umx限制的最大行集数是65535.一般方法是,1个CRowset表示列表内容,后面按出现在列表CRo原创 2015-09-11 15:03:36 · 437 阅读 · 0 评论 -
插件开发技术说明(16)---消除代码冗余
1.问题场景代码冗余是程序结构性问题.其最大的缺陷是程序的维护成本.次要影响之一是编译的可执行文件增大了,占用了运行时内存.几种单据的促销使用的CPromotion,CSaleDivider在以下模块中都有定义:存在3个极其相似的副本.---yoopo_data.h初始定义---sd:sd_data.h ---mpm:mpm_data.h首先需要澄清的是,初原创 2015-09-26 17:30:51 · 529 阅读 · 0 评论 -
插件开发技术说明(7)---读插件配置
1.插件配置每个插件**可以**有私有的配置文件,文件名与插件同名,扩展名为:conf.如ad插件的配置文件ad.conf内容如下: yoopa file_home\Ad2.实现示例配置文件读取在插件的ReadPrivateConfig中实现.示例代码如下: int CAdService::ReadPrivateConfig() { paren原创 2015-05-28 18:08:13 · 469 阅读 · 0 评论 -
服务端分页处理实现
本文描述如何实现支持分页的应用协议.1.实现步骤(1)定义分页条件类不同应用协议查询条件项可能不同,定义对应的查询条件类,该类从CPageCond派生.CPageCond是分页条件类.如:class CStoreGoodsSaleQueryCond : public CPageCond {public: string store_id_; ///原创 2013-05-11 12:01:16 · 5299 阅读 · 0 评论 -
简化服务端协议处理的CDbHelper类
1.类定义/// 表字段与UMX项(包括参数和行集列)映射项定义struct CField2UMXItem { char fld_name_[32]; char para_name_[32];};/// 表操作Helper,适用于基于UMX协议时服务端数据库处理(查询,新增,修改),可简化代码class CDbHelper { CField2U原创 2013-05-09 22:55:05 · 635 阅读 · 0 评论 -
Hotfox插件向导生成工程后配置的调整
以on_ee插件Release版本为例.General|Configuration TypeDynamic Library(.dll)C++|General|Addtional Include Directories..\..\common\hotfox\include;..\..\source\include;..\..\source\stun;..\..\source\upm;原创 2015-01-09 14:13:03 · 659 阅读 · 0 评论 -
服务端开发问题汇集
1.Invalid address specified to RtlValidateHeapxebo的release版本服务器程序运行异常.调试环境下输出信息如下:HEAP[hotfoxd.exe]: Invalid address specified to RtlValidateHeap( 029A0000, 0AB24250 )Windows has triggered a b原创 2015-03-09 20:48:13 · 594 阅读 · 0 评论 -
插件编程示例
为测试nw客户端对服务器消息推送的响应.测试通知消息:176-Indication参数名: message每隔5秒发送一个订单或退单通知,含随机单据编号信息. 涉及编程内容:.创建一个定时任务.连接事件挂钩.发送消息 实现时发现框架没有广播消息接口.什么情况下需要?xbox.cpp///////////////////////////////////原创 2015-05-07 14:35:24 · 480 阅读 · 0 评论 -
UMX3 API使用示例
CMsg* new_msg_v3() { CMsg *msg = new CMsg; msg->SetVersion(3); msg->SetMsgType(MT_REQUEST); msg->SetMsgID(1001); /// umx2风格:增加参数 msg->AddParam("原创 2012-06-20 18:16:28 · 442 阅读 · 0 评论 -
插件开发技术说明(6)---分页查询示例
以下是7052-Request的实现代码。从本示例可以学习到:.如何利用CPagizerHelper简化分页处理.如何利用CDBHandle直接把查询转换为消息包的CRowset..如何实现热门排序(SQL语句编写).分页处理是跨数据库平台的.如何处理多个条件 #include "wiser.h"#include "PagizeHelper.h"#include原创 2015-06-01 23:43:32 · 432 阅读 · 0 评论 -
插件开发技术(9)---SQL查询记录与对象的映射
以下是一个示例,执行SQL查询,把返回的CRecordset记录内容映射到用户对象(CUserInfo)上.#include "RecordsetBinder.h"///< 获取用户对象IUserInfo* CLMPlugin::GetUser(CQQ_ORGID orgid,CQQ_USERSERIAL userserial) { GETDBC(pdbor,local_db原创 2015-06-18 15:20:40 · 902 阅读 · 0 评论 -
插件开发技术说明(10)---业务处理示例(加入购物车)
sba.cpp///////////////////////////////////////////////////////////////////////////////////< 加入购物车(7150)int CSbaService::OnAddCart(CWrappedMsg *> &out,DISPATCH_RESULT &or) { or.err_code_ = CE_DA原创 2015-06-19 15:31:08 · 504 阅读 · 0 评论 -
插件开发技术说明(1)---前言
1.名字空间业务对象,数据类型和函数都定义在自己的应用域中.应用域对应实现上的名字空间.如slic应用的名字空间为:slic_ns。2.公共文件跨应用公共文件common\uni_error.h:通用错误编码应用内公共文件:common\slic_error.h:slic应用系统的错误编码common\slid_data.h:slic应用对象定义文件comm原创 2015-05-23 02:41:28 · 404 阅读 · 0 评论 -
插件开发技术说明(2)---rc_finder插件
本文描述以下内容.如何在插件中实现一个协议.如何设置协议不需要安全验证:即在用户登录前可以访问.如何预加载数据缓存.面向对象的业务逻辑处理:业务对象封装属性和逻辑,协议处理函数负责调用,而不直接涉及业务逻辑.如何查询数据库.协议处理函数的一种常见形式1.增加一个新协议在rc_finder.cpp的消息函数映射中增加新协议的映射项:MSG_FUNC_MAP C原创 2015-05-23 03:01:08 · 981 阅读 · 0 评论 -
插件开发技术说明(3)---letein插件
本文描述以下内容:.如何利用协议脚本校验参数.如何利用协议检查器访问参数 1.协议脚本基本介绍支持利用XML文件描述协议参数的约束,称为协议规则文件,关于每个协议的内容称为协议脚本利用协议脚本可以简化编码,且在变化时不需要修改程序..(更多特性以后介绍).每个插件可以定义一个协议规则文件,文件名与插件同名,扩展名为:pr.letein的协议规则文件letein.pr原创 2015-05-23 03:35:10 · 661 阅读 · 0 评论 -
插件开发技术说明(11)---修改数据
ITableHandler增加以下方法: virtual int SetKeyField(const char *key,...) = 0; ///< 设置key字段 virtual void SetAdditionCond(const char *expr) = 0; ///测试数据create table t_tst_test1( f1 int, f2 varch原创 2015-06-26 14:04:17 · 721 阅读 · 0 评论 -
插件开发技术说明(12)---面向业务对象编程:2种风格的对比
实现业务功能时要求面向业务对象编程,并且是完全对象化处理。协议处理不要直接操作数据库,而是通过业务对象的封装完成。以下是7125协议的2种实现。风格1:int CSbaService::OnApplyTrial(CWrappedMsg *> &out,DISPATCH_RESULT &or){ or.err_code_ = CE_DATABASE; CMsg* pMs原创 2015-06-26 19:13:41 · 721 阅读 · 0 评论 -
Microsoft Visual Studio 2010 的远程调试器
Microsoft Visual Studio 2010 的远程调试器下载:http://www.microsoft.com/zh-CN/download/details.aspx?id=475下载文件名:C:\Users\Administrator\Downloads\rdbgsetup_x64.exe在远程机器上运行rdbgsetup_x64.exe安装远程原创 2015-08-11 16:49:10 · 1353 阅读 · 0 评论 -
插件开发技术说明(5)---分页处理
对于需要分页处理的协议,协议定义文档仅声明"支持分页",而不重复说明.需要分页处理的协议采用以下模板:提供请求参数和返回参数的定义。 协议名称分页查询模板协议编号 通信模式 请求内容 参数参数名称原创 2015-05-28 17:47:15 · 365 阅读 · 0 评论