自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(7369)
  • 收藏
  • 关注

原创 RemObject解决自动生成代码的想法.

               用过DELPHI写过多层框架的,可能能RemObject比较熟悉. RemObjects Service Builder 自动生成代码的同时,也给我们带来困扰. 每个类都要定义在intf文件里, 接口只有一个, 这些显然对我们开发系统来讲, 支持的不够, 我想使用多个接口,也不想没完没了的定义结构.              前一段时间写了一个自动生成元数据的小工

2008-06-10 12:52:00 2524 13

原创 远程调用技术代码追踪(webservice)

 最近阅读了SocketConn的源码和WebService 的源码,把追踪的过程写了下来,方便大家学习。毕竟这需要精力,时间和毅力。感谢煮茶待英雄博志区和三层数据库讨论区兄弟们的支持,特别是julian兄弟,不是他,我可能没耐心继续下去。如果有时间,大家可以继续完善。从socket和Websevice的底层实现细节,我们发现BORLAND的工程师们的构思和实现的过程。我觉得这对我们的学习应该

2008-06-10 12:52:00 3049 2

原创 远程调用技术代码追踪(Remobjects第三方控件)

   远程调用技术内幕在前面我已经分析了socket和webservice的代码追踪。现在总结一下:三层架构的运作模型:1. BizSnap与.NET Remoting 的Server端运作模式  当Client 将Request 送达Server端后,会经过一个Message Dispatcher机制,这个机制大多是几个重要的组件合作完成,主要在于解出Request中对于所要求对象的描述,以

2008-06-10 12:52:00 2584 1

原创 远程调用技术代码追踪(socket)

  远程调用技术内幕聊聊远程调用的相应技术。微软的模型是rpc, DCOM的封包就是OleVariant型的。经常听到有人说OleVariant的效率不高,其实MIDAS就是采用这种封包的。有人问方法的调用,秘密都在IAppServer这个接口里。 客户端要想调用服务器端的方法是需要代理DLL,和存根DLL的。具体的可以参考COM原理。进程内的就不说了,因为同一个地址空间,它可以通过指针去访问

2008-06-10 12:52:00 2498

原创 Overlapped模型深入分析(原理篇)

  Overlapped I/O模型深入分析简述:     Overlapped I/O也称Asynchronous  I/O,异步I/O模型。异步I/O和同步I/O不同,同步I/O时,程序被挂起,一直到I/O处理完,程序才能获得控制。异步I/O,调用一个函数告诉OS,进行I/O操作,不等I/O结束就立即返回,继续程序执行,操作系统完成I/O之后,通知消息给你。Overlapped I/O只是

2008-06-10 12:52:00 2291 1

原创 传奇源码分析-客户端(全局变量与总体执行流程)

  客户端:传奇的客户端源代码有两个工程,WindHorn和Mir2Ex。先剖析一下WindHorn工程。1.CWHApp、CWHWindow和CWHDXGraphicWindow。Window程序窗口的创建。          CWHApp派生CWHWindow,CWHWindow又派生CWHDXGraphicWindow。CWHWindow类           中完成窗口的注册和创建。C

2008-06-10 12:51:00 3080 1

原创 传奇源码分析-客户端(WindHorn简述和传奇文件格式分析)

   DirectX类库分析(WindHorn): 1.     RegHandler.cpp 注册表访问(读写)。2.     CWHApp派生CWHWindow,CWHWindow完成窗口的注册和创建。CWHWindow派生出CWHDXGraphicWindow,CWHDXGraphicWindow调用CWHWindow完成创建窗口功能,然后再调用CreateDXG()来初始化Direct

2008-06-10 12:51:00 2490

原创 传奇源码分析-序言

 简述:     最近对高性能的服务器比较感兴趣,读过了DELPHI的Socker源码WebService及RemObject之后,高性能的服务器感兴趣。你可能需要的以下知识才能更好的读懂一个商业源码:1).SOCKET的I/O模型熟悉掌握。2).面向对象技术的熟悉掌握。3).Socket的API掌握。4).多线程技术等。5).一门熟悉的开发工具掌握,和多种语言的源码阅读能力。 我下的源码 L

2008-06-10 12:51:00 2918 2

原创 水滴石穿C语言之可变参数问题

作者: 楚云风   C语言中有一种长度不确定的参数,形如:"…",它主要用在参数个数不确定的函数中,我们最容易想到的例子是printf函数。  原型:int printf( const char *format [, argument]... );使用例:printf("Enjoy yourself

2008-06-10 12:51:00 1587

原创 高性能网站性能优化

从LiveJournal后台发展看大规模网站性能优化方法于敦德 2006-3-16一、LiveJournal发展历程LiveJournal是99年始于校园中的项目,几个人出于爱好做了这样一个应用,以实现以下功能: 博客,论坛 社会性网络,找到朋友 聚合,把朋友的文章聚合在一起 LiveJournal采用了大量的开源软件,甚至它本身也是一个开源软件。在上线后,LiveJou

2008-06-10 12:51:00 1706

原创 传奇源码分析-服务器端(LoginSvr服务器分析)

   LoginSvr服务器g_gcSock Local    5500端口1.首先从LoginSvr.cpp  WinMain分析:   1) CheckAvailableIOCP : 检查是不是NT,2000的系统(IOCP)   2) InitInstance: 初始化界面,加载WSAStartup       GetDBManager()->Init( InsertLogMsg, "M

2008-06-10 12:50:00 2713

原创 传奇源码分析-服务器端(LoginGate服务器处理)

    LoginGate服务器服务器端: 1.首先从LoginGate.cpp WinMain分析:    1) CheckAvailableIOCP : 检查是不是NT,2000的系统(IOCP)    2) InitInstance: 初始化界面,加载WSAStartup3)  MainWndProc窗口回调函数.2.MainWndProc.CPP中分析回调函数MainWndProcsw

2008-06-10 12:50:00 2462 1

原创 传奇源码分析-客户端(游戏逻辑处理源分析一)

  登录处理事件:0.WinMain主函数调用g_xLoginProc.Load();加载图片等初始化,设置g_bProcState 的状态。1.CLoginProcess::OnKeyDown-> m_xLogin.OnKeyDown->g_xClientSocket.OnLogin;WSAAsyncSelect模型ID_SOCKCLIENT_EVENT_MSG,因此,(登录,角色选择,游戏

2008-06-10 12:50:00 2358

原创 传奇源码分析-客户端(传奇2和3 文件格式分析比较)

         贴这个贴子,希望大家少走弯路。网上下载的那个版本应该是从传奇2改的,传奇3的格式。分析一下源码吧,g_xLoginProc.Load(); 之后就加载m_Image.NewLoad(IMAGE_INTERFACE_1, TRUE, TRUE);     继续读Wix文件,    ReadFile(hWixFile, &m_stNewWixImgaeInfo, sizeof(N

2008-06-10 12:50:00 3138 2

原创 传奇源码分析-客户端(传奇2文件格式分析)

  传奇文件类型格式探讨(一):Wix文件:索引文件,根据索引查找到相应数据地址(数据文件)。// WIX 文件头格式 typedef struct tagWIXFILEIMAGEINFO{    CHAR    szTmp[40];     // 库文件标题 WEMADE Entertainment inc. WIL文件头    INT     nIndexCount;   // 图片数

2008-06-10 12:50:00 2501

原创 传奇源码分析-服务器端(SelGate服务器分析)

  SelGate服务器注:客户端从LoginSvr服务器得到SelGate服务器IP之后,连接SelGate服务器,进行角色创建,删除,选择操作,然后发送数据到DBSrv服务器。g_ssock  Local    7100客户端登陆端口g_csock Remote   5100发送到DBSrv服务器上的套接字 1.首先从SelGate.cpp WinMain分析:    1) CheckAv

2008-06-10 12:49:00 1894 1

原创 传奇源码分析-客户端(游戏逻辑处理源分析五 服务器端响应)

 游戏服务器执行流程:(玩家走动)    GameSrv服务器ProcessUserHuman线程处理玩家消息:遍历UserInfoList列表,依次调用每个UserInfo的Operate来处理命令队列中的所有操作; pUserInfo->Operate()调用m_pxPlayerObject->Operate()调用。判断玩家if (!m_fIsDead),如果已死,则发送_MSG_FAI

2008-06-10 12:49:00 1926

原创 传奇源码分析-客户端(游戏逻辑处理源分析四)

  现在假设玩家开始操作游戏:传奇的客户端源代码工程WindHorn一、CWHApp派生CWHWindow和CWHDXGraphicWindow。二、CWHDefProcess派生出CloginProcess、CcharacterProcess、CgameProcess客户端WinMain调用CWHDXGraphicWindow g_xMainWnd;创建一个窗口。客户端CWHDXGraphi

2008-06-10 12:49:00 1950

原创 传奇源码分析-客户端(游戏逻辑处理源分析三)

  6. 接收怪物,商人,其它玩家的消息:ProcessUserHuman:(其它玩家—服务器处理)CPlayerObject->SearchViewRange();CPlayerObject->Operate();遍历UserInfoList列表,依次调用每个UserInfo的Operate来处理命令队列中的所有操作; pUserInfo->Operate()调用m_pxPlayerObje

2008-06-10 12:49:00 2702

原创 传奇源码分析-客户端(游戏逻辑处理源分析二)

  5.接受登录成功后,接收GameSrv服务器发送的消息:接收GameGate发送的消息:CClientSocket::OnSocketMessage的FD_READ事件中,PacketQ.PushQ((BYTE*)pszPacket);把接收到的消息,压入PacketQ队列中。处理PacketQ队列数据是由CGameProcess::Load()时调用OnTimer在CGameProces

2008-06-10 12:49:00 2256 2

原创 QQ头像变灰算法[图]

1.查看QQ不在线图标,目测由白灰黑,三种颜色.2.打开画图工具,查看了灰色的RGB......惊喜.......原来灰色的RGB 3个参数多是相同的.3.所以推断每个不在线头像的像素是在线头像R G B 的平均值.   网友"string"给了个比较专业的公式(R*0.299 + G*0.587 + B*0.114 )4.操作:取得一个像数,然后取得R ,G ,B,计算平均,然后将平均值设置

2008-06-10 12:48:00 2110 3

原创 字符集之间转换(UTF-8,UNICODE,Gb2312)

字符集之间转换(UTF-8,UNICODE,Gb2312)特搜集了UTF-8,UNICODE,Gb2312他们3个之间的相互转换.UTF-8:   3字节一个字符UNICODE: 2字节一个字符GB2312:  1字节一个字符例子:“你”字的UTF-8编码: E4 BD A0        11100100 10111101 10100000“你”的Unicode编码: 4F 60      

2008-06-10 12:48:00 1870 2

原创 实现QQ主界面效果[图]

实现QQ主界面的滚动效果[图]1. GC实现QQ的主界面截图2.实现方法最主要的计算各个组和头像的位置信息,有了位置信息,画图就很方便了.(画图请参考本专栏其他文章)2.1 一些概念: 项 : 组和头像,如果组合并,那么这个组只有组1项,如果展开那么 组+ 组成员的个数m_scrollIndex : 滚动了几个项(滚动时计算)m_scrollY : 实际滚动的像数(通过m_scrollInde

2008-06-10 12:48:00 1129

原创 GDI画图的几种方式(小游戏不闪烁)

1 画图方式:   1.1 使用临时DC,先将要画的界面全部画到临时DC,到最后才全部帖回原DC,这样就不会出现闪烁.   1.2 创建的GDI对象要删除,不然会造成泄露.        将新对象选进DC,一般要保留旧的对象,然后用完新对象,把老对象选回DC.        一般Create*** 函数多要记得Delete***            GetDC             Rel

2008-06-10 12:48:00 1231

原创 RichEdit中插入GIF动画(使用QQ的ImageOle.dll)

    最近做聊天记录,需要显示GIF动画.看了很多文章,基本多是用QQ的ImageOle.dll或者Gif89a.dll来实现.当然还有其他方法,包括Static控件中使用CPictureEx来实现GIF.     ImageOle.dll使用了GdiPlus.dll,制作安装包时最好把这个dll也带上( XP系统自带)(本文的代码来自其他网友)参考a: http://www.codepro

2008-06-10 12:48:00 1423

原创 进程调试--数组溢出,影响其他变量

       一直做的棋牌系统,调试是个问题,因为要启动的是另一个进程.所以一直多是以输出文件的方式来进行的.确实有些BUG输出文件的方式并不能解决和找到问题.        我先来描述一下碰到的问题: 其中一个int  m_nSize变量一般只有两个值(0或者1),在运行过程过突然变成-1,所以造成图片数组导入异常.问题的关键是为什么变量会变?查找了所有的m_nSize调用的地方,并且是N遍

2008-06-10 12:47:00 769

原创 窗口淡入淡出效果的实现

1. 简介函数: SetLayeredWindowAttributes  Header Declared in Winuser.h, include Windows.h Import library User32.lib

2008-06-10 12:47:00 858

原创 DLL(Dynamic Link Libraries)专题[转帖]

原帖地址:http://www.microsoft.com/china/community/program/originalarticles/techdoc/dll.mspxDLL(Dynamic Link Libraries)专题目录 引言 调用方式 MFC中的DLL DLL入口函数 关于约定 关于DLL的函数 模块定义文件(.DEF)

2008-06-10 12:47:00 776

原创 如何调试MFC中的内存泄漏[转帖]

首先,应该是MFC报告我们发现内存泄漏。注意:要多运行几次,以确定输出的内容不变,特别是{}之间的数值,不能变,否则下面的方法就不好用了。        我们来看看:F:/CodeSample/Test/TestPipe/LeakTest/MainFrm.cpp(54) : {86} normal block at 0x00422E80, 10 bytes long. Data:       

2008-06-10 12:47:00 755

原创 图片镂空算法集合[图]

在开发界面及棋牌游戏过程中,需要很多镂空的图片,而且图片形式一般比较固定.所以封装了几种常见的镂空方法.1. 用于没有掩码图,只有指定透明色,不进行伸缩void DrawTransBitmap( HDC hdcDest,            // 目标DC                                            int nXOriginDest,       /

2008-06-10 12:47:00 929

原创 游戏元素设计与当代艺术变迁

 商务时间 5月26日论当代艺术收藏到底是“蛋糕”还是“泡沫”当代艺术收藏家、投资家,选择古玩还是当代艺术? 申明: 本人非专业的游戏策划,也不是专业的市场企划。只是有一颗心,用心去做事,做一件不同感受的事情,只是我所追求的。审视一个事务的本质的同时,衍生到其它领域,这也许就是我理解的商机。本帖内容仅代表个人观点,如有雷同尽情谅解。以下目录结构内容,会在近期写在完成,尽情关注,谢谢。 目录1.

2008-06-10 12:46:00 796

原创 Python(私有变量)类中的特殊方法

原帖地址:http://www.devfront.com:8080/?q=node/199Python学习备忘录Wed, 2006-10-11 08:14 — Marchday类中的特殊方法一般说来,特殊的方法都被用来模仿某个行为。例如,如果你想要为你的类使用x[key]这样的索引操作(就像列表和元组一样),那么你只需要实现__getitem__()方法就可以了。想一下,Python就是对li

2008-06-10 12:46:00 1272

原创 《魔兽世界》任务系统体验

 开发网游也有一段时间了,大大小小的网络游戏倒是也看了不少,但是真正好好玩过的好象只有《天堂II》而已。有感于自己对于游戏知识的匮乏,一直在寻找一款值得一玩的游戏!正巧我的好朋友向我推荐WOW,想暴雪还从来没让我失望过,它出的东西是要玩一玩的。 我抱着一个慢慢玩,好好体验的心态进入了魔兽世界。我发现心态对于玩游戏也很重要,我总是听人们说大家玩网游图什么?好像就一下几种:等级高,成为超级英雄;拿到好

2008-06-10 12:46:00 933

原创 游戏特性构建-YY篇(1)无冬之夜特性设计整理

原帖地址:CSDN《无冬之夜2》设计师访谈http://gamedev.csdn.net/n/20060925/95284.html总结篇:可配置的个性界面(ro-online,可制造的:便于开展社区活动"界面秀")独有模型(模型的外形可调制,PS)来制造物品(着色、选择生物、属性)可编辑的区域脚本,全局脚本编辑(独立事件和对话)互助完成模式升华(主线任务接取与个人任务发布共享)如:接取的主线

2008-06-10 12:46:00 748

原创 解决移动硬盘符不见的问题

问题的出现:    今天拿到一台服务器,插上光驱,重新装了系统2003,C盘为FAT格式(GHOST恢复),而其他盘为NTFS格式,所以系统会提示是否转NTFS格式(选择了YES,重新启动自动转换格式).当用插入移动硬盘时,发现盘符不见了.问题的解决:     1.查看连接线是否有问题,或者电压不足.拿到本本上一切正常,排除了这个问题.    2.查看驱动是否正常工作.右键我的电脑->管理->

2008-06-10 12:46:00 1235

原创 事务日志回滚机制研究

摘要:  隔离级别的概念企业级的数据库每一秒钟都可能应付成千上万的并发访问,因而带来了并发控制的问题。由数据库理论可知,由于并发访问,在不可预料的时刻可能引发如下几个可以预料的问题:  脏读:包含未提交数据的读取。例如,事务1 更改了某行。事务2 在事务1 提交更改之前读取已更改的行。如果事务1 回滚更改,则事务2 便读取了逻辑上从未存在过的行。  不可重复读取:当某个事务不止一次读取同一

2008-06-10 12:45:00 933 1

原创 网络游戏性能测试一步曲:如何规划游戏产品性能测试(草稿)

 v/:* {behavior:url(#default#VML);}o/:* {behavior:url(#default#VML);}w/:* {behavior:url(#default#VML);}.shape {behavior:url(#default#VML);}Normal07.8 磅02falsefalsefalseMicrosoftInternetExplorer4st1/

2008-06-10 12:45:00 1040

原创 网络游戏性能测试五步曲(Link_近期持续更新)

 Normal07.8 磅02falsefalsefalseMicrosoftInternetExplorer4/* Style Definitions */table.MsoNormalTable{mso-style-name:普通表格;mso-tstyle-rowband-size:0;mso-tstyle-colband-size:0;mso-style-noshow:yes;mso-s

2008-06-10 12:45:00 880

原创 【摘抄】论创业者心态15问

面是那些应该解答的问题: 1)   你的眼光是什么?      *   你的远见是什么?      *   你要解决什么问题?对象是谁?      *   你将来想要成为什么样的人? 2)   你的市场机会是什么?市场有多大?      *   您目标的市场有多大?发展有多快?      *   这个市场有多成熟,或多不成熟?      *   你是否有资本成为这个市场前两三位? 3)   介

2008-06-10 12:45:00 875 1

原创 技术创新前瞻-特征码的音乐应用

昨日,有幸与大学好友重逢,在与其闲聊当中发现电信密谋的新业务,准备与Apple Iphone一较高低。此业务来缘于对特征码的应用,对特定事务特征进行搜索,一直以来是搜索工具的核心结构。但过多的文字搜搜已渐渐不能满足我们的生活需求,电信在未来2年密谋发布一款采用语音识别的音乐搜索系统。客户只需要通过麦克风,手机等音频获取工具,即可轻松搜索到自己想要的歌曲。这将是一个崭新的时代,我们一起设想这样的

2008-06-10 12:45:00 887 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除