MMOG Consign Server 概要设计.docx

上传人:b****2 文档编号:573649 上传时间:2023-04-29 格式:DOCX 页数:15 大小:109KB
下载 相关 举报
MMOG Consign Server 概要设计.docx_第1页
第1页 / 共15页
MMOG Consign Server 概要设计.docx_第2页
第2页 / 共15页
MMOG Consign Server 概要设计.docx_第3页
第3页 / 共15页
MMOG Consign Server 概要设计.docx_第4页
第4页 / 共15页
MMOG Consign Server 概要设计.docx_第5页
第5页 / 共15页
MMOG Consign Server 概要设计.docx_第6页
第6页 / 共15页
MMOG Consign Server 概要设计.docx_第7页
第7页 / 共15页
MMOG Consign Server 概要设计.docx_第8页
第8页 / 共15页
MMOG Consign Server 概要设计.docx_第9页
第9页 / 共15页
MMOG Consign Server 概要设计.docx_第10页
第10页 / 共15页
MMOG Consign Server 概要设计.docx_第11页
第11页 / 共15页
MMOG Consign Server 概要设计.docx_第12页
第12页 / 共15页
MMOG Consign Server 概要设计.docx_第13页
第13页 / 共15页
MMOG Consign Server 概要设计.docx_第14页
第14页 / 共15页
MMOG Consign Server 概要设计.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

MMOG Consign Server 概要设计.docx

《MMOG Consign Server 概要设计.docx》由会员分享,可在线阅读,更多相关《MMOG Consign Server 概要设计.docx(15页珍藏版)》请在冰点文库上搜索。

MMOG Consign Server 概要设计.docx

MMOGConsignServer概要设计

MMOGConsignServer概要设计

 

拟制:

Willim

日期:

2004-09-21

审核:

日期:

 

深圳市腾讯计算机系统有限公司

版权所有不得复制

文档历史

修订日期

修订内容

协议版本

修订人

2004-9-21

created

V0.1.0

willim

2004-9-23

根据REVIEW意见修改

V0.2.0

willim

目录

1简介5

1.1MiscServer功能简介5

1.2寄售系统的一些限制5

2寄售系统结构6

2.1寄售系统与相关Server的逻辑结构图6

2.2ConsignServer的内部结构7

2.3相关数据结构7

2.3.1内存中的寄售物品7

3接口协议8

3.1寄售物品8

3.1.1消息结构8

3.1.2消息流程9

3.1.3异常处理9

3.2查询寄售的物品9

3.2.1消息结构9

3.3购买物品11

3.3.1消息结构11

3.3.2消息流程12

3.3.3异常处理12

3.4撤消寄售12

3.4.1消息结构12

3.4.2消息流程13

3.4.3异常处理13

3.5回退处理14

3.5.1消息结构14

3.5.2异常处理14

4数据库表结构14

4.1寄售物品表(tbConsignItem)14

MMOGConsignServer概要设计

关键词:

Miscserver,杂项服务系统,寄售系统

摘要:

本文是寄售子系统的概要设计,在简单介绍MiscServer系统结构的基础上,主要描述寄售系统的设计及其与相关Server之间的接口消息描述。

缩略语清单:

MiscServer杂项服务系统

ConsignServer寄售系统服务进程

1

简介

1.1MiscServer功能简介

MiscServer是一个独立的子系统,是属于WORLD一级的功能实体,它包含了MailServer、寄售系统等与在线角色数据没有密切的依赖关系,但又需要访问数据库的功能,目的是:

1、减少worldlogin的消息转发。

邮件系统和寄售系统都只需关注在线角色列表的信息,独立出来后可以减少worldlogin对“与己无关”的消息转发,从而提高其对在线角色关键数据流程的处理效率

2、减少zoneserver的关联实体

3、易于后续类似应用的扩展

本文主要介绍寄售系统的设计与实现,其它系统请参看相关文档。

1.2寄售系统的一些限制

为方便购买,寄售系统支持物品名称、物品等级、拥有者名字和价格范围的组合查询,如果采用内存中CACHE的做法,共需要建立上述4个索引,维护代价较高,不如通过Mysql自己的缓冲机制直接查找数据库表。

为了较快速地响应Client的请求(如1每秒100个操作),寄售系统将有以下的限制(以下数据以每个GAMEWORLD支持5000在线来计算):

1、系统总共能寄售30000件物品

2、寄售时限为24小时。

如果到达时限但物品没有销售出去,则退回给物品拥有者

3、如果在玩家查询的时候不设置条件或者条件过于宽松,server最多返回90个物品的信息

4、如果玩家物品栏已满,物品就会掉到地上,物品有一定的保护时间,在此时间内,玩家可进行调整和处理

5、为了方便日后的核对,买、卖寄售物品时都需要记录交易日志

寄售的手续费分为基本手续费和交易成功后的系统提成两部分,寄售时需预先收取基本手续费。

2寄售系统结构

2.1寄售系统与相关Server的逻辑结构图

说明:

1、worldserver包含worldlogin和roleserver进程组,主要处理角色的login/logout/update等在线请求

2、Miscserver是目前的邮件系统的扩展(请参见《邮件系统Server端概要设计》),并为寄售系统(Consignserver进程)的消息转发。

每个WORLD只有一个MiscServer

3、考虑到寄售物品的数量与时间限制,寄售系统只需要Consignserver一个进程,所有的寄售物品存储在一个数据库表中,无需再细分

4、在线角色数据(OnlineRoleTable)由worldserver进程组进行维护,可以通过synserver/synclient同步到不同的物理主机,以供不同的进程所使用(请参见《MMOGDispatchServer概要设计》)

5、各进程之间通过bus进行数据交换

 

2.2ConsignServer的内部结构

说明:

1、ConsignServer进程在启动时,将所有的寄售物品(唯一编号,拥有者,寄售时间、、、但不包含详细的物品信息)从数据库中load到内存,以供检查和做购买/撤消时的预处理。

在寄售数据库表发生变更时(即有玩家购买或者撤消),内存中也要做相应的修改

2、寄售物品在内存中是以唯一编号作为HASH因子的紧凑的HASH链表结构

3、ConsignServer在每个处理主循环,将根据系统的忙闲情况,顺序地检查部分寄售物品是否达到时限,以便进行退回处理

 

2.3相关数据结构

2.3.1内存中的寄售物品

#defineMAX_TOTAL_CONSIGN_ITEM30000//最多支持的寄售物品

typedefstruct{

unsignedlongm_lSeqNo;//该寄售物品的唯一的递增序列号

longm_lUin;//拥有者UIN,以便后续的消息转发

charm_szOwner[32];//拥有者

timem_lTimeStamp;//寄售时间

shortm_nItemIdx;

intm_iPrice;//出售价格

charm_cDiscount;//折扣

}ConsignItem;

typedefstruct{

ConsignItemm_stItem;

intm_iPriorIdx;//前一节点的相对偏移量

intm_iNextIdx;//后一节点的相对偏移量

}ItemNode;

typedefstruct{

intm_iItemNumber;//当前寄售的物品数量

intm_astIdxMAX_TOTAL_CONSIGN_ITEM*10];

ItemNodem_astConsignList[MAX_TOTAL_CONSIGN_ITEM];//寄售物品列表

}ConsignHash;

3接口协议

ConsignServer与各SERVER之间的通信包结构,采用已有的worldserver和zoneserver包结构。

3.1寄售物品

3.1.1消息结构

1、请求消息(CONSIGN_ITEM=350)

typedefstruct{

ITEMm_stItem;//寄售的物品

intm_iPrice;

charm_cDisount;

}ConsignItem;

typedefstruct{

longm_lUin;

charm_szOwner[32];

unsignedcharm_cItemNumber;//寄售的物品数目

ConsignItemm_astItem[MAX_CONSIGN_ITEM];//寄售的物品

}Consign;

2、响应(RES_CONSIGN_ITEM=351)

typedefstrust{

intm_iResult;

longm_lUin;

charm_szOwner[32];

unsignedcharm_cFail;//未能寄售的物品数目

ITEMm_astItem[MAX_CONSIGN_ITEM];//未能寄售的物品

unsignedcharm_cSuccl;//成功寄售的物品数目

shortm_anIdx[MAX_CONSIGN_ITEM];//成功寄售的物品IDX

}ConsignRes;

3.1.2消息流程

说明:

1、在玩家寄售物品时,先将其物品/道具栏上的物品取下,再发送请求消息。

如果寄售失败再将物品重新放到其物品栏

2、ConsignServer在接受到寄售请求时,先在内存中判断所有寄售物品的总数是否超过限制,然后再更新数据库表和内存中的数据。

如果是部分成功,则视为失败。

3.1.3异常处理

如果ConsignServer返回错误的处理结果,若寄售者刚好离线,zoneserver将给其发送系统邮件,将物品放在邮包中,待其上线再收取,否则将物品回退给其物品/道具栏。

错误定义:

1、寄售物品太多:

ERR_TOO_MANY_CONSIGN3100

2、系统错误:

ERR_SYS_ERROR2

3.2查询寄售的物品

3.2.1消息结构

1、查询类型

#defineQRY_BY_ITEM_TYPE0x01

#defineQRY_BY_OWNER0x02

#defineQRY_BY_LEVEL0x04

#defineQRY_BY_PRICE0x08

#defineQRY_BY_SELF0x10

查询类型是上述4种类型“或”之后的结果。

2、请求消息(CONSIGN_QRY=352)

typedefstruct{

longm_lUin;

charm_szOperator[32];

unsignedcharm_cQryType;

intm_ItemType;

charm_szOwner[32];

charm_cLevel1;//最小等级

charm_cLevel2;//最大等级

intm_iPrice1;//最小价格

intm_iPrices2;//最大价格

charm_cPageNum;//查询的页面数,暂无用

}ConsignQry;

3、响应(RES_CONSIGN_QRY=353)

typedefstruct{

unsignedlongm_lSeqNo;

charm_szOwner[32];//物品的拥有者

ITEMm_stItem;

intm_iPrice;//价格

charm_cLevel;//级别

intm_iTimeLeft;//距离打折的剩余时间,以秒为单位

charm_cDiscount;//折扣(0~100)

}ConsignItem;

typedefstrust{

intm_iResult;

longm_lUin;

charm_szOperator[32];

charm_cType;//查询的类型

charm_cItemNumber;//物品数量

ConsignItemm_astItem[MAX_QRY_CONSIGN_ITEM];//最多90件

}ConsignRes;

3.3购买物品

3.3.1消息结构

1、请求消息(BUY_CONSIGN_ITEM=354)

typedefstruct{

unsignedlongm_lSeqNo;//购买的物品的寄售唯一编号

shortm_nItemIdx;//物品的INDEX

intm_iPrice;//成交价格

}Bargain;

typedefstruct{

longm_lUin;

charm_szOperator[32];

unsignedcharm_cItemNumber;//购买的物品数目

Bargainm_astBargain[MAX_CONSIGN_ITEM];//购买物品列表

}BuyConsign;

2、响应(RES_BUY_CONSIGN_ITEM=355)

typedefstrust{

intm_iResult;

longm_lUin;

charm_szOperator[32];

unsignedcharm_cSucc;//成功购买的物品数目

ITEMm_astItem[MAX_CONSIGN_ITEM];//成功购买的物品

unsignedcharm_cFail;//未能购买的物品数目

Bargainm_astBargain[MAX_CONSIGN_ITEM];//未能购买的物品简要信息

}BuyConsignRes;

3、更新寄售者金钱的消息(CONSIGN_SUCC=380)

typedefstruct{

intm_iMoney;

chortm_nIndex;

}ItemDetal;

typedefstruct{

longm_lUin;

charm_szRoleName[32];

charm_cItemNumber;

ItemDetalm_astItem[MAX_CONSIGN_ITEM];

}ConsignSucc;

3.3.2消息流程

说明:

1、zoneserver在发送购买请求时,先根据玩家的出价,减少该玩家的金钱(多扣不退还),但不向Client发送金钱更改的消息,以避免交易不成功时的金钱变化。

若交易不成功,再将金钱加回来。

2、ConsignServer需要判断玩家的出价是否满足要求,如果交易成功,则将金钱直接返回给在线的寄售者,或者通过系统邮件的方式返回给离线的寄售者。

3.3.3异常处理

如果ConsignServer返回错误的处理结果,而刚好购买者离线,zoneserver将给其发送系统邮件,将物品放在邮包中,待其上线再收取。

错误定义:

1、价格不合理:

ERR_CONSIGN_PRICE3102

2、无此物品:

ERR_CONSIGN_NOT_EXIST3103

3、系统错误:

ERR_SYS_ERROR2

3.4撤消寄售

3.4.1消息结构

1、请求消息(RECALL_CONSIGN=350)

typedefstruct{

longm_lUin;

charm_szOwner[32];

unsignedcharm_cItemNumber;//撤消寄售的物品数目

unsignedlongm_lSeqNo[MAX_CONSIGN_ITEM];//撤消寄售的物品

}Consign;

2、响应(RES_CONSIGN_ITEM=351)

typedefstrust{

intm_iResult;

longm_lUin;

charm_szOperator[32];

unsignedcharm_cSucc;//成功撤消的物品数目

ITEMm_astItem[MAX_CONSIGN_ITEM];//成功撤消的物品

unsignedcharm_cFail;//未能撤消的物品数目

unsignedlongm_lSeqNo[MAX_CONSIGN_ITEM];//未能撤消的物品

}RecallRes;

3.4.2消息流程

说明:

1、ConsignServer接收到撤消寄售的请求时,先判断物品的属主是否一致。

更新完数据库表后,再修改内存中的寄售物品信息

3.4.3异常处理

如果ConsignServer处理成功,但寄售者刚好离线,zoneserver将给其发送系统邮件,将物品放在邮包中,待其上线再收取,否则将物品回退给其物品/道具栏。

错误定义:

1、非寄售物品的拥有者:

ERR_CONSIGN_NOT_OWNER3101

2、系统错误:

ERR_SYS_ERROR2

3.5回退处理

3.5.1消息结构

ConsignServer在轮循内存中的所有寄售物品时,若物品的寄售时间已经超过24小时,则主动通过MiscServer向zoneserver下发WITHDRAW_CONSIGN(=35)的请求:

typedefstruct{

longm_lUin;

charm_szOwner[32];

unsignedcharm_cItemNumber;//退回的寄售物品数目

ITEMm_astItem[MAX_CONSIGN_ITEM];//退回的撤消寄售物品

}Consign;

3.5.2异常处理

1、MiscServer通过OnlineRoleTable判断角色是否在线,若角色在线则下发消息给zoneserver;若不在线则给该角色发送系统邮件,将物品打包在邮件中。

2、若zoneserver接收到此消息时,角色刚好离线,zoneserver则发送身体邮件给该角色

4数据库表结构

4.1寄售物品表(tbConsignItem)

字段名称

类型与限制

是否索引

备注

lSeqNo

int(11)auto_increament

寄售物品的唯一序列号

lUin

Int(11),notnull

拥有者的UIN

vOwner

varchar(32),notnull

YES

拥有者

iItemType

int(6),notnull,default0

YES

寄售物品的类型

iPrice

int(11),notnull,default0

YES

出售价格

cLevel

char,notnull,default0

YES

寄售物品的等级

cDiscount

char,notnull,default0

折扣(0~100)

bItem

blob,defaultNULL

寄售物品的详细内容

dtTimeStamp

DateTime,notnull

寄售时间

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2