📄 userverlst.~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 + -