📄 uservermain.pas
字号:
begin
rbGN4.Checked:=True;
rbGJ4.Checked:=False;
end else begin
rbGN4.Checked:=False;
rbGJ4.Checked:=True;
end;
aSkype[4].csSkypeUserName:=edtUserName4.Text;
aSkype[4].csSkypePassWord:=edtPassWord4.Text;
aSkype[4].csSkypeType:=StrToIntDef(gcf_GetINIValue('Skype','UserType4'),0);
aSkype[4].csSkypeUse:=chkSkype4.Checked;
}
cbbTransType.ItemIndex:=StrToIntDef(gcf_GetINIValue('SERVERSOUNDCARD','TransType'),0);
cbbStreamType.ItemIndex:=StrToIntDef(gcf_GetINIValue('SERVERSOUNDCARD','StreamType'),5);
cbbRateType.ItemIndex:=StrToIntDef(gcf_GetINIValue('SERVERSOUNDCARD','RateType'),1);
cbbStreamModel.ItemIndex:=StrToIntDef(gcf_GetINIValue('SERVERSOUNDCARD','StreamModel'),0);
gsStreamModel:=gcf_GetINIValue('SERVERSOUNDCARD','StreamModel');
end else begin
//本地语音监听端口
gcf_SetINIValue('SERVERNETWORK','LOCALWORDPORT','2333');
//远端文字监听端口
gcf_SetINIValue('SERVERNETWORK','REMOTEWORDPORT','3333');
//本地语音监听端口
gcf_SetINIValue('SERVERNETWORK','LOCALPHONEPORT1','47216');
//远端语音端口
gcf_SetINIValue('SERVERNETWORK','REMOTEPHONEPORT1','57216');
//本地语音监听端口
gcf_SetINIValue('SERVERNETWORK','LOCALPHONEPORT1','47226');
//远端语音端口
gcf_SetINIValue('SERVERNETWORK','REMOTEPHONEPORT1','57226');
//本地用户列表监听端口
gcf_SetINIValue('SERVERNETWORK','LOCALUSERPORT','67216');
//发送用户列表监听端口
gcf_SetINIValue('SERVERNETWORK','REMOTEUSERPORT','77216');
//语音样式设置
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','5');
//采样率
gcf_SetINIValue('SERVERSOUNDCARD','RATETYPE','1');
//流方式
gcf_SetINIValue('SERVERSOUNDCARD','STREAMTYPE','5');
//传输方式
gcf_SetINIValue('SERVERSOUNDCARD','TRANSTYPE','0');
//回放1
gcf_SetINIValue('SERVERSOUNDCARD','PB1','1');
//录音1
gcf_SetINIValue('SERVERSOUNDCARD','RC1','3');
{
//回放2
gcf_SetINIValue('SERVERSOUNDCARD','PB2','2');
//录音2
gcf_SetINIValue('SERVERSOUNDCARD','RC2','4');
//回放3
gcf_SetINIValue('SERVERSOUNDCARD','PB3','5');
//录音3
gcf_SetINIValue('SERVERSOUNDCARD','RC3','7');
//回放4
gcf_SetINIValue('SERVERSOUNDCARD','PB4','6');
//录音4
gcf_SetINIValue('SERVERSOUNDCARD','RC4','8');
}
//声道
gcf_SetINIValue('SERVERSOUNDCARD','Channels','1');
//流模式
gcf_SetINIValue('SERVERSOUNDCARD','StreamModel','0');
gcf_SetINIValue('SERVERNETWORK','SERVERLSTHOST','223.223.80.184');
gcf_SetINIValue('SERVERNETWORK','SERVERLSTPORT','40682');
end;
//打开服务器
idpsrvrMain.DefaultPort:=StrToIntDef(gsLocalWordPort,0);
idpsrvrMain.Active:=True;
//idpsrvrUsers.DefaultPort:=StrToIntDef(gsLocalUserPort,0);
//idpsrvrUsers.Active:=True;
//保存采样率
gsRateType:=cbbRateType.Text;
//保存传输方式
gsTransType:=cbbTransType.Text;
//保存流模式
gsStreamType:=IntToStr(str2intInt(cbbStreamType.text, 1, 10, true));
////////////////////////SKYPE---1/////////BEGIN///////////////////////////////
//初始化关闭。
//关闭输出流
WaveOutStream1.close;
//关闭输入流
WaveInStream1.close;
WaveOut1.close();
WaveIn1.close();
//关联入口
WaveIn1.consumer:=WaveCodeR1;
WaveCodeR1.consumer:=WaveOutStream1;
//关联出口
WaveInStream1.consumer:=WaveCodeP1;
WaveCodeP1.consumer:=WaveOut1;
//传输方式
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;
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;
WaveOut1.close();
//回放B---------------------------------------------------------------------
//设备号
WaveOut1.deviceId := index2deviceId(cbbRC1);
//采样率
WaveOut1.pcm_samplesPerSec := str2intInt(cbbRateType.Text);
WaveCodeP1.formatTag := str2intInt(cbbStreamType.text, 1, 10, true);
WaveCodeP1.pcm_numChannels:=1;
WaveCodeP1.pcm_samplesPerSec:=str2intInt(cbbRateType.Text);
//回放E----------------------------------------------------------------------
//给予启动服务的时间。
Sleep(500);
//录入B--------------------------------------------------------------------
WaveIn1.close();
//设备号
WaveIn1.deviceId := index2deviceId(cbbPB1);
//采样率
WaveIn1.pcm_samplesPerSec := str2intInt(cbbRateType.Text);
//声道
WaveIn1.pcm_numChannels:=1;
//流模式
WaveCodeR1.formatTag := str2intInt(cbbStreamType.text, 1, 10, true);
//录入E---------------------------------------------------------------------
////////////////////////SKYPE---1/////////END/////////////////////////////////
//用户列表
fctrvwMain.Items.Clear;
strngrdAll.RowCount:=6;
strngrdAll.ColCount:=5;
strngrdAll.Cells[0,0]:='会话网络';
strngrdAll.Cells[1,0]:='电话号码';
strngrdAll.Cells[2,0]:='计算机名';
strngrdAll.Cells[3,0]:='请求时间';
strngrdAll.Cells[4,0]:='使用状态';
strngrdAll.ColWidths[0]:=100;
strngrdAll.ColWidths[1]:=80;
strngrdAll.ColWidths[2]:=100;
strngrdAll.ColWidths[3]:=140;
strngrdAll.ColWidths[4]:=80;
strngrdStream.RowCount:=5;
strngrdStream.ColCount:=5;
strngrdStream.Cells[0,0]:='会话';
strngrdStream.Cells[1,0]:='会话设备';
strngrdStream.Cells[2,0]:='流入字节';
strngrdStream.Cells[3,0]:='流出字节';
strngrdStream.Cells[4,0]:='时长';
strngrdStream.ColWidths[0]:=100;
strngrdStream.ColWidths[1]:=80;
strngrdStream.ColWidths[2]:=100;
strngrdStream.ColWidths[3]:=140;
strngrdStream.ColWidths[4]:=80;
if not skyp1.Client.IsRunning then
begin
skyp1.Client.Start(true,true);
end;
skyp1.Attach(9,false);
iTCount:=0;
end;
procedure TfrmMain.idpsrvrMainUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
mData:array[1..CST_MAXBUFF] of char;
pData:Pchar;
iCount:integer;
sInfo:String;
fcTN:TfcTreeNode;
bFind:Boolean;
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);
bFind:=False;
if fctrvwMain.Items.Count>0 then
begin
for iCount:=0 to fctrvwMain.Items.Count-1 do
begin
if fctrvwMain.Items[iCount].Text=ABinding.PeerIP then
begin
bFind:=True;
Break;
end;
end;
end;
//未找到节点
if Not bFind then
begin
if Pos(DEF_ESEPCHAR + DEF_LINKCHAR + DEF_BSEPCHAR,sInfo)>0 then
begin
fctrvwMain.Items.BeginUpdate;
fcTN:=TfcTreeNode.Create(fctrvwMain.Items);
fcTN.StringData:=sInfo;
fcTN.StringData2:=ABinding.PeerIP;
//显示接口信息
fcTN.Text:=ABinding.PeerIP;
fctrvwMain.Items.Add(fcTN,ABinding.PeerIP);
fctrvwMain.Items.EndUpdate;
end ;
//找到节点
end else begin
fctrvwMain.Items.BeginUpdate;
if fctrvwMain.Items.FindNode(ABinding.PeerIP,False)<>nil then
fctrvwMain.Items.FindNode(ABinding.PeerIP,False).Selected:=True;
fctrvwMain.Selected.StringData:=sInfo;
fctrvwMain.Selected.StringData2:=ABinding.PeerIP;
fctrvwMain.Items.EndUpdate;
end;
//接收通话命令
if (gcf_GetStrPosStr(sInfo,4)='HOLDON') then
begin
//没在保持状态。 -=Skype1=-
if (aSkype[1].Status<>clsOnHold) and (aSkype[1].Status<>clsRinging)
and (aSkype[1].Status<>clsInProgress) and (aSkype[1].Status<>clsBusy) then
begin
//开始拨号。
if Copy(gcf_GetStrPosStr(sInfo,1),1,3)=CST_CALLHEAD then
begin
aSkype[1].CtrlStatus:=skyp1.PlaceCall(gcf_GetStrPosStr(sInfo,1),'','','');
end else begin
aSkype[1].CtrlStatus:=skyp1.PlaceCall(CST_CALLHEAD+gcf_GetStrPosStr(sInfo,1),'','','');
end;
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:=gcf_GetStrPosStr(sInfo,1);
aSkype[1].csCurrentUserIP:=idpsrvrMain.Binding.PeerIP;
aSkype[1].csCurrentSessionID:=gcf_GetStrPosStr(sInfo,2);
aSkype[1].csBeginTime:=strngrdAll.Cells[3,1];
aSkype[1].csCurrentComputerName:=gcf_GetStrPosStr(sInfo,3);
aSkype[1].csCurrentStatus:='通话中...';
//初始化关闭。
//关闭输出流
WaveOutStream1.close;
//关闭输入流
WaveInStream1.close;
WaveOut1.close();
WaveIn1.close();
WaveInStream1.open();
Sleep(200);
//接收来自Skype播放接口作为录音口 发送流到端口
WaveOutStream1.port:= aSkype[1].gsRemotePhonePort;
WaveOutStream1.host:=idpsrvrMain.Binding.PeerIP;
//录入B--------------------------------------------------------------------
WaveIn1.open;
ctlMain.Items[0].Enabled:=False;
ctlMain.Items[0].Interval:=500;
ctlMain.Items[0].Enabled:=True;
//设置客户端端口
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-READY' + 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);
end else if (aSkype[1].Status=clsOnHold) or (aSkype[1].Status=clsInProgress) or (aSkype[1].Status=clsRinging) or (aSkype[1].Status=clsBusy) then begin
//设置客户端端口
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-RUNNING' + 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);
end;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -