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

📄 uservermain.pas

📁 采用ACM与Skype4Com并且采用分布式UDP来进行语音的拨号、分传。
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit uServerMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, WinSkinData, ExtCtrls, ComCtrls, StdCtrls, Grids, RzGrids,
  IdUDPServer, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient,
  fcTreeView, OleCtrls,ScktComp,IdSocketHandle,ShellAPI,MMSystem,
  SKYPE4COMLib_TLB, unaVCIDE, CnClasses, CnTimer, CnIP, CnPing, CnUDP;
const
  //BUFF
  CST_MAXBUFF=10240;
  CST_CALLHEAD='+990086680830';//'+990086680830';



type
  TfrmMain = class(TForm)
    SkinData1: TSkinData;
    grp1: TGroupBox;
    stat1: TStatusBar;
    grp2: TGroupBox;
    spl1: TSplitter;
    pgc1: TPageControl;
    ts1: TTabSheet;
    strngrdAll: TStringGrid;
    idpclntMain: TIdUDPClient;
    idpsrvrMain: TIdUDPServer;
    idpclntUsers: TIdUDPClient;
    idpsrvrUsers: TIdUDPServer;
    ts2: TTabSheet;
    fcTreeView1: TfcTreeView;
    WaveIn1: TunavclWaveInDevice;
    WaveCodeR1: TunavclWaveCodecDevice;
    WaveOutStream1: TunavclIPOutStream;
    WaveInStream1: TunavclIPInStream;
    WaveCodeP1: TunavclWaveCodecDevice;
    WaveOut1: TunavclWaveOutDevice;
    ts3: TTabSheet;
    grp3: TGroupBox;
    lbl9: TLabel;
    cbbRateType: TComboBox;
    lbl10: TLabel;
    lbl11: TLabel;
    skyp1: TSkype;
    cbbStreamType: TComboBox;
    cbbTransType: TComboBox;
    lbl14: TLabel;
    edtSoundDevNum: TEdit;
    lbl15: TLabel;
    lbl16: TLabel;
    edtLocalWordPort: TEdit;
    edtRemoteWordPort: TEdit;
    ts4: TTabSheet;
    strngrdStream: TStringGrid;
    btnSound: TButton;
    lbl17: TLabel;
    cbbStreamModel: TComboBox;
    ctlMain: TCnTimerList;
    ts5: TTabSheet;
    grp5: TGroupBox;
    grp6: TGroupBox;
    lbl18: TLabel;
    edtUserName1: TEdit;
    edtPassWord1: TEdit;
    lbl19: TLabel;
    rbGN1: TRadioButton;
    rbGJ1: TRadioButton;
    grp7: TGroupBox;
    lbl20: TLabel;
    lbl21: TLabel;
    edtUserName2: TEdit;
    edtPassWord2: TEdit;
    rbGN2: TRadioButton;
    rbGJ2: TRadioButton;
    grp8: TGroupBox;
    lbl22: TLabel;
    lbl23: TLabel;
    edtUserName3: TEdit;
    edtPassWord3: TEdit;
    rbGN3: TRadioButton;
    rbGJ3: TRadioButton;
    grp9: TGroupBox;
    lbl24: TLabel;
    lbl25: TLabel;
    edtUserName4: TEdit;
    edtPassWord4: TEdit;
    rbGN4: TRadioButton;
    rbGJ4: TRadioButton;
    chkSkype1: TCheckBox;
    chkSkype2: TCheckBox;
    chkSkype3: TCheckBox;
    chkSkype4: TCheckBox;
    btnSave: TButton;
    idpclntLst: TIdUDPClient;
    grp10: TGroupBox;
    lbl32: TLabel;
    edtLstServer: TEdit;
    lbl33: TLabel;
    edtLstServerPort: TEdit;
    btnSetup: TButton;
    fctrvwMain: TfcTreeView;
    lbl34: TLabel;
    cbb1: TComboBox;
    lbl35: TLabel;
    cbb2: TComboBox;
    lbl36: TLabel;
    edt1: TEdit;
    edt2: TEdit;
    lbl37: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure idpsrvrMainUDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure skyp1CallStatus(ASender: TObject; const pCall: ICall;
      Status: TOleEnum);
    procedure skyp2CallStatus(ASender: TObject; const pCall: ICall;
      Status: TOleEnum);
    procedure skyp3CallStatus(ASender: TObject; const pCall: ICall;
      Status: TOleEnum);
    procedure skyp4CallStatus(ASender: TObject; const pCall: ICall;
      Status: TOleEnum);
    procedure idpsrvrUsersUDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
    procedure btnSoundClick(Sender: TObject);
    procedure ctlMainItems0Timer(Sender: TObject);
    procedure btnSaveClick(Sender: TObject);
    procedure btnSetupClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;



 type
   TSkypeObject=record
    //当前状态
    Status:TCallStatus;
    //拨叫接口 (可控制Skype状态)
    CtrlStatus:ICall;
    //本地电话端口
    gsLocalPhonePort:string;
    //远程电话端口
    gsRemotePhonePort:string;
    //拨叫的电话号码
    csCurrentCallNumber:String;
    //当前用户IP地址
    csCurrentUserIP:String;
    //当前会话编号
    csCurrentSessionID:String;
    //开始会话时间
    csBeginTime:String;
    //结束会话时间
    csEndTime:String;
    //当前计算机名
    csCurrentComputerName:String;
    //当前状态。
    csCurrentStatus:string;
    //Skype用户帐号
    csSkypeUserName:String;
    //Skype用户密码
    csSkypePassWord:String;
    //Skype帐号类型
    csSkypeType:integer;
    //回放设备索引
    csDevicePlayBack:Integer;
    //录音设备索引
    csDeviceRecord:Integer;
    //是否启用
    csSkypeUse:boolean;
 end;
 
var
  frmMain: TfrmMain;
  gsLocalIP,gsLocalWordPort,
  gsRemoteWordPort,gsLocalUserPort,
  gsRemoteUserPort:String;
  iTCount:integer;
  aSkype:array [1..8] of TSkypeObject;
  gsRateType,gsTransType,gsStreamType,gsStreamModel:String;
  gsServerListHost,gsServerListPort:String;
implementation

uses uCommon,unaUtils,unavcIdeUtils,unaVclUtils;

{$R *.dfm}

procedure TfrmMain.FormCreate(Sender: TObject);
var
  Hand:integer;
  iApp:IApplication;
begin
 {
 //默认的创建四个用户
 try
  //创建第一个用户
  WinExec('net user sutmpSkype1 sutmpSkype1 /add',SW_HIDE);
  //创建第二个用户
  WinExec('net user sutmpSkype2 sutmpSkype2 /add',SW_HIDE);
  //创建第三个用户
  WinExec('net user sutmpSkype3 sutmpSkype3 /add',SW_HIDE);
  //创建第四个用户
  WinExec('net user sutmpSkype4 sutmpSkype4 /add',SW_HIDE);
 except
 end; }

 

 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;



 //枚举回放设备
 enumWaveDevices(cbbRC1,false,false);

 //枚举录音设备
 enumWaveDevices(cbbPB1,True,false);


 //枚举回放设备
 enumWaveDevices(cbbRC2,false,false);

 //枚举录音设备
 enumWaveDevices(cbbPB2,True,false);


 //枚举回放设备
 enumWaveDevices(cbbRC3,false,false);

 //枚举录音设备
 enumWaveDevices(cbbPB3,True,false);


 //枚举回放设备
 enumWaveDevices(cbbRC4,false,false);

 //枚举录音设备
 enumWaveDevices(cbbPB4,True,false);

 //传输方式
 cbbTransType.ItemIndex:=0;
 //流模式
 cbbStreamType.ItemIndex:=5;
 //采样率
 cbbRateType.ItemIndex:=1;

 if FileExists(gcf_GetAppPath+ 'Kernel.dat') then
 begin
   gsLocalWordPort:=gcf_GetINIValue('SERVERNETWORK','LOCALWORDPORT');
   edtLocalWordPort.Text:=gsLocalWordPort;
   gsRemoteWordPort:=gcf_GetINIValue('SERVERNETWORK','REMOTEWORDPORT');
   gsLocalUserPort:=gcf_GetINIValue('SERVERNETWORK','LOCALUSERPORT');
   gsRemoteUserPort:=gcf_GetINIValue('SERVERNETWORK','REMOTEUSERPORT');

   gsServerListHost:=gcf_GetINIValue('SERVERNETWORK','SERVERLSTHOST');
   edtLstServer.Text:=gsServerListHost;
   gsServerListPort:=gcf_GetINIValue('SERVERNETWORK','SERVERLSTPORT');
   edtLstServerPort.Text:=gsServerListPort;
   
   edtRemoteWordPort.Text:=gsRemoteWordPort;
   //声卡数量
   edtSoundDevNum.Text:=gcf_GetINIValue('SERVERSOUNDCARD','NUMBER');


   //skype1 设置
   aSkype[1].gsLocalPhonePort:=gcf_GetINIValue('SERVERNETWORK','LOCALPHONEPORT1');
   edtLocPort1.Text:=aSkype[1].gsLocalPhonePort;
   aSkype[1].gsRemotePhonePort:=gcf_GetINIValue('SERVERNETWORK','REMOTEPHONEPORT1');
   edtRmtPort1.Text:=aSkype[1].gsRemotePhonePort;
   cbbPB1.ItemIndex:=StrToIntDef(gcf_GetINIValue('SERVERSOUNDCARD','PB1'),-1);
   aSkype[1].csDevicePlayBack:=cbbPB1.ItemIndex;
   cbbRC1.ItemIndex:=StrToIntDef(gcf_GetINIValue('SERVERSOUNDCARD','RC1'),-1);
   aSkype[1].csDeviceRecord:=cbbRC1.ItemIndex;

   edtUserName1.Text:=gcf_GetINIValue('Skype','UserName1');
   edtPassWord1.Text:=gcf_GetINIValue('Skype','PassWord1');
   chkSkype1.Checked:=StrToBoolDef(gcf_GetINIValue('Skype','UseSkype1'),False);
   if StrToIntDef(gcf_GetINIValue('Skype','UserType1'),0)=0 then
   begin
      rbGN1.Checked:=True;
      rbGJ1.Checked:=False;
   end else begin
      rbGN1.Checked:=False;
      rbGJ1.Checked:=True;
   end;
   
   aSkype[1].csSkypeUserName:=edtUserName1.Text;
   aSkype[1].csSkypePassWord:=edtPassWord1.Text;
   aSkype[1].csSkypeType:=StrToIntDef(gcf_GetINIValue('Skype','UserType1'),0);
   aSkype[1].csSkypeUse:=chkSkype1.Checked;


   gcp_GetComputerInfo;

    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);

   {
   //skype2 设置
   aSkype[2].gsLocalPhonePort:=gcf_GetINIValue('SERVERNETWORK','LOCALPHONEPORT2');
   edtLocPort2.Text:=aSkype[2].gsLocalPhonePort;
   aSkype[2].gsRemotePhonePort:=gcf_GetINIValue('SERVERNETWORK','REMOTEPHONEPORT2');
   edtRmtPort2.Text:=aSkype[2].gsRemotePhonePort;
   cbbPB2.ItemIndex:=StrToIntDef(gcf_GetINIValue('SERVERSOUNDCARD','PB2'),-1);
   aSkype[2].csDevicePlayBack:=cbbPB2.ItemIndex;
   cbbRC2.ItemIndex:=StrToIntDef(gcf_GetINIValue('SERVERSOUNDCARD','RC2'),-1);
   aSkype[2].csDeviceRecord:=cbbRC2.ItemIndex;
   edtUserName2.Text:=gcf_GetINIValue('Skype','UserName2');
   edtPassWord2.Text:=gcf_GetINIValue('Skype','PassWord2');
   chkSkype2.Checked:=StrToBoolDef(gcf_GetINIValue('Skype','UseSkype2'),False);
   if StrToIntDef(gcf_GetINIValue('Skype','UserType2'),0)=0 then
   begin
      rbGN2.Checked:=True;
      rbGJ2.Checked:=False;
   end else begin
      rbGN2.Checked:=False;
      rbGJ2.Checked:=True;
   end;
   
   aSkype[2].csSkypeUserName:=edtUserName2.Text;
   aSkype[2].csSkypePassWord:=edtPassWord2.Text;
   aSkype[2].csSkypeType:=StrToIntDef(gcf_GetINIValue('Skype','UserType2'),0);
   aSkype[2].csSkypeUse:=chkSkype2.Checked;



   //skype3 设置
   aSkype[3].gsLocalPhonePort:=gcf_GetINIValue('SERVERNETWORK','LOCALPHONEPORT3');
   edtLocPort3.Text:=aSkype[3].gsLocalPhonePort;
   aSkype[3].gsRemotePhonePort:=gcf_GetINIValue('SERVERNETWORK','REMOTEPHONEPORT3');
   edtRmtPort3.Text:=aSkype[3].gsRemotePhonePort;
   cbbPB3.ItemIndex:=StrToIntDef(gcf_GetINIValue('SERVERSOUNDCARD','PB3'),-1);
   aSkype[3].csDevicePlayBack:=cbbPB3.ItemIndex;
   cbbRC3.ItemIndex:=StrToIntDef(gcf_GetINIValue('SERVERSOUNDCARD','RC3'),-1);
   aSkype[3].csDeviceRecord:=cbbRC3.ItemIndex;
   edtUserName3.Text:=gcf_GetINIValue('Skype','UserName3');
   edtPassWord3.Text:=gcf_GetINIValue('Skype','PassWord3');
   chkSkype3.Checked:=StrToBoolDef(gcf_GetINIValue('Skype','UseSkype3'),False);
   if StrToIntDef(gcf_GetINIValue('Skype','UserType3'),0)=0 then
   begin
      rbGN3.Checked:=True;
      rbGJ3.Checked:=False;
   end else begin
      rbGN3.Checked:=False;
      rbGJ3.Checked:=True;
   end;

   aSkype[3].csSkypeUserName:=edtUserName3.Text;
   aSkype[3].csSkypePassWord:=edtPassWord3.Text;
   aSkype[3].csSkypeType:=StrToIntDef(gcf_GetINIValue('Skype','UserType3'),0);
   aSkype[3].csSkypeUse:=chkSkype3.Checked;




   //skype4 设置
   aSkype[4].gsLocalPhonePort:=gcf_GetINIValue('SERVERNETWORK','LOCALPHONEPORT4');
   edtLocPort4.Text:=aSkype[4].gsLocalPhonePort;
   aSkype[4].gsRemotePhonePort:=gcf_GetINIValue('SERVERNETWORK','REMOTEPHONEPORT4');
   edtRmtPort4.Text:=aSkype[4].gsRemotePhonePort;
   cbbPB4.ItemIndex:=StrToIntDef(gcf_GetINIValue('SERVERSOUNDCARD','PB4'),-1);
   aSkype[4].csDevicePlayBack:=cbbPB4.ItemIndex;
   cbbRC4.ItemIndex:=StrToIntDef(gcf_GetINIValue('SERVERSOUNDCARD','RC4'),-1);
   aSkype[4].csDeviceRecord:=cbbRC4.ItemIndex;
   edtUserName4.Text:=gcf_GetINIValue('Skype','UserName4');
   edtPassWord4.Text:=gcf_GetINIValue('Skype','PassWord4');
   chkSkype4.Checked:=StrToBoolDef(gcf_GetINIValue('Skype','UseSkype4'),False);
   if StrToIntDef(gcf_GetINIValue('Skype','UserType4'),0)=0 then

⌨️ 快捷键说明

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