- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
投票协议之构建和解析协议消息.
投票协议之构建和解析协议消息来源:华岳刷票 我们来看一个简单的例子,对在实现别人定义的协议时可能用到的技术进行了介绍。这个例子程序是一个简单的投票协议,如图3.2所示。这里,一个客户端向服务器发送了一个请求消息,消息中包含了一个候选人ID,范围是0至1000。Vote Reques:投票请求, Candidate:候选人,Vote Count:选票总数程序支持两种请求。一种是查询(inquiry),即向服务器询问给定候选人当前获得的投票总数。服务器发回一个响应消息,包含了原来的候选人ID和该候选人当前(查询请求收到时)获得的选票总数。另一种是投票(voting)请求,即向指定候选人投一票。服务器对这种请求也发回响应消息,包含了候选人ID和其获得的选票数(包括了刚投的一票)。在实现一个协议时,定义一个专门的类来存放消息中所包含的信息是大有裨益的。该类提供了操作消息中的字段的方法--同时用来维护不同字段之间的不变量。在我们的例子中,客户端和服务器端发送的消息都非常简单,它们唯一的区别是服务器端发送的消息包含了选票总数和一个表示响应消息(不是请求消息)的标志。因此,我们可以用一个类来表示客户端和服务器端的两种消息。VoteMsg.java类展示了每条消息中的基本信息:布尔值isInquiry,其值为true时表示该消息是查询请求(为false时表示该消息是投票信息);布尔值isResponse,指示该消息是响应(由服务器发送)还是请求;整型变量candidateID指示了候选人的ID;长整型变量voteCount指示出所查询的候选人获得的总选票数。这个类还维护了以下字段间的不变量:candidateID的范围是0到1000。voteCount在响应消息中只能是一个非零值(isResponse为true)。voteCount不能为负数。VoteMsg.java0 public class VoteMsg {1 private boolean isInquiry; // true if inquiry; false ifvote2 private boolean isResponse;// true if response fromserver3 private int candidateID; // in [0,1000]4 private long voteCount; // nonzero only in response56 public static final int MAX_CANDIDATE_ID = 1000;78 public VoteMsg(boolean isResponse, boolean isInquiry,int candidateID, long voteCount)9 throws IllegalArgumentException {10 // check invariants11 if (voteCount != 0 !isResponse) {12 throw new IllegalArgumentException(Request vote countmust be zero);13 }14 if (candidateID 0 || candidateID MAX_CANDIDATE_ID){15 throw new IllegalArgumentException(Bad Candidate ID: + candidateID);16 }17 if (voteCount 0) {18 throw new IllegalArgumentException(Total must be =zero);19 }20 this.candidateID = candidateID;21 this.isResponse = isResponse;22 this.isInquiry = isInquiry;23 this.voteCount = voteCount;24 }2526 public void setInquiry(boolean isInquiry) {27 this.isInquiry = isInquiry;28 }2930 public void setResponse(boolean isResponse) {31 this.isResponse = isResponse;32 }3334 public boolean isInquiry() {35 return isInquiry;36 }3738 public boolean isResponse() {39 return isResponse;40 }4142 public void setCandidateID(int
您可能关注的文档
- 扣件脚手架施工规范..doc
- 扬州大学国际金融(B卷)..doc
- 扬州大学商学院宏观经济学大纲..doc
- 扬州大学测控技术与仪器专业培养方案2010版2009年12月上交..doc
- 扬州大学校园一卡通使用手册..doc
- 扬州市对外贸易状况及问题分析..doc
- 扬州市六圩污水处理厂试运行总结(A2O工艺)..doc
- 扬州市社区社会管理创新工作调研报告(送审稿)2..doc
- 扬子江快运航空公司iCargo操作手册_AMS分册(F4Cn)..doc
- 扬州六圩污水处理厂实习报告..doc
- 某某单位2024年党建工作总结及2025年工作计划.doc
- 某某市发改委关于2024年度落实党风廉政建设工作责任制情况的报告.doc
- 某某局2024年全面从严治党和党风廉政建设工作总结.doc
- 某某区财政局2024年法治政府建设总结及2025年工作谋划.doc
- 2024年党管武装工作述职报告2篇.doc
- 2024年度国企党委书记抓基层党建工作述职报告3篇.doc
- 公司党委书记2024年述职述廉报告.docx
- 2024年度乡镇党委领导班子民主生活会(四个带头)对照检查材料.doc
- 市医疗保障局关于2024年法治政府建设工作情况的报告.docx
- 市民政局党组2024年巡察整改工作情况报告.docx
文档评论(0)