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

📄 userverlst.~pas

📁 采用ACM与Skype4Com并且采用分布式UDP来进行语音的拨号、分传。
💻 ~PAS
字号:
unit uServerLst;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, fcTreeView, ExtCtrls, ComCtrls, IdUDPServer, IdBaseComponent,
  IdComponent, IdUDPBase, IdUDPClient, StdCtrls,IdSocketHandle;
const
  //BUFF
  CST_MAXBUFF=10240;
type
  TfrmMain = class(TForm)
    pgc1: TPageControl;
    ts1: TTabSheet;
    pnl1: TPanel;
    idpsrvrLst: TIdUDPServer;
    ts2: TTabSheet;
    pnl2: TPanel;
    fcTreeView2: TfcTreeView;
    idpsrvrUser: TIdUDPServer;
    ts3: TTabSheet;
    lbl1: TLabel;
    edtServerLst: TEdit;
    lbl2: TLabel;
    edtUserLst: TEdit;
    btnServer: TButton;
    IdUDPClient1: TIdUDPClient;
    lst1: TListBox;
    procedure FormCreate(Sender: TObject);
    procedure idpsrvrLstUDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
    procedure btnServerClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmMain: TfrmMain;
  gLstPort,gUserPort:String;
implementation

uses uCommon;

{$R *.dfm}

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  gLstPort:=gcf_GetINIValue('SERVER','LSTPORT');
  edtServerLst.Text:=gLstPort;
  gUserPort:=gcf_GetINIValue('SERVER','USERPORT');
  edtUserLst.Text:=gUserPort;


  idpsrvrLst.Active:=False;
  idpsrvrLst.DefaultPort:=StrToIntDef(gLstPort,0);
  idpsrvrLst.Active:=True;

  lst1.Items.Clear;
end;

procedure TfrmMain.idpsrvrLstUDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var
  mData:array[1..CST_MAXBUFF] of char;
  iCount:integer;
  sInfo:String;
  fnode:TfcTreeNode;
begin
  for iCount := 1 to CST_MAXBUFF do    // Iterate
   begin
     mData[iCount]:=#0;
   end;
   AData.ReadBuffer(mData,AData.Size);

   for iCount := 1 to CST_MAXBUFF do
   begin
         sInfo:=sInfo+mData[iCount];
   end;

   sInfo:=Trim(sInfo);

   {
     idpclntLst.Active:=False;
                      idpclntLst.Host:=gsServerListHost;
                      idpclntLst.Port:=StrToIntDef(gsServerListPort,0);
                      idpclntLst.Active:=True;
                      idpclntLst.Send(DEF_BSEPCHAR + gComputerAddr +
                                        DEF_ESEPCHAR + DEF_LINKCHAR + DEF_BSEPCHAR +
                                        gComputerName  +
                                        DEF_ESEPCHAR + DEF_LINKCHAR + DEF_BSEPCHAR +
                                        '活动' +   DEF_ESEPCHAR  + DEF_LINKCHAR + DEF_BSEPCHAR +
                      gsLocalWordPort + DEF_ESEPCHAR);
                                        }


   if gcf_GetStrPosStr(sInfo,3)='登录' then
   begin
      lst1.Items.Add(sInfo);
   end else if  (gcf_GetStrPosStr(sInfo,3)='活动') or (gcf_GetStrPosStr(sInfo,3)='空闲') then
   begin
      for iCount:=0 to  lst1.Items.Count-1 do
      begin
         if gcf_GetStrPosStr(lst1.Items[iCount],1)=gcf_GetStrPosStr(sInfo,1) then
         begin
            lst1.Items[iCount]:=sInfo;
         end;
      end;
   end else if (gcf_GetStrPosStr(sInfo,3)='退出')  then
   begin
      for iCount:=0 to  lst1.Items.Count-1 do
      begin
         if gcf_GetStrPosStr(lst1.Items[iCount],1)=gcf_GetStrPosStr(sInfo,1) then
         begin
            lst1.Items.Delete(iCount);
         end;
      end;
   end else if gcf_GetStrPosStr(sInfo,4)='客户'  then
   begin
      //遍历树
      for iCount:=0 to lst1.Items.Count-1 do
      begin
         //查找到空闲服务器信息
         if (gcf_GetStrPosStr(lst1.Items[iCount],3)='空闲') or
         (gcf_GetStrPosStr(lst1.Items[iCount],3)='登录') then
         begin
           IdUDPClient1.Active:=False;
           IdUDPClient1.Host:=ABinding.PeerIP;
           IdUDPClient1.Port:=StrToIntDef(gcf_GetStrPosStr(sInfo,5),0);
           IdUDPClient1.Active:=True;

           //服务器的端口  IP
           IdUDPClient1.Send(DEF_BSEPCHAR + '返回' +  DEF_ESEPCHAR + DEF_LINKCHAR + DEF_BSEPCHAR +
            gcf_GetStrPosStr(lst1.Items[iCount],4) + DEF_ESEPCHAR + DEF_LINKCHAR + DEF_BSEPCHAR +
           gcf_GetStrPosStr(lst1.Items[iCount],1) +  DEF_ESEPCHAR);
         end;
      end;
   end;
end;

procedure TfrmMain.btnServerClick(Sender: TObject);
begin
  gLstPort:=edtServerLst.Text;
  gcf_SetINIValue('SERVER','LSTPORT',gLstPort);
  gUserPort:=edtUserLst.Text;
  gcf_SetINIValue('SERVER','USERPORT',gUserPort);
end;

end.

⌨️ 快捷键说明

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