打印本文 打印本文 关闭窗口 关闭窗口
开发一个基于DCOM的局域网聊天室(一)
作者:武汉SEO闵涛  文章来源:敏韬网  点击数1720  更新时间:2009/4/23 18:35:38  文章录入:mintao  责任编辑:mintao

 while TempRoom.Locked do

 begin

  //do nothing只是等待解锁

 end;

 TempRoom.OneSpeak(content);

end;

 

function TChatManager.ReadReady(id: Integer): Byte;

var

 TempRoom:TChatRoom;

begin

 TempRoom:=ChatRoomManager.FindRoomByID(id);

 if TempRoom.CanRead then result:=1 else Result:=0;

end;

 

procedure TChatManager.ConnectRoom(const UserName: WideString;

  RoomID: Integer);

//客户端通过接口登陆到指定的房间,没有完全实现

var

 TempRoom:TChatRoom;

begin

 TempRoom:=ChatRoomManager.FindRoomByID(RoomID);

 TempRoom.LoginRoom(UserName);

end;

 

procedure TChatManager.DisconnectRoom(const UserName: WideString;

  RoomID: Integer);

//客户端通过接口离开指定的房间,没有完全实现

var

 TempRoom:TChatRoom;

begin

 TempRoom:=ChatRoomManager.FindRoomByID(RoomID);

 TempRoom.LeaveRoom(UserName);

end;

 

function TChatManager.TestClearBufferTag(RoomID: Integer): Integer;

var

 TempRoom:TChatRoom;

begin

 TempRoom:=ChatRoomManager.FindRoomByID(RoomID);

 result:=TempRoom.ClearBufferTag;

end;

 

initialization

  TAutoObjectFactory.Create(ComServer, TChatManager, Class_ChatManager,

    ciMultiInstance, tmApartment);

end.

比较关键TchatRoom是下面的样子:

type

  TChatRoom=class

  private

   FBuffer:array[1..20] of string;

   FBufferLength:integer;

   FRoomName:string;

   FRoomID:integer;

   FLocked:boolean;//同步锁,用来处理多人同时发出对话的情况

   FConnectCount:integer;//当前房间的人数

   FClearBufferTag:integer;

   //每清空一次buffer此值便跳变一次,此脉冲被客户端检测

  protected

   procedure ClearBuffer;//清空缓冲区

   function GetCanRead:boolean;

  public

   constructor Create(RoomName:string;RoomID:integer);

   procedure OneSpeak(content:string);//将一条聊天内容加入缓冲区

   procedure LoginRoom(UserName:string);//参看实现部分注释

   procedure LeaveRoom(UserName:string);//参看实现部分注释

   function OneRead:Tstrings;//从缓冲区中读出记录

   property Locked:boolean read FLocked; //readonly;//供IChatManager检测

   property CanRead:boolean read GetCanRead;//判断缓冲区是否为空,否则是不可读的

   property ClearBufferTag:integer read FClearBufferTag;

  end;
(接后文)

上一页  [1] [2] 

打印本文 打印本文 关闭窗口 关闭窗口