- 博客(54)
- 收藏
- 关注
转载 ICE的异步方法调用
异步方法调用(Asynchronous Method Invocation,简称AMI)下面这种情况就是AMI调用:“斧头帮”大哥(客户端)叫小弟(服务器端)去干收租的活(远程调用),并且给小弟一把烟花炮竹(回调类)。嘱咐说:“我还有其它事情要打扫打扫,如果你的事情办完了,就放OK烟花;如果遇到反抗,就放斧头烟花!”(服务器答复)。说完,这位大哥就可以放心的做其它事去了,直到看
2010-01-12 21:00:00
3680
转载 Ice的更多细节
ICE的整体架构服务器端:服务器端通常只有一个通信器(Ice::Communicator),通信器包含了一系列的资源:如线程池、配置属性、对象工厂、日志记录、统计对象、路由器、定位器、插件管理器、对象适配器在通信器内,包含有一个或更多的对象适配器(Ice::ObjectAdapter),对象适配器负责提供一个或多个传输端点,并且把进入的请求分派到对应的servant中去执行
2010-01-12 20:48:00
2929
转载 ICE的属性配置
本文介绍了如何通过命令行参数或配置文件设置ICE的行为 在前一篇文章中,大家可能都注意到了一个细节,Ice的初始化函数initialize的输入参数正好是主函数的输入参数,也就是命令行参数(注:辅助类Ice::Application也调用了initialize函数)。Ice的初始化函数得到命令行参数后,抽取出Ice专有参数,并把分析
2010-01-12 20:42:00
1462
转载 用ICE开发分布式程序
本文是摘自http://www.cppprog.com上的一位牛人毛毛写的文章,想想自己用了Ice那么久,还是不如别人造诣深刻,真是自叹不如啊! ICE是ZeroC公司开发的一款高效的开源中间件平台,全称是Internet Communications Engine。它的主要设计目标是:• 提供适用于异种环境的面向对象中间件平台。• 提供一组完整的特性,支持广泛
2010-01-12 20:25:00
1787
原创 配置MaNGOS游戏数据库
接上文安装MaNGOS之后,我们的WOW没有任何NPC和怪物,那是因为MaNGOS只负责搭建游戏框架,并不负责构建游戏内容。因此有另一个项目叫做ScriptDev2(简称SD2),专门负责游戏内容的开发。 一、下载数据库脚本 1、开发SD2的论坛有很多,我是在一个叫UDB的论坛里下载的SD2,svn地址https://unifieddb.svn.sourcef
2010-01-10 20:23:00
4227
原创 MaNGOS编译
偶然之间发现了一个wow模拟器MaNGOS,下载下来试用,先把自己的编译方法记录下来。 一、编译二进制文件 1、下载MaNGOS源代码,地址http://github.com/mangos/mangos/tarball/master,并解压缩到某一目录,假设目录是%MaNGOS%。 2、打开VS2008,选择“文件”->"打开",选择%MaNGOS%/
2010-01-09 11:28:00
3504
1
原创 2009年实践敏捷开发的心得
公司领导早就有意尝试敏捷开发,在千挑万选之后,决定在我负责的项目首先试点Scrum敏捷开发,敏捷试点一年多了,有些心得,记录于此: 在2009年有幸在某项目中担任ScrumMaster职务,但是整个团队对于敏捷的认识尚处于初级阶段,更加上组织上CMMI3级的要求,使得这次的敏捷尝试并不尽如人意。 我们项目在项目初期考虑再三,最终采用了Scru
2009-12-30 10:09:00
848
原创 一个分别使用std::list的remove和erase的问题
在实际使用上一篇文章提到的基于策略的Pool(http://blog.youkuaiyun.com/smuggler_2003/archive/2009/12/29/5099330.aspx)的时候,发现一个很妖怪的问题:在多次运行之后,可能会偶然崩溃。通过调试,发现总是中断在std::list中的remove函数 void remove(const _Ty& _Val) { // era
2009-12-29 16:22:00
7775
1
原创 基于策略的通用资源池
在很多程序中都使用到了一些特定资源,比如数据库连接、线程句柄、IMAP连接、LDAP连接等等。在单线程环境下,可能这些资源还能比较容易的管理并分配,但在多线程环境中,管理并发的资源获取和资源释放不是一件容易的事。因此,一般情况下,会在这些程序内部实现一个连接池或者线程池以达到在多线程环境下管理这些资源的目的。但是这些实现一般都针对特定类型的资源,从一个数据库连接池的实现转移到一个线程池的实现,
2009-12-29 16:01:00
1312
原创 想进游戏行业好难啊!
以前去笔试了gameloft,后一段日子去笔试了9U,最近又笔试了victuos,无一例外,都没有给我面试的机会。我开始怀疑自己的技术水平了,真的有那么烂么……,看来还得继续努力才行,好早日实现我的游戏开发梦想。
2009-12-29 10:09:00
907
1
转载 反叛之冰:Internet Communications Engine
撰文:马维达Marc Laukien:Object-Oriented Concepts, Inc的创办人和总裁。开放源码的ORBacus (原名OmniBroker,完全遵从CORBA的ORBA)的主要作者。在2001年IONA(著名的CORBA技术公司)收购OOC之后,他出任IONA负责CORBA开发的副总裁……Michi Henning:IONA公司前首席CORBA科学家。CORBA编程的
2009-12-29 10:07:00
662
翻译 Boost中的Exception介绍
动机 在我们的项目中,可能会定义各种不同的异常,往往会遇到这种问题。比如:需要捕捉一个读取文件失败的异常 catch( file_read_error & e ){ std::cerr << e.file_name();}而我们的实现代码可能是这样的void read_file( FILE * f ){
2009-12-29 09:59:00
1511
原创 好久没回来了
偶然间突然发现,早在3年前的,我自己的技术博客,也就是这里。也发现我已经有快3年没有更新过了。虽然这3年我技术也进步了,但始终没有一个地方记录了自己点滴的进步,实在可惜。 我决定了!重新开始在这里记录下自己的文字!我的博客,重新开张了!
2009-12-29 09:29:00
442
原创 设计模式学习笔记(二十五)——Visitor访问者
二十三、Visitor(访问者)情景举例:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。代码示例:/* 被访问类的父类,注意其中虚拟函数Accept是提供给访问者的接口*/class Equipment {public: virtual ~Equipment(); const char
2007-04-29 09:02:00
685
原创 设计模式学习笔记(二十四)——Template Method模板方法
二十二、Template Method(模板方法)情景举例:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。代码示例:/* 父类*/class View {public: void Display(); void SetFocus(); virtual void DoDi
2007-04-29 09:00:00
570
原创 设计模式学习笔记(二十三)——Strategy策略
二十一、Strategy(策略)情景举例:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。代码示例:/* 使用Strategy的类(ok,客户)*/class Composition {public: Composition(Compositor*); void Repair();p
2007-04-29 08:58:00
630
原创 设计模式学习笔记(二十二)——State状态
二十、State(状态)情景举例:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。代码示例:/* TCPOctetStream类使用了State模式,它包含一个TCPState类*/class TCPOctetStream;class TCPState; class TCPConnection {public: TCPCon
2007-04-29 08:55:00
694
原创 设计模式学习笔记(二十一)——Observer观察者
十九、Observer(观察者)情景举例:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。代码示例:/* 观察者的抽象父类。注意:Update是一个模板方法*/class Observer {public: virtual ~ Observer(); virtual void Update(S
2007-04-29 08:54:00
722
原创 设计模式学习笔记(二十)——Memento备忘录
十八、Memento(备忘录)情景举例:捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。代码示例:class Graphic; // base class for graphical objects in the graphical editor/* 原发器的接口。注意:这是个Singleton模式*/class
2007-04-29 08:53:00
658
原创 设计模式学习笔记(十九)——Mediator中介者
十七、Mediator(中介者)情景举例:用一个中介对象来封装一系列的对象交互。代码示例:/* Mediator抽象父类*/class DialogDirector {public: virtual ~DialogDirector(); virtual void ShowDialog(); virtual void WidgetCha
2007-04-29 08:51:00
718
原创 设计模式学习笔记(十八)——Iterator迭代器
十六、Iterator(迭代器)情景举例:提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。代码示例:/* List的抽象父类*/template class List {public: List(long size = DEFAULT_LIST_CAPACITY);/**/ Iterator* CreateIt
2007-04-29 08:50:00
747
原创 设计模式学习笔记(十七)——Interpreter解释器
十五、Interpreter(解释器)情景举例:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。代码示例:/* 该例子以布尔表达式的文法为例,文法如下:BooleanExp = VariableExp|Constant|OrExp|AndExp|NotExp|’(BooleanExp)’AndExp = BooleanExp
2007-04-29 08:48:00
696
原创 设计模式学习笔记(十六)——Command命令
十四、Command(命令)情景举例:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。代码示例:/* 命令的公共父类:只定义了一个Execute纯虚函数。*/class Command {public: virtual ~Command(); virtual void Execu
2007-04-29 08:47:00
699
原创 设计模式学习笔记(十五)——Chain Of Responsibility职责链
十三、Chain Of Responsibility(职责链)情景举例:将对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。代码示例:/* 所有链上对象的抽象父类* 注意:私有成员函数中有个变量指向后继对象,并在构造函数中初始化这个对象*/typedef int Topic;const Topic NO_HELP_TOPIC = -1; cl
2007-04-29 08:46:00
594
原创 空对象——对Null的代替
出差!出差!出差!没完没了的出差!害得我blog也不能常常更新了,看样子我是要考虑换个工作了。不过出差也不是一无是处的,在出差的这段时间里终于抽空把Martin的重构看完了。对于其中空对象的用法,倒是令本人感触颇深,故一回上海就立刻记录在此。空对象,顾名思义就是什么也没有的对象。先看一段代码就明白了。if(systemdata == Null) thetime = systemda
2007-04-10 09:52:00
867
原创 设计模式学习笔记(十四)——结构型模式总结
结构型模式总结1、Adapter与Bridge:共同点:它们都给另一对象提供了一定程度上的间接性,有利于系统的灵活。都涉及到从自身以外的一个接口向这个对象转发请求。不同点:Adapter模式主要考虑2个已有接口不匹配的问题,它完全不考虑接口的实现,也不考虑它们各自如何演化。Adapter模式在类已经设计好以后实施。Bridge模式则对抽象接口与它的(可能是多个)实现部分进行桥接,使得你
2007-02-08 10:38:00
708
原创 设计模式学习笔记(十三)——Proxy代理
十二、Proxy(代理)情景举例:为其他对象提供一种代理以控制对这个对象的访问。四种常见情况:(1)远程代理(2)虚代理(3)保护代理(4)智能指针代码示例:/* 这个例子是虚代理的例子。*//* 代理类与实际类公共接口*/class Graphic {public: virtual ~Graphic();/**/ virtual
2007-02-08 10:35:00
675
原创 设计模式学习笔记(十二)——Flyweight享元
十一、Flyweight(享元)情景举例:运用共享技术有效地支持大量细粒度的对象。代码示例:/* Flyweight抽象类。其操作中的GlyphContext下文会介绍*/class Glyph {public: virtual ~Glyph(); virtual void Draw(Window*, GlyphContext&);/*
2007-02-08 10:34:00
707
原创 设计模式学习笔记(十一)——Facade外观
十、Facade(外观)情景举例:为子系统中的一组接口提供一个一致的界面代码示例:/* 系统中各种类*/class Scanner ;class Parser ;class ProgramNodeBuilder ;class ProgramNode ;class CodeGenerator ;class ExpressionNode : public P
2007-02-08 10:32:00
491
原创 设计模式学习笔记(十)——Decorator装饰
九、Decorator(装饰)情景举例:动态地给一个对象添加一些额外的职责。代码示例:/* 装饰与待装饰类共同的抽象类*/class VisualComponent {public: VisualComponent(); virtual void Draw(); virtual void Resize(); // ...
2007-02-08 10:30:00
544
原创 设计模式学习笔记(九)——Composite组成
八、Composite(组成)情景举例:将对象组合成树形结构以表示“部分-整体”的层次结构。代码示例:/* 最关键的抽象类,涵盖了叶子与容器的接口*/class Equipment {public: virtual ~Equipment(); const char* Name() { return _name; }/**/ v
2007-02-08 10:29:00
551
原创 设计模式学习笔记(八)——Bridge桥接
七、Bridge(桥接)情景举例:将抽象部分与它的实现部分分离,使它们都可以独立地变化。代码示例:/* 抽象部分的接口*/class Window {public: Window(View* contents); // requests handled by window virtual void DrawContents();/
2007-02-08 10:26:00
558
原创 设计模式学习笔记(七)——Adapter适配器
六、Adapter(适配器)情景举例:解决类之间由于接口不匹配而不能复用的情况。代码示例:/* 目标类*/class Shape {public: Shape(); virtual void BoundingBox( Point& bottomLeft, Point& topRight ) const; virt
2007-02-08 10:24:00
541
原创 设计模式学习笔记(六)——创建型模式总结
创建型模式主要分为2种,一种是生成创建对象的类的子类的方法,对应于Factory Method模式,其优点是简单,相对于其他模式需要新的类,它只需要新的操作即可。人们通常将Factory Method作为一种标准的创建对象的方法。但这种方法的主要缺点是:仅仅为了改变产品类,就需要创建一个新的子类。最终造成子类庞大而无法管理。 另一种方法是定义一个对象负责明确产品对象的类,并将其作为
2007-02-08 10:18:00
856
原创 设计模式学习笔记(五)——Singleton单件
五、Singleton(单件)情景举例:保证仅有一个迷宫工厂的实例。代码示例:/* 注意静态函数和静态变量,它们实现了单件 构造函数设为protected以供子类访问,若没有子类可以设为private*/class MazeFactory {public: static MazeFactory* Instance(); // exist
2007-02-08 10:17:00
559
原创 设计模式学习笔记(四)——Prototype原型
四、Prototype(原型)情景举例:创建一个可重用的建造迷宫程序。代码示例:/* 原型工厂继承自抽象工厂类*/class MazePrototypeFactory : public MazeFactory {public: MazePrototypeFactory(Maze*, Wall*, Room*, Door*);/**/ virt
2007-02-08 10:16:00
615
原创 设计模式学习笔记(三)——Factory Method工厂方法
三、Factory Method(工厂方法)情景举例:创建一个可重用的建造迷宫程序。代码示例:class MazeGame {public: Maze* CreateMaze();/**/// 以下4个方法为工厂方法:/**/ virtual Maze* MakeMaze() const { return new Maz
2007-02-08 10:13:00
545
原创 设计模式学习笔记(二)——Build生成器
二、Build(生成器)情景举例:创建一个可重用的建造迷宫程序。代码示例:/* 用非抽象类来让客户只定义自己感兴趣的操作*/class MazeBuilder {public: virtual void BuildMaze() { } virtual void BuildRoom(int room) { } virtual void Bui
2007-02-08 09:46:00
631
原创 设计模式学习笔记(一)——Abstract Factory抽象工厂
终于读完了四人组的设计模式,感觉仍有很多地方不理解。果然不是读一次就完全理解的,这里写下一点笔记,整理一下心得,方便以后查阅。笔记主要以代码为主,并结合设计模式迷你手册一同查阅。(设计模式迷你手册中的代码完全照抄四人组的设计模式,但完全不加任何注释,看的晕晕的。)一、Abstract Factory(抽象工厂)情景举例:创建一个可重用的建造迷宫程序。代码示例:c
2007-02-08 09:33:00
634
原创 C++内存泄漏的处理
出差了一个月,回来看看发现自己的blog已经好久没有更新了,想想还真是荒废呀。这个月中,唯一值得写写的就是帮主管解决了一个内存泄漏的小问题。C++中本身就有检查内存泄漏的机制,就是CMemoryState类,网上以CMemoryState为关键字,肯定能找到不少关于检查内存泄漏和内存调试的文章,我自信肯定没有那些作者写的更好,就不多说了。好,那现在假设已经发现确实有内存泄漏,那究竟怎么
2006-11-06 09:23:00
798
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人