• 网络学院
  • IT资讯
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
开发基于DCOM的局域网聊天室(二)
  站点:
  • 首 页
  • 最新软件
  • 文章教程
  • 国内软件
  • 国外软件
  • 绿色软件
  • 源码下载
  • 字体下载
开发基于DCOM的局域网聊天室(二)
软件发布 开发基于DCOM的局域网聊天室(二)
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件 绿软下载
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回文章教程首页 >> 编程技术 >> Delphi教程 >> 开发基于DCOM的局域网聊天室(二)

开发基于DCOM的局域网聊天室(二)

添加时间: 2006-2-28 7:19:18  作者: Delphi教程  阅读次数:51   来源: http://www.d9soft.com

       

  TchatRoom的实现:
  
  { TChatRoom }
  
  constructor TChatRoom.Create(RoomName:string;RoomID:integer);
  
  begin
  
   FBufferLength:=0;
  
   FConnectCount:=0;
  
   FClearBufferTag:=1;
  
   FLocked:=false;
  
   FRoomName:=RoomName;
  
   FRoomID:=RoomID;
  
  end;
  
  procedure TChatRoom.ClearBuffer;
  
  var
  
   i:integer;
  
  begin
  
   ///在这里可以检测一个标志,判断是否需要服务器记录每一次聊天内容
  
   for i:=1 to 20 do
  
   FBuffer[i]:='';
  
   FBufferLength:=0;
  
   FClearBufferTag:=0-FClearBufferTag;
  
  end;
  
  procedure TChatRoom.OneSpeak(content:string);
  
  begin

   FLocked:=true;
  
   inc(FBufferLength);

   if FBufferLength>20 then
  
   begin
  
   ClearBuffer;
  
   inc(FBufferLength);
  
   end;
  
   FBuffer[FBufferLength]:=content;
  
   FLocked:=false;
  
  end;
  
  function TChatRoom.OneRead:TStrings;
  
  var
  
   FStrings:TStrings;
  
   i:integer;
  
  begin
  
   FLocked:=true;
  
   FStrings:=TStringList.Create;
  
   for i:=1 to FBufferLength do
  
   FStrings.Add(FBuffer[i]);
  
   result:=FStrings;
  
   FLocked:=false;
  
  end;
  
  function TChatRoom.GetCanRead: boolean;
  
  begin
  
   result:=false;
  
   if FBufferLength>0 then result:=true;
  
  end;

  procedure TChatRoom.LoginRoom(UserName:string);
  
  //用户登陆聊天室事件,这里没有完全实现
  
  begin
  
   inc(FConnectCount);
  
  end;
  
  procedure TChatRoom.LeaveRoom(UserName: string);
  
  //用户离开聊天室事件,这里没有完全实现
  
  begin
  
   Dec(FConnectCount);

  end;
  
  服务器端的最后一个比较重要的部分TchatRoomManager:
  
  type
  
   TChatRoomManager=class
  
   private
  
   ChatRoom:array of TChatRoom;
  
   public
  
   constructor Create;
  
   function FindRoomByID(id:integer):TChatRoom;
  
   end;
  
  实现部分:
  
  { TChatRoomManager }
  
  constructor TChatRoomManager.Create;
  
  var
  
   i,RoomCount:integer;

   RoomNames:TStrings;//RoomName是配置文件中的聊天室名称
  
  begin
  
   RoomCount:=1;
  
   //这里将从配置文件中读出有几个聊天室
  
   RoomNames:=TStringList.Create;
  
   RoomNames.Add('TestRoom');//这句将被最终的从配置文件读取替换掉
  
   setlength(ChatRoom,RoomCount);
  
   for i:=1 to RoomCount do
  
   ChatRoom[i]:=TChatRoom.Create(RoomNames[i-1],i);

  end;
  
  function TChatRoomManager.FindRoomByID(id:integer): TChatRoom;
  
  //该函数由IChatManager接口调用,由于最终版本的接口将会提供给客户
  
  //端得到房间列表的功能,所以客户端知道自己房间的id
  
  begin
  
   result:=ChatRoom[id];
  
  end;
  
  initialization
  
   ChatRoomManager:=TChatRoomManager.Create;
  
  end.
  
  在服务器端的主要核心部分完成以后,我们配置好服务器端的DCOM配置,就可以开发一个简单的客户端进行测试了:(虽然客户端尽可能的简单,我们不用配置DCOM但我们仍需要拷贝服务器端的类型库文件.tlb到客户端并注册后才能开发和使用客户端,当然,这些都可以通过安装程序来完成)
  
  在客户端我们只列出两个相对重要的函数,其余的都省略,请想我来信获得全部的程序:
  
  procedure TForm1.Button1Click(Sender: TObject);

  //点击button1后将edit的内容“说”出去
  
  begin
  
   Server.SpeakTo(edit1.Text,1);
  
  end;
  
  procedure TForm1.Timer1Timer(Sender: TObject);
  
  //每隔一段时间向服务器请求谈话内容,我设置了为1.5秒
  
  var
  
   TempStrings:TStrings;
  
   i:integer;
  
  begin
  
   if Server.ReadReady(1)=1 then
  
   begin
  
   TempStrings:=TStringList.Create;
  
   SetOleStrings(TempStrings,Server.ReadFrom(1));
  
   if FReadStartPos>19 then
  
   if (FClearBufferTag=0-Server.TestClearBufferTag(1)) then
  
   begin
  
   FReadStartPos:=0;
  
   FClearBufferTag:=Server.TestClearBufferTag(1);
  
   end;
  
   for i:=FReadStartPos to TempStrings.Count-1 do
  
   Memo1.Lines.Add(TempStrings[i]);
  
   FReadStartPos:=TempStrings.Count;
  
   end;
  
  end;
  
  一个基于DCOM的局域网聊天室的核心部分就基本完成了,并且所有的测试都比较顺利,这里需要补充说明一下聊天室服务器的一个难点:就是需要开发者非常谨慎的处理同步,虽然我也进行了一定的同步处理,但在客户端人数众多的情况下仍然可能发生死锁或其它活锁的情况,这个程序还需要更进一步的测试、甚至进行一定的重构。尽请关注后文。

 

上下文章:

 

上一篇文章: 用Delphi实现StringTokenizer功能 下一篇文章: 开发基于DCOM的局域网聊天室(一)

相关文章:

  • 技巧:用Photoshop开发网站的思路
  • 见证浩辰二次开发技术新变革
  • 雅虎停止开发Vsita专用版即时通讯软件
  • 雅虎下周推开发者平台吸引流量
  • 不是QQ好友 却能聊天的小秘密

相关软件:

  • QQSniffer(QQ聊天记录器) 1.0.0.1
  • QQ自动聊天器 2008 国庆特别版
  • QQTab(QQ多标签聊天工具) 1.5
  • hoho聊天软件 V0.99
  • TCP/UDP应用开发调试助手 V3.0
  • QQ语音聊天王 V2006

 

快速导航

  • 网络学院
  • 精品汇聚
  • 字体下载
  • 教程下载
  • ASP源码
  • PHP源码
  • Net源码
  • JSP 源码

编程技术分类导航

  • ASP & ASP.NET教程
  • PHP教程
  • JSP教程
  • C/C++教程
  • VB & VB.NET教程
  • VC教程
  • Delphi教程
  • BCB教程
  • VFP教程
  • PB教程
  • JAVA教程
  • XML教程
  • C#教程
  • CGI教程

本类经典文章推荐

  • Delphi的两个实用技巧(1)播放Flash
  • Delphi的两个实用技巧(2)巧用Wind...
  • delphi实例编程之--制作可随处拖放...
  • 关于VisiBroker For Delphi的使用...
  • 关于VisiBroker For Delphi的使用...
  • 关于VisiBroker For Delphi的使用...
  • 在线播放器DIY
  • Delphi让你发送Flash电子邮件
  • 在窗口标题区添加按钮
  • 用Delphi 6编程实现自动标注汉语拼...

Delphi教程阅读排行

  • Delphi7从入门到精通之历数Delphi...
  • Delphi的两个实用技巧(1)播放Flash
  • Delphi7从入门到精通之认识Delphi...
  • delphi实例编程之--制作可随处拖放...
  • Delphi控件,我们也可以(1)
  • Delphi的两个实用技巧(2)巧用Wind...
  • Spcomm串口控件的例程
  • 在线播放器DIY
  • Delphi控件,我们也可以(2)
  • 用Delphi + DirectX开发简单RPG游...

编程技术阅读总排行

  • VB入门教程之一
  • Java连接数据库实例
  • VC++之List Box/Check List Box控...
  • 第二章 PowerBuilder 入门之创建新...
  • VC++ List Ctrl控件
  • 第一章 什么是PowerBuilder
  • VC++ Combo Box/Combo Box Ex控件
  • 学C++不得不看的一篇文章
  • VB入门教程之二
  • VC++之Button控件

广告位置

字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

copyright; 2005-2008 D9soft.com 第九软件网 版权所有