📄 uservermain.~pas
字号:
//接收挂机命令
if (gcf_GetStrPosStr(sInfo,2)='FINISH')then
begin
fctrvwMain.Items.BeginUpdate;
if fctrvwMain.Items.FindNode(ABinding.PeerIP,False)<>nil then
fctrvwMain.Items.Delete(fctrvwMain.Items.FindNode(ABinding.PeerIP,False));
fctrvwMain.Items.EndUpdate;
//判断是否当前挂断的为拨打的用户。 -=SKYPE1=-
if (aSkype[1].csCurrentUserIP=ABinding.PeerIP) and (aSkype[1].Status<>clsFinished) and (aSkype[1].csCurrentCallNumber=gcf_GetStrPosStr(sInfo,1)) then
begin
ctlMain.Items[0].Enabled:=False;
//关闭输出流
WaveOutStream1.close;
//关闭输入流
WaveInStream1.close;
WaveOut1.close();
WaveIn1.close();
strngrdAll.Cells[0,1]:=idpsrvrMain.Binding.PeerIP;
strngrdAll.Cells[1,1]:=gcf_GetStrPosStr(sInfo,1);
strngrdAll.Cells[2,1]:=gcf_GetStrPosStr(sInfo,3);
strngrdAll.Cells[3,1]:=DateTimeToStr(Now);
strngrdAll.Cells[4,1]:='空闲';
aSkype[1].csCurrentCallNumber:='';
aSkype[1].csCurrentUserIP:='';
aSkype[1].csCurrentSessionID:='';
aSkype[1].csCurrentComputerName:='';
aSkype[1].csCurrentStatus:='空闲';
//设置客户端端口
idpclntMain.Active:=False;
idpclntMain.Port:=StrToIntDef(gsRemoteWordPort,0);
idpclntMain.Host:=idpsrvrMain.Binding.PeerIP;
idpclntMain.Active:=True;
idpclntMain.Send(DEF_BSEPCHAR + gsRateType +
DEF_ESEPCHAR + DEF_LINKCHAR + DEF_BSEPCHAR +
gsStreamType +
DEF_ESEPCHAR + DEF_LINKCHAR + DEF_BSEPCHAR +
gsTransType + DEF_ESEPCHAR + DEF_LINKCHAR + DEF_BSEPCHAR +
'服务1-CLOSE' + DEF_ESEPCHAR + DEF_LINKCHAR +
DEF_BSEPCHAR + gsStreamModel + DEF_ESEPCHAR);
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);
try
aSkype[1].CtrlStatus.Finish;
except
end;
end;
end;
end;
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
var
Hand:Integer;
begin
//如果没有运行
//最小化启动
//skypMain.Client.Shutdown;
WaveIn1.close();
WaveOut1.Close();
WaveInStream1.close();
WaveOutStream1.close();
try
{
//创建第一个用户
WinExec('net user sutmpSkype1 /del',SW_HIDE);
//创建第二个用户
WinExec('net user sutmpSkype2 /del',SW_HIDE);
//创建第三个用户
WinExec('net user sutmpSkype3 /del',SW_HIDE);
//创建第四个用户
WinExec('net user sutmpSkype4 /del',SW_HIDE);
Hand:=FindWindow(nil,'c:\winnt\system32\cmd.exe');//找CMD句柄
if Hand<>0 then//如果找到句
begin
SendMessage(Hand,WM_CLOSE,0,0);//关闭隐藏的CMD窗口
end else begin
Hand:=FindWindow(nil,'c:\windows\system32\cmd.exe');//找CMD句柄
if Hand<>0 then
begin
SendMessage(Hand,WM_CLOSE,0,0);//关闭隐藏的CMD窗口
end;
end;
}
//本地语音监听端口
gcf_SetINIValue('SERVERNETWORK','LOCALWORDPORT',edtLocalWordPort.Text);
//远端文字监听端
gcf_SetINIValue('SERVERNETWORK','REMOTEWORDPORT',edtRemoteWordPort.Text);
//本地语音监听端口
gcf_SetINIValue('SERVERNETWORK','LOCALPHONEPORT1',edtLocPort1.Text);
//远端语音端口
gcf_SetINIValue('SERVERNETWORK','REMOTEPHONEPORT1',edtRmtPort1.Text);
//本地语音监听端口
gcf_SetINIValue('SERVERNETWORK','LOCALPHONEPORT2',edtLocPort2.Text);
//远端语音端口
gcf_SetINIValue('SERVERNETWORK','REMOTEPHONEPORT2',edtRmtPort2.Text);
//本地语音监听端口
gcf_SetINIValue('SERVERNETWORK','LOCALPHONEPORT3',edtLocPort3.Text);
//远端语音端口
gcf_SetINIValue('SERVERNETWORK','REMOTEPHONEPORT3',edtRmtPort3.Text);
//本地语音监听端口
gcf_SetINIValue('SERVERNETWORK','LOCALPHONEPORT4',edtLocPort4.Text);
//远端语音端口
gcf_SetINIValue('SERVERNETWORK','REMOTEPHONEPORT4',edtRmtPort4.Text);
//语音样式设置
gcf_SetINIValue('SERVERWAVEFORMAT','wFormatTag','1');
gcf_SetINIValue('SERVERWAVEFORMAT','nChannels','1');
gcf_SetINIValue('SERVERWAVEFORMAT','nSamplesPerSec','8000');
gcf_SetINIValue('SERVERWAVEFORMAT','nAvgBytesPerSec','8000');
gcf_SetINIValue('SERVERWAVEFORMAT','nBlockAlign','1');
gcf_SetINIValue('SERVERWAVEFORMAT','wBitsPerSample','8');
//声卡数量
gcf_SetINIValue('SERVERSOUNDCARD','NUMBER',edtSoundDevNum.Text);
//采样率
gcf_SetINIValue('SERVERSOUNDCARD','RATETYPE',IntToStr(cbbRateType.ItemIndex));
//流方式
gcf_SetINIValue('SERVERSOUNDCARD','STREAMTYPE',IntToStr(cbbStreamType.ItemIndex));
//传输方式
gcf_SetINIValue('SERVERSOUNDCARD','TRANSTYPE',IntToStr(cbbTransType.ItemIndex));
//流模式
gcf_SetINIValue('SERVERSOUNDCARD','TRANSTYPE',IntToStr(cbbTransType.ItemIndex));
gcf_SetINIValue('SERVERSOUNDCARD','PB1',IntToStr(cbbPB1.ItemIndex));
gcf_SetINIValue('SERVERSOUNDCARD','RC1',IntToStr(cbbRC1.ItemIndex));
gcf_SetINIValue('SERVERSOUNDCARD','PB2',IntToStr(cbbPB2.ItemIndex));
gcf_SetINIValue('SERVERSOUNDCARD','RC2',IntToStr(cbbRC2.ItemIndex));
gcf_SetINIValue('SERVERSOUNDCARD','PB3',IntToStr(cbbPB3.ItemIndex));
gcf_SetINIValue('SERVERSOUNDCARD','RC3',IntToStr(cbbRC3.ItemIndex));
gcf_SetINIValue('SERVERSOUNDCARD','PB4',IntToStr(cbbPB4.ItemIndex));
gcf_SetINIValue('SERVERSOUNDCARD','RC4',IntToStr(cbbRC4.ItemIndex));
gcf_SetINIValue('SERVERSOUNDCARD','StreamModel',IntToStr(cbbStreamModel.ItemIndex));
gcf_SetINIValue('SERVERNETWORK','SERVERLSTHOST',edtLstServer.Text);
gcf_SetINIValue('SERVERNETWORK','SERVERLSTPORT',edtLstServerPort.Text);
except
end;
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);
//skyp1.Application.ConnectableUsers.Add();
end;
procedure TfrmMain.skyp1CallStatus(ASender: TObject; const pCall: ICall;
Status: TOleEnum);
begin
//保存状态。
aSkype[1].Status:=Status;
if Status = clsFinished Then
begin
strngrdAll.Cells[4,1]:='空闲';
try
aSkype[1].csCurrentStatus:='FINISH';
//初始化关闭。
//关闭输出流
WaveOutStream1.close;
//关闭输入流
WaveInStream1.close;
WaveOut1.close();
WaveIn1.close();
//设置客户端端口
idpclntMain.Active:=False;
idpclntMain.Port:=StrToIntDef(gsRemoteWordPort,0);
idpclntMain.Host:=idpsrvrMain.Binding.PeerIP;
idpclntMain.Active:=True;
idpclntMain.Send(DEF_BSEPCHAR + gsRateType +
DEF_ESEPCHAR + DEF_LINKCHAR + DEF_BSEPCHAR +
gsStreamType +
DEF_ESEPCHAR + DEF_LINKCHAR + DEF_BSEPCHAR +
gsTransType + DEF_ESEPCHAR + DEF_LINKCHAR + DEF_BSEPCHAR +
'服务1-FREE' + DEF_ESEPCHAR + DEF_LINKCHAR +
DEF_BSEPCHAR + gsStreamModel + DEF_ESEPCHAR);
except
end;
end;
end;
procedure TfrmMain.skyp2CallStatus(ASender: TObject; const pCall: ICall;
Status: TOleEnum);
begin
//保存状态。
aSkype[2].Status:=Status;
end;
procedure TfrmMain.skyp3CallStatus(ASender: TObject; const pCall: ICall;
Status: TOleEnum);
begin
//保存状态。
aSkype[3].Status:=Status;
end;
procedure TfrmMain.skyp4CallStatus(ASender: TObject; const pCall: ICall;
Status: TOleEnum);
begin
//保存状态。
aSkype[4].Status:=Status;
end;
procedure TfrmMain.idpsrvrUsersUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
mData:array[1..CST_MAXBUFF] of char;
sInfo:String;
iCount:integer;
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);
end;
procedure TfrmMain.btnSoundClick(Sender: TObject);
begin
//采样率
gcf_SetINIValue('SERVERSOUNDCARD','RATETYPE',IntToStr(cbbRateType.ItemIndex));
gsRateType:=IntToStr(cbbRateType.ItemIndex);
//流方式
gcf_SetINIValue('SERVERSOUNDCARD','STREAMTYPE',IntToStr(cbbStreamType.ItemIndex));
gsStreamType:=IntToStr(cbbStreamType.ItemIndex);
//传输方式
gcf_SetINIValue('SERVERSOUNDCARD','TRANSTYPE',IntToStr(cbbTransType.ItemIndex));
gsTransType:=IntToStr(cbbTransType.ItemIndex);
//流模式
gcf_SetINIValue('SERVERSOUNDCARD','StreamModel',IntToStr(cbbStreamModel.ItemIndex));
gsStreamModel:=IntToStr(cbbStreamModel.ItemIndex);
//初始化关闭。
//采样率
cbbRateType.ItemIndex:=StrToIntDef(gsRateType,0);
//流方式
cbbStreamType.ItemIndex:=StrToIntDef(gsStreamType,0);
//传输方式
cbbTransType.ItemIndex:=StrToIntDef(gsTransType,0);
//流模式
cbbStreamModel.ItemIndex:=StrToIntDef(gsStreamModel,0);
//关闭输出流
WaveOutStream1.close;
//关闭输入流
WaveInStream1.close;
WaveIn1.close();
WaveOut1.close();
//传输方式
if (cbbTransType.itemIndex =0) then begin
//UDP
WaveOutStream1.proto := unapt_UDP;
WaveInStream1.proto := unapt_UDP;
end
else begin
//TCP
WaveOutStream1.proto := unapt_TCP;
WaveInStream1.proto := unapt_TCP;
end;
cbbStreamModel.ItemIndex:=StrToIntDef(gsStreamModel,0);
if (cbbStreamModel.ItemIndex=0) then begin
WaveOutStream1.streamingMode:=unasm_VC;
WaveInStream1.streamingMode:=unasm_VC;
end else begin
WaveOutStream1.streamingMode:=unasm_RAW;
WaveInStream1.streamingMode:=unasm_RAW;
end;
//接受来自远端的流并传输给skype的录音设备
WaveInStream1.port := aSkype[1].gsLocalPhonePort;
//接收来自Skype播放接口作为录音口 发送流到端口
WaveOutStream1.port:= aSkype[1].gsRemotePhonePort;
//回放B---------------------------------------------------------------------
//设备号
WaveOut1.deviceId := index2deviceId(cbbRC1);
//采样率
WaveOut1.pcm_samplesPerSec := str2intInt(cbbRateType.Text);
WaveCodeP1.formatTag := str2intInt(cbbStreamType.text, 1, 10, true);
WaveInStream1.open;
//回放E----------------------------------------------------------------------
//录入B--------------------------------------------------------------------
WaveIn1.close();
//设备号
WaveIn1.deviceId := index2deviceId(cbbPB1);
//采样率
WaveIn1.pcm_samplesPerSec := str2intInt(cbbRateType.Text);
//保存采样率
gsRateType:=IntToStr(WaveIn1.pcm_samplesPerSec);
//保存传输方式
gsTransType:=cbbTransType.Text;
//流模式
WaveCodeR1.formatTag := str2intInt(cbbStreamType.text, 1, 10, true);
//保存流模式
gsStreamType:=IntToStr(WaveCodeR1.formatTag);
//录入E---------------------------------------------------------------------
end;
procedure TfrmMain.ctlMainItems0Timer(Sender: TObject);
begin
strngrdStream.Cells[0,1]:=aSkype[1].csCurrentSessionID;
strngrdStream.Cells[1,1]:= '帐号1';
strngrdStream.Cells[2,1]:= IntToStr(WaveInStream1.outBytes);
strngrdStream.Cells[3,1]:= IntToStr(WaveOutStream1.inBytes);
strngrdStream.Cells[4,1]:= TimeToStr(now-StrToDateTimeDef(aSkype[1].csBeginTime,now));
end;
procedure TfrmMain.btnSaveClick(Sender: TObject);
begin
try
aSkype[1].csSkypeUserName:=trim(edtUserName1.Text);
aSkype[1].csSkypePassWord:=trim(edtPassWord1.Text);
if rbGN1.Checked then
begin
aSkype[1].csSkypeType:=0;
end else if rbGJ1.Checked then
begin
aSkype[1].csSkypeType:=1;
end;
gcf_SetINIValue('Skype','UserName1',edtUserName1.Text);
gcf_SetINIValue('Skype','PassWord1',edtPassWord1.Text);
gcf_SetINIValue('Skype','UseSkype1',BoolToStr(chkSkype1.Checked));
end;
procedure TfrmMain.btnSetupClick(Sender: TObject);
begin
gcf_SetINIValue('SERVERNETWORK','SERVERLSTHOST',edtLstServer.Text);
gcf_SetINIValue('SERVERNETWORK','SERVERLSTPORT',edtLstServerPort.Text);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -