📄 usdk_demo.~pas
字号:
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 + -