
实现
wherwh
这个作者很懒,什么都没留下…
展开
-
Hoard应用
本文是多年前的一篇草稿.目前项目中准备用hoard,恢复发布此文。1.背景das前置机和服务器有崩溃的情况,是否是大量请求时内存不足所致?一个umx文件加载进内存,内存消耗为什么增大了非常多?如几十M的文件,加载后内存暴增几百兆---以前有过此现象2.测试与分析hoard对此的改善有多大?int new_buf(int times,int size) { for (...原创 2018-10-03 20:57:07 · 521 阅读 · 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 评论 -
客户端码表管理实现
1.码表管理支持common下新增文件:.base_code_table.h:定义码表元素和码表资源名称.code_table_mgr.h:码表管理器模板定义template class CCodeTableMgr : public ICodeTableMgr { CAutoVector data_;.i_code_table_mgr.h:码表管理器接口定义;t原创 2013-05-09 12:02:31 · 1437 阅读 · 0 评论 -
das for gyb2.0新增特性说明
以下特性是因gyb2.0的需要而引入,作为das系统的新增特性。1.支持系统字段可以配置目前是为了支持gyb2而增加的功能.在lm.conf中配置.目前仅支持的系统字段有: SF_SRC_ORGID = 55, /// 源机构(零售商) SF_SHEET_ID = 56, /// 单据编号 SF_DEST_ORGID= 58, /// 供应商mis 默认字段名分原创 2014-12-10 16:47:34 · 515 阅读 · 0 评论 -
dxi通用单据处理实现
处理是指数据层面而非业务层面.是业务处理,接口交换(dd,dxi_change_log等)功能的基础.单据交换系统实际上是一个业务数据对象的同步子系统.业务系统在其上构建.同步是基于对象的变更进行的。对象分为单表对象,多表对象.单表对象对应表的一条记录,如商品资料.多表对象是关系型对象,关系的逻辑结构呈现树型.多表对象是每对象分别处理(抽取,传输,接收处理),单表支持组合以提高效率原创 2014-12-11 19:39:01 · 498 阅读 · 0 评论 -
DXI补充说明
DX 1.变更类型 /// 变更类型enum OP_MODE { OM_UNSPECIFED=0, /// OM_NEW=1, /// OM_DELETE=2, /// OM_OVERWRITE=3, /// OM_PK_CHANGED=4, /// OM_INC=5,/// OM_SLIGHT_CHANGE=6, /// OM_FULL_S原创 2014-11-25 01:41:48 · 660 阅读 · 0 评论 -
从平台发过来的810消息不兼容问题
810-Indication消息的生成和发送: /// CMsg *amsg = new CMsg; amsg->SetMsgType(MT_INDICATION); amsg->SetMsgID(810); amsg->SetMsgPriority(MP_LOW); CUMXT *tm原创 2014-10-21 15:50:44 · 487 阅读 · 0 评论 -
客户端数据校验器中的2个bug
validtor.cpp中的2个bug1.输入有效字符的控制时对字母(isalpha)的判定:测试时发现可以输入汉字int CValidatorBase::CheckChar(char ch) { if (v_ch_set_.empty()) return 1; CAutoVector::iterator iter = v_ch_set_.原创 2014-06-27 17:21:07 · 599 阅读 · 0 评论 -
进程自动重起
后台任务性质的程序无法确定的原因下处于不可恢复状态下自动重新启动进程.主要是应对Berkeley DB DB_RUNRECOVERY错误特例的情况.处理步骤:程序更新:.更新bbox.dll.把restart_proc.exe复制到服务器主目录下 配置修改: bbox.conf增加以下配置项:1 服务器程序在判定不可恢复时,启动res原创 2013-11-21 00:22:54 · 715 阅读 · 0 评论 -
mbox说明
mbox客户端的作用是作为消息中心的客户端插件.是在原有消息盒子的基础上基于hotfox框架,重新定义后的初步实现,暂时屏蔽了许多有用的特性.mbox作用:.处理消息通知消息(680-Indication).提供本地消息引擎接口(INMEngine).提供Tip窗口(TfrmTip2),负责消息通知的提示.接收通知后调用登记的处理者处理.自动向服务器确认.通知保原创 2013-11-19 22:07:27 · 4836 阅读 · 0 评论 -
增强的单据通esb插件任务调度策略及配置
1.缘起基于hotfox的程序,到v3.2止只支持2种后台任务调度方式:(1)每间隔:适用于指定一段时间重复执行的任务,如每小时执行一次(2)每天执行一次:需要指定执行的时间,精确到分钟,如02:30.近期的2个项目分别提出了超出上述能力的需求,这些需求的含义描述如下:要求每N周执行一次,可指定一周的哪天的什么时间,如每2周的周三19:00执行一次要求每月执行一次,可指原创 2013-08-29 23:15:32 · 1223 阅读 · 0 评论 -
客户端分页处理器
分页(查询)是客户端开发经常面临的问题.经常性或者带有普遍性的问题, 好的对策是用抽象,而不是重复。重复行为没有价值,而且有害,浪费资源(开发者资源,发布,运行时资源),代码臃肿,增加阅读和维护困难,弄不好牵一发而动全身。程序的原始目的之一是把重复的事情交给系统自动完成,重复开发的结果是程序员在程序级别的同样行为。当产生重复的冲动,需要ctrl+c/ctrl+v时,通常原创 2013-05-26 15:00:03 · 762 阅读 · 0 评论 -
文件分散器
本文是多年前的一篇草稿.1.介绍用途:.当文件数量很大,无法保存在单一目录下时,需要把文件自动分散到不同的目录下.特性:.指定一个$HOME目录,可限定每个目录下最多文件数量.分级目录保存,如$HOME\1,$HOME\2.在$HOME\1下再分目录保存,以保证可容纳足够数量的文件. 按每个目录最大文件数2000个计算,3级可存储的文件数为:2000*2000*2000个文件...原创 2018-10-03 20:47:32 · 151 阅读 · 0 评论 -
UMXT协议封包/解包示例
///////////////////////////////////////////////////////////////////////////////////< 加密会话密钥函数///< @param cert_entity_id:证书主体ID///< @param key:会话密钥///< @param out,outlen:加密形式的会话密钥缓冲区和长度...原创 2009-12-05 22:39:00 · 1111 阅读 · 0 评论 -
UMX-T协议定义
//////////////////////////////////////////////////////////////////////// 消息队列定位键struct MQ_LOC_KEY { unsigned short node_type_; ///< 节点类型 unsigned long node_id_; ///< 节点ID unsigned short ...原创 2009-12-05 22:49:00 · 722 阅读 · 0 评论 -
UMXT编程说明
1.UMX协议族原来的UMX明确为UMX应用协议,增加CUMXT协议---UMX传输层协议.数据传输时,如果需要指定传输属性,如是否存储转发,是否加密,固定投递,是否可靠等.如此分层,有以下好处:---逻辑清晰---提高效率:中转时可以只解析到传输层,开销是固定的.---便于扩展:破解之前UMX属性位缺少的困境开发人员可以指定是否压缩.程序可以配置为应用消息包达到一个阈值时,自动...原创 2009-12-12 00:35:00 · 7009 阅读 · 0 评论 -
异步任务处理
1.引入交互式操作不能容忍长时间的等待.如果服务端处理用户请求涉及多个操作,可以把部分耗时的操作进行异步处理.即时响应用户,然后由服务器在后台完成剩下的步骤.当然,这种异步化处理必须符合业务逻辑,比如用户的后续操作依赖本地操作的结果的情况不适用.通过建立异步任务表存储任务信息,然后由后台任务定时处理。2.定义2.1任务信息:异步任务表(tb_0036)是任务原创 2012-12-10 01:16:49 · 1023 阅读 · 0 评论 -
客户端数据校验器
1.用途简化客户端输入/编辑操作的编程。可大幅减少代码量,并易于维护和扩展。.支持从对象直接加载到控件和把控件数据更新到对象.自动根据校验规则控制输入.支持TEdit,TComboBox,TDatetimePicker限制:.仅支持对象的成员类型为基本数据类型和string2..定义头文件:validator.h名字空间:ns_validator原创 2013-05-07 06:46:46 · 1003 阅读 · 0 评论 -
IDbHelper接口NewTableHandler实现增强
某托管服务器崩溃产生了crash,经惠礼分析定位到missive插件中处理消息执行下面的调用时返回NULL,后续对th的访问导致崩溃:ITableHandler *th = CBasePluginModule::db_helper_->NewTableHandler(pdbor,"tb_6016");使用IDbHelper接口NewTableHandler创建表处理器对象,用来操纵数据库.原创 2014-12-10 19:48:46 · 819 阅读 · 0 评论 -
消息转发
1.消息中转th项目利用交换服务器为跨服务器通信提供消息中转服务.以用户上线通知为例。用户A在S1服务器上登录,需要把该用户上线的消息发送给在其它服务器登录的同事和好友.S1确定用户A的同事和好友信息:。在S1上登录的。在其它服务器上登录的转发消息包含2部分:消息本身以及目标信息。目标信息用于转发处理,包括服务器行集,而服务器记录包含用户行集。转发消息(原创 2015-01-07 20:03:46 · 492 阅读 · 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 评论 -
简单类型变量输入校验器
客户端数据校验器介绍了基于对象的数据输入时校验的实现,适应于业务对象的操作.在开发查询功能时,查询条件可能是对若干项简单变量的过滤(当然也可以定义查询条件对象).本文就是对基于简单类型变量的输入控制和校验的实现.客户端数据校验器在OnKeyPress处理上有以下增强(文档未更新).原有实现中截获控件的OnKeyPress后,开发人员自定义的OnKeyPress代码被校验器忽略,原创 2013-05-19 09:55:57 · 526 阅读 · 0 评论 -
基于hotfox的客户端的结构
1.简述hotfox是程序框架,由插件提供具体的应用入口,登录实现和业务主窗口.具体的应用业务逻辑由相应的插件实现。Frame1是一个常见的应用模式的实现插件.logina是一个风格简单的登录模块.AppEntryStyle1是一个动态构造菜单系统的模块,可以作为应用的主界面插件提供者.GDSN_Supplier是一个具体的应用的插件,该插件提供主窗口.以下原创 2013-10-25 20:58:00 · 1029 阅读 · 0 评论 -
使用Hotfox Plugin Wizard创建客户端插件
因没有开发专门的生成客户端插件的向导,目前可以利用创建服务端插件的方式再进行手工修改,也可以简化插件创建过程.(1)在vs2005中使用Hotfox Plugin Wizard生成的工程.假设创建的插件名称为logina,则向导生成的文件:--logina.vcproj--logina.cpp--logina.h--logina.conf--logina.d原创 2013-10-24 21:58:48 · 576 阅读 · 0 评论 -
SEMQ流量控制
1.背景SEMQ的活动有:.发送消息.确认:确认目标方接收到.再确认:目标方确认发送方已知得到确认这些活动通过3组协议实现。本地服务器SEMQ在供应宝中是单实例的.本地服务器注册平台后,SEMQ的待发送消息,确认和再确认消息会不加节制地发出,会造成洪涌现象。不论是平台还是目标方。缺陷是:.影响到实时消息的处理.需要大量的资源:网络,服务器CPU和原创 2012-12-09 21:19:14 · 583 阅读 · 0 评论 -
复杂数据类型抽取支持
复杂数据类型是指一个数据对象(实体)涉及多个数据库表,表之间的逻辑关系可以用一个树形结构表示。在该树形结构中,每个表是其中的一个节点。.仅有一个根.除根以外的节点,有且仅有一个父节点.主从等价父子。以A-->B表示A是B的主表,A是父节点,B为子节点.复杂数据类型的支持实际上通过以下2种结构的支持实现。(1)A-->B-->CA: select f1,f2,f3 fro原创 2012-07-11 22:52:19 · 412 阅读 · 0 评论 -
参数化串解析器使用示例
参数用一个特定的字符引导.参数名不能为空.有效的参数名由除括号(')'),逗号(','),分号(';')外的非空白符组成.可用于解析参数化的SQL命令,如:.select * from where f1=@v1 and f2=@v2 执行查询.call test_sp1(@f1)调用存储过程也可以用于模板化信息(如"您收到来自@orgid_name的@sheet_type原创 2012-07-11 13:27:41 · 459 阅读 · 0 评论 -
Flex开发解析器示例(1)
通用单据处理支持主表修改,对于复杂数据类型,当仅主表数据的部分数据项改变时只同步这些已变化的字段,减少不必要的开销。接口表记录变更的方式是记录每个变更字段的当前值。每个字段的变更描述格式为:字段名=[值长度,属性,值]。多个字段之间用逗号(",")分隔。此格式可以避免转义问题(如值内容中出现"],"的情况).属性目前用于区分是否是base64编码,这可用于binary类型字段的原创 2012-07-04 01:09:04 · 827 阅读 · 0 评论 -
Hotfox Agent使用示例
Hotfox Agent是开发Hotfox Client的Native C开发库。导出的函数包括:.htx_c_api中的HTX_xxx系列函数.umx2c.h中的UMX_xxx,RS_xxx系列函数 以下为如何使用的示例代码。 #include #include "../htx_c_api.h"#include "../umx2c.h"#inclu原创 2010-04-15 20:58:00 · 575 阅读 · 0 评论 -
DXI数据文档类
#ifndef H_DATA_DOC/// 数据文档类定义#define H_DATA_DOC#include "i_dd.h"#include "i_biz.h"#include "i_data_doc.h"#include "auto_pointer.h"#include "i_log.h"#include "xxml.h"#include "i_d原创 2012-04-23 06:24:46 · 359 阅读 · 0 评论 -
竞赛模式
1.模式介绍角色:多个竞赛者,一个裁判动机:多个竞赛者进行同样的事情(竞赛项目),选出最早完成的参赛者。实现:.支持排名和选拔两种赛制.隐式裁判.选拔不支持多选(只支持选择最快的)应用: .本地服务器直接连接时,如果托管服务器有2个ISP,则访问者可以从这2个ISP选择一个较快的网络连接。 .可应用于并行应用情形,如加载托管机构证书时利用此模式可提高启原创 2011-06-11 20:00:00 · 507 阅读 · 0 评论 -
UMX消息和待办事宜类型之间的转换方式
UMX消息是供应宝系统通信单元,每种消息有由(消息域,消息类型,消息ID)识别。功能通过UMX消息交互序列实现。一种UMX消息可用来实现不同的功能。UMX消息和功能没有一一对应关系。待办事宜是一种应用功能,支持分类。待办事宜可以是:.一个转发的消息.一个关联记录(如一张待处理记录,一份待阅读公告).///////////////////////////////////////////////////////////////////////////////////////class ITodoCvt{原创 2011-04-18 20:59:00 · 770 阅读 · 0 评论 -
如何响应TListView列标题的双击事件
<br />通过HDN_ITEMDBLCLICK<br /> <br />关于HDN_ITEMDBLCLICK,MSDN的描述如下:<br />Notifies a header control's parent window that the user double-clicked the control. This notification message is sent in the form of a WM_NOTIFY message. Only header controls that are原创 2011-03-22 13:37:00 · 1363 阅读 · 0 评论 -
平台SEMQ静态路由实现
1.引入供应宝支持各种类型的实体之间通信,实体类型称为端点类型。目前定义的端点类型有:///.1 PT_ORG 机构.2 PT_ORG_USER 机构用户(客户端).3 PT_CENTRAL 平台.4 PT_SERVER (本地)服务器.5 PT_PSERVER 平台服务器ID.6 PT_D原创 2012-12-15 00:23:52 · 592 阅读 · 0 评论 -
客户端消息处理机制
1.消息处理者消息处理者是消息的处理函数的封装对象,处理函数可以是:窗体成员函数插件的成员函数消息处理者指定方式:指定的某种消息的处理者指定某个消息的处理者2.使用示例按消息种类指定插件处理者 如:MSG_FUNC_MAP CManagePlugin::func_[] ={ {561,MT_CONFIRM原创 2013-05-15 22:43:42 · 1049 阅读 · 0 评论 -
多dd支持
1.配置(dd.conf) dd.conf 增加以下配置项: 2 10,11,12 1 4,0,(1),(2200),60 10,11 目前不支持为2的情况. 定义的调度策略将覆盖规则的定义,任务的一组规则使用相同的策略. 的配置见下文原创 2013-09-23 17:25:19 · 620 阅读 · 0 评论 -
dd支持Sybase的timestamp字段作为主查询条件的实现
代码修改内容如下:修改CRule::GenerateQryCond函数,用于生成保存的当前主查询条件表达式.修改单表和多表规则的Handle函数,获取更新的条件字段值.增加CvtCharArrayValue函数,把通过ADO获取的_variant_t值转换为16进制串格式.关于sybase timestamp字段的读取:对应的ADO字段类型为:VT_ARRAY|VT_U原创 2013-09-16 23:32:47 · 1508 阅读 · 0 评论 -
按周调度任务支持实现
esb配置esb.conf任务调度配置扩展后的esb支持按周调度任务. 2 0 21:00 60 2013-3-15 esb插件代码修改esb_task.cpp修改c_esb_scan_rule_factory::create函数i_esb_scan_rule* c_esb_scan_rule_factory::create(INode* parentN原创 2013-08-01 17:00:14 · 664 阅读 · 0 评论 -
TcxGrid使用
如何复制TcxGrid的Cell内容到剪裁板默认情况下,TcxGrid支持Ctrl+C操作的.但内容为整行,并且带有标题.默认设置如下:(以下设置可以在设计时进行)cxGridLevel1->OptionsBehavior->CopyCaptionsToClipboard=ture : 复制时包含标题cxGrid1DBTableView1->OptionsSelection->C原创 2013-07-24 04:31:10 · 3508 阅读 · 0 评论 -
商品图片下载实现
服务端处理商品文档的图片元素(提供了描述,图片URL信息)时,采用HTTP把下载文件到本地服务器,并把图片信息保存在tb_gdsn_goods_pic表中.开发时注意:.从SVN上下载vendor\curl-7.31.0到本地环境.vs2005环境设置(或者工程属性): include路径: v:\curl-7.31.0\include lib路径v:\cur原创 2013-07-29 18:47:57 · 709 阅读 · 0 评论