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

📄 usdk_demo.pas

📁 一个用Delpi写的视频聊天的SDK
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  FSDKClient.Command(mcxPrepareMic, FSelUserID, 0, 0);
end;

procedure TForm1.A_CancelMicExecute(Sender: TObject);
begin
  FSDKClient.Command(mcxCancelMic, FSelUserID, 0, 0);
end;

procedure TForm1.A_SetTempMngExecute(Sender: TObject);
begin
  FSDKClient.Command(mcxSetTempMng, FSelUserID, 0, 0);
end;

procedure TForm1.A_UnSetTempMngExecute(Sender: TObject);
begin
  FSDKClient.Command(mcxUnsetTempMng, FSelUserID, 0, 0);
end;

procedure TForm1.A_DropUserExecute(Sender: TObject);
begin
  FSDKClient.Command(mcxDropUser, FSelUserID, 0, 0);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  FXML.Visible := false;
  TabSheet2.TabVisible := false;
  lmView1.ScrollVisible := true;
  Web_Left.Navigate(FCFG.URL.ServerList);
end;

procedure TForm1.DoUserLogoutNotify(const Msg: string);
var
  s, fNickName: WideString;
  FTargetUserID: Cardinal;
begin
  //<Ret Cmd="2006" UserID="2" ListCount="0"/>
  FXML.Clear;
  FXML.XmlStr := Msg;
  FTargetUserID := StrToInt64Def(FXML.GetField('UserID', -1), 0);
  if FTargetUserID = 0 then exit;

  s := FSDKClient.GetUserInfo(FTargetUserID, fNickName);
  if s = '' then exit;

  if FTargetUserID = FUserInfo.UserID then
  begin
    ListMic.Clear;
    ListUser.Clear;
    ListMng.Clear;
    FLogined := false;
  end
  else
    lmView1.AddContent(fNickName + ' 退出房间!');
end;

procedure TForm1.DoMngCommandNotify(const msg: string);
var
  CmdType: Integer;
  s, fNickName: WideString;
  FUserID: Cardinal;
begin
  //<Ret Cmd="2061" CmdType="1" UserID="1" TargetUserID="2" Param1="0" Param2="0" ErrorCode="0" ListCount="0"/>
  FXML.Clear;
  FXML.XmlStr := msg;
  FUserID := StrToInt64Def(FXML.GetField('TargetUserID', -1), 0);
  if FUserID = 0 then exit;

  s := FSDKClient.GetUserInfo(FUserID, fNickName);
  if s = '' then exit;

  CmdType := StrToIntDef(FXML.GetField('CmdType', -1), -1);
  case CmdType of
    mcxDropUser:
      begin
        if FUserID = FUserInfo.UserID then
        begin
          ListMic.Clear;
          listuser.Clear;
          ListMng.Clear;
          ShowMessage('您已被管理员踢出房间');
        end
        else
          lmView1.AddContent(fNickName + ' 已被管理员踢出房间');
      end;
    mcxSetTempMng: lmView1.AddContent(fNickName + ' 已被提升为临时管理员');
    mcxUnsetTempMng: lmView1.AddContent(fNickName + ' 临时管理员权限已被取消');
  end;
end;

procedure TForm1.FSDKClientMSG(ASender: TObject; const AMsg: WideString);
var
  Cmd: Cardinal;
  s: string;
begin
  Memo2.Lines.Add(AMsg);
  FXML.Clear;
  FXML.XMLStr := AMsg;
  //  listUser.SetAMsg(AMsg);
  ListMic.SetMsg(AMsg);
  listuser.SetMsg(AMsg);
  ListMng.SetMsg(AMsg);
  s := FXML.GetField('Cmd', -1);
  Cmd := StrToIntDef(s, 0);
  case Cmd of
    Cmd_LoginAns: DOLoginAns(AMsg);
    Cmd_Chat: DOChat(AMsg);
    Cmd_TransPack: DoTransPack(AMsg);
    Cmd_UserLogoutNotify: DoUserLogoutNotify(AMsg);
    Cmd_MngCommandNotify: DoMngCommandNotify(AMsg);
    Cmd_GetRoomListAns: DoGetRoomListAns(AMsg);
    Cmd_PlugToUserPack: DoPlugToUserPack(AMsg);
  end;
end;

procedure TForm1.FSDKClientLog(ASender: TObject;
  const ALogMsg: WideString);
begin
  //  Memo2.Lines.Add(ALogMsg);
end;

procedure TForm1.FSDKClientError(ASender: TObject;
  const AErroMsg: WideString);
begin
  Memo2.Lines.Add(AErroMsg);
end;

procedure TForm1.DoGetRoomListAns(const msg: string);
var
  i: Integer;
  FCount: Integer;
  p: pRoomInfo;
begin
  // <?xml version="1.0" encoding="gb2312"?>
  //<Ret  Cmd="1002" ListCount="2">
  //<C0 ID="0" RoomID="1" RoomName="test" RoomMemo="测试房间" RoomType="1" MaxUserCount="60" ChannelCount="2" NeedPassword="0" CurUserCount="0"/>
  //<C1 ID="1" RoomID="2" RoomName="Test" RoomMemo="test" RoomType="1" MaxUserCount="60" ChannelCount="1" NeedPassword="1" CurUserCount="0"/>
  //</Ret>

  for i := RoomList.Items.Count - 1 downto 0 do
  begin
    p := Roomlist.Items[i].Data;
    dispose(p);
    RoomList.Items.Delete(i);
  end;

  FXML.Clear;
  FXML.XmlStr := msg;

  FCount := StrToIntDef(FXML.GetField('ListCount', -1), 0);
  for i := 0 to FCount - 1 do
  begin
    new(p);
    p^.RoomID := StrToIntDef(FXML.GetField('RoomID', i), 0);
    p^.NeedPassWord := StrToBoolDef(FXML.GetField('NeedPassword', i), False);

    p^.RoomName := FXML.GetField('RoomName', i);
    p^.RoomMemo := FXML.GetField('RoomMemo', i);
    p^.RoomType := StrToIntDef(FXML.GetField('RoomType', i), 0);
    p^.MaxUserCount := StrToIntDef(FXML.GetField('MaxUserCount', i), 0);
    p^.ChannelCount := StrToIntDef(FXML.GetField('ChannelCount', i), 0);
    p^.CurUserCount := StrToIntDef(FXML.GetField('CurUserCount', i), 0);
    with RoomList.Items.Add do
    begin
      Data := p;
      Caption := '';
      SubItems.add(IntToStr(p^.RoomID));
      SubItems.Add(p^.RoomName);
      SubItems.Add(p^.RoomMemo);
      SubItems.Add(Format('%d/%d', [p^.CurUserCount, p^.MaxUserCount]));

      if p^.NeedPassWord then
        StateIndex := 1
      else
        StateIndex := 0;
    end;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FCFG := TCFG.Create;
  FCFG.Load;
end;

procedure TForm1.Init(ARoomIP: string; ARoomPort: Word);
var
  FAppPath: string;
begin
  FSDKClient.ServerIP := ARoomIP;
  FSDKClient.ServerPort := ARoomPort;
  FSDKClient.Init;
  FSDKClient.InitChannel(1, pv_1.Handle, 1, True);
  FSDKClient.InitChannel(2, pv_2.Handle, 1, True);

  ListMic.Init;
  ListMic.SetListType(ltMicOrderList);
  ListMic.SetSkin(FCFG.SysInfo.SkinFileName);

  listuser.Init;
  listuser.SetListType(ltUserList);
  listuser.SetSkin(FCFG.SysInfo.SkinFileName);

  ListMng.Init;
  ListMng.SetListType(ltMngList);
  ListMng.SetSkin(FCFG.SysInfo.SkinFileName);

  FAppPath := ExtractFilePath(Application.ExeName);

  lmEdit1.Init(FAppPath + 'Emotion\', FAppPath + 'richface.dat');
  lmView1.Init(FAppPath + 'Emotion\');
end;

procedure TForm1.RoomListDblClick(Sender: TObject);
var
  p: pRoomInfo;
begin
  if RoomList.Selected = nil then exit;
  p := RoomList.Selected.Data;

  //
  FUserInfo.UserID := 0; //游客方式
  FUserInfo.NickName := E_NickName.Text;
  if C_Mng.Checked then
    FUserInfo.MngPassword := E_MngPassWord.Text
  else
    FUserInfo.MngPassword := '';
  FUserInfo.Sex := '男';
  FUserInfo.RoomPassWord := '';
  /////////
  if p^.NeedPassWord then
  begin
    if PassWordForm = nil then
      PassWordForm := TPassWordForm.Create(Self);

    if PassWordForm.ShowModal <> mrok then exit;
    FUserInfo.RoomPassWord := PassWordForm.E_PassWord.Text;
  end;

  FSDKClient.LogOut;
  FSDKClient.Login(p^.RoomID, FUserInfo.UserID, FUserInfo.NickName,
    FUserInfo.Sex, FUserInfo.PassWord, FUserInfo.RoomPassWord, FUserInfo.MngPassword, '');
  FUserInfo.UserID := FUserInfo.UserID;

  ListMic.Clear;
  listuser.Clear;
  ListMng.Clear;
end;

procedure TForm1.lmView1BeforeNavigate2(ASender: TObject;
  const AURL: WideString; var cancel: WordBool);
var
  fUserID: string;
begin
  if CopyStrLeft(AURL, ':') = 'userid' then
  begin
    fUserID := DelStrLeft(AURL, ':');
    E_Targert.Text := fUserID;
    cancel := True;
  end;
end;

procedure TForm1.Web_LeftBeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
var
  s: string;
  fip: string;
begin
  //server|127.0.0.1|5949
  s := string(URL);
  if CopyStrLeft(s, ':') = 'server' then
  begin
    s := DelStrLeft(s, ':');
    fip := CopyStrLeft(s, '|');
    HostToIP(fip, FCFG.SysInfo.RoomHost);
    s := DelStrLeft(s, '|');
    FCFG.SysInfo.RoomPort := StrToIntDef(s, 0);
    if FCFG.SysInfo.RoomPort = 0 then exit;

    Init(FCFG.SysInfo.RoomHost, FCFG.SysInfo.RoomPort);
    FSDKClient.GetRoomList(0);
    Cancel := true;
  end;
end;

procedure TForm1.ListUserMouseDown(ASender: TObject; AButton: TOleEnum;
  AUserID: Cardinal; const ANickName, AUserInfoStr: WideString);
var
  FIsMasterMng, fIsTempMng: Boolean;
  fNickName: WideString;
begin
  FXML.Clear;
  FXML.XMLStr := ListUser.GetUserInfo(FUserInfo.UserID, fNickName);

  FSelUserID := AUserID; //当前选中用户
  FSelUserInfo := AUserInfoStr;
  if AButton = mbRight then
  begin
    FIsMasterMng := StrToBoolDef(FXML.GetField('IsMasterMng', -1), False);
    fIsTempMng := StrToBoolDef(FXML.GetField('IsTempMng', -1), False);

    NUserID.Caption := Format('昵称:%s 号码:%u', [ANickName, AUserID]);
    A_AddMic.Visible := FIsMasterMng or fIsTempMng;
    A_PrepareMic.Visible := FIsMasterMng or fIsTempMng;
    A_CancelMic.Visible := FIsMasterMng or fIsTempMng;
    A_AddMicTick.Visible := FIsMasterMng or fIsTempMng;
    A_DropUser.Visible := FIsMasterMng or fIsTempMng;

    A_SetTempMng.Visible := FIsMasterMng;
    A_UnSetTempMng.Visible := FIsMasterMng;
    Pop_User.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
  end;
end;

procedure TForm1.DoPlugToUserPack(const msg: string);
begin
  {
  <?xml version="1.0" encoding="gb2312"?>
  <Ret Cmd="2301" PlugID="1" Data="" ListCount="0"/>
  }
  FXML.Clear;
  FXML.XmlStr := msg;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  FSDKClient.SendPlugMsg(1, 'test is ok');
end;

procedure TForm1.RoomListCustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
var
  p: pRoomInfo;
begin
  p := Item.Data;
  if SubItem = 1 then
    Sender.Canvas.Font.Color := clRed
  else
    Sender.Canvas.Font.Color := clBlack;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  FSDKClient.CreateRoom('test', 'Memo', '', 'test4545');
end;

procedure TForm1.B_Zoom_1Click(Sender: TObject);
begin
  FSDKClient.ShowScaleForm(1, true);
end;

procedure TForm1.lmEdit1KeyPress(ASender: TObject; var Key: Smallint);
begin
  if (key = 13) then
  begin
    B_Send.Click;
    key := 0;
  end;
end;

procedure TForm1.B_AudioEnable_1Click(Sender: TObject);
begin
  FSDKClient.SetPlayAudioEnable(1, B_AudioEnable_1.Down);
end;

procedure TForm1.B_Zoom_2Click(Sender: TObject);
begin
  FSDKClient.ShowScaleForm(2, true);
end;

end.

⌨️ 快捷键说明

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