⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 talkwithserver.pas

📁 使用delphi自带的控件
💻 PAS
字号:
unit TalkWithServer;

interface

uses
  CommonDef, MsgClient, SysUtils, Variants, Classes;

const
  StatusList: array[0..5] of String = ('脱机', '联线',
    '忙碌', '离开', '外出就餐', '就回来');

type
  TSvrResult = (srtOk, srtNotLogined, srtError,
    srtNoResponse, srtInvalidQuery, srtNotAllowed);
var
  MsgServer:string = '127.0.0.1';
  MsgServerPort:Integer = 10555;

procedure SendAddCorrManCommandToServer (var Res: TSvrResult;
  var CorrMan: TMyCorrMan);
procedure SendDelCorrManCommandToServer (var Res: TSvrResult;
  var CorrMan: TMyCorrMan);

procedure LoginToServer (var Res: TSvrResult; UserName: string;
  Password: string);
procedure LogoffFromServer (var Res: TSvrResult; UserName: string);

procedure GetCorrManListFromServer(var Res: TSvrResult; UserName: string;
  var Count: Integer; var List: array of TMyCorrMan; Size: Integer);


implementation

procedure SendAddCorrManCommandToServer (var Res: TSvrResult;
  var CorrMan: TMyCorrMan);
var
  Command: string;
  Result: TStringList;
begin
  Res := srtOk;
  CorrMan.UserTitle := ' ';
  CorrMan.EmailAddress := ' ';
  CorrMan.MessageCount := 0;
  CorrMan.Status := cnsOnline;

  //to send command to server
  Result := TStringList.Create;
  try
    Command := AddCorrMan + ' ' + CorrMan.UserName;
    dmeMsgClient.TalkWithServer(Command, Result);
    Res := srtNotLogined;
    if (Result.Count >= 1) then
    begin
      Res := srtOk;
    end;
  finally
    Result.Free;
  end;
end;


procedure SendDelCorrManCommandToServer (var Res: TSvrResult;
  var CorrMan: TMyCorrMan);
var
  Command: string;
  Result: TStringList;
begin
  Res := srtOk;

  //to send command to server
  Result := TStringList.Create;
  try
    Command := DelCorrMan + ' ' + CorrMan.UserName;
    dmeMsgClient.TalkWithServer(Command, Result);
    Res := srtNotLogined;
    if (Result.Count >= 1) then
    begin
      Res := srtOk;
    end;
  finally
    Result.Free;
  end;
end;


{******************************
先检查用户名是否为空,为空则退出
向服务器发送登录信息,并根据返回
结果判断是否成功登陆,并返回相应
的输出信息
******************************}
procedure LoginToServer (var Res: TSvrResult; UserName: string;
  Password: string);
var
  Command: string;
  Result: TStringList;
begin
  if (UserName = ' ') then
    Exit;

  //to connect the server
  //MsgServer := tcpMsgClient.
  dmeMsgClient.Connect(MsgServer, MsgServerPort);
  //to login the user
  Result := TStringList.Create;

  try
    Command := Login + ' ' + UserName + ' ' + Password;
    dmeMsgClient.TalkWithServer(Command, Result);
    Res := srtNotLogined;
    if (Result.Count >= 1) then
      if (Result.Strings[0] = LoginOk) then
        Res := srtOk;
  finally
    Result.Free;
  end;
end;



procedure LogoffFromServer (var Res: TSvrResult; UserName: string);
var
  Command: string;
  Result: TStringList;
begin
  if (UserName = ' ') then
    Exit;
  //to logoff from the server
  Result := TStringList.Create;
  try
    Command := Logoff + ' ' + UserName;
    dmeMsgClient.TalkWithServer(Command, Result);
    Res := srtNotLogined;
    if (Result.Count >= 1) then
      if (Result.Strings[0] = LogoffOk) then
        Res := srtOK;
  finally
    Result.Free;
  end;
end;


procedure GetCorrManListFromServer(var Res: TSvrResult; UserName: string;
  var Count: Integer; var List: array of TMyCorrMan; Size: Integer);
var
  Command: string;
  Result: TStringList;
  I: Integer;
  Line: string;
  DivPos: Integer;
begin
  if (UserName = ' ') then
    Exit;

  //to logoff from the server
  Result := TStringList.Create;
  try
    Command := GetCList + ' ' + UserName;
    dmeMsgClient.TalkWithServer(Command, Result);
    Count := 0;
    for I:=0 To Result.Count-1 do
    begin
      Line := Result.Strings[I];
      if (Line = GetCListError) then
      begin
        Res := srtError;
        Exit;
      end;
      if (Pos(GetCListOk, Line) = 1) then
      begin
        DivPos := Length(GetCListOk) + 1;
        DecodeCorrManPropertyLine(List[Count], Copy(Line, DivPos+1, Length(Line)-DivPos));
        Inc(Count);
        if (Count > Size-1) then
          Break;
      end;
    end;
    Res := srtOk;
  finally
    Result.Free;
  end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -