Событие получения специальной команды отправки RAW данных от одного плагина MyChat Client — другому. Команды отправки RAW данных нужны для того, чтобы клиентские плагины могли обмениваться данными произвольного формата между собой по сети, используя стандартный протокол MyChat.
function OnClientPluginSendRawData(iCID, iUINFrom, iUINTo: integer; sPluginNameFrom, sPluginNameTo, sData: string): boolean;
begin
// your own code
result := true;
end;
begin
end.
Вместо комментария может быть любой ваш код.
Параметр |
Тип |
Значение |
---|---|---|
iCID |
integer |
Connection ID клиента-отправителя, уникальный сеансовый идентификатор в онлайн-структуре сетевых подключений к серверу; |
iUINFrom |
integer |
уникальный идентификатор отправителя команды (число > 0); |
iUINTo |
integer |
уникальный идентификатор получателя команды (число > 0); |
sPluginNameFrom |
string |
название плагина-отправителя команды. Регистр имени имеет значение; |
sPluginNameTo |
string |
название плагина-получателя команды. Регистр имени имеет значение; |
sData |
string |
текстовые данные RAW-сообщения. |
True, если вы пропускаете это сообщение, False — если блокируете.
Задача: есть руководители подразделений, им нужно разрешить запускать плагин UltraVNC для удалённого просмотра по сети экранов компьютеров сотрудников, но только своих подразделений. Управлять мышкой и клавиатурой — нельзя. Скрипт должен также отправлять соответствующие уведомления о невозможности начать сеанс удалённого просмотра экрана, если пользователю это запрещено.
Администраторов сети эти ограничения касаться не должны.
const
sAdmGroup = 'Администраторы';
sErrMsg1 = 'У вас нет доступа к этому пользователю';
sErrMsg2 = 'Вы можете только просматривать экран этого пользователя';
function OnClientPluginSendRawData(iCID, iUINFrom, iUINTo: integer; sPluginNameFrom, sPluginNameTo, sData: string): boolean;
var
bFlag: boolean;
iDeptID1, iDeptID2: integer;
sMsg: string;
begin
bFlag := true;
// если пользователь открывает плагин VNCClient
if (sPluginNameFrom = 'VNCClient') and (sPluginNameTo = 'VNCServer') then
// если это не пользователь из группы прав "Администраторы"
if mGetRoleNameByID(mGetUserRoleID(iUINFrom)) <> sAdmGroup then begin
// если пользователь собирается только смотреть экран удалёного компьютера
if sData = 'VNCGETLOCALIPS-VIEW' then begin
bFlag := false;
iDeptID1 := mGetUserDepartmentID(iUINFrom);
iDeptID2 := mGetUserDepartmentID(iUINTo);
// если пользователи из одного и того же подразделения
// и iUINFrom - руководитель этого подразделения
if iDeptID1 = iDeptID2 then bFlag := mIsUserTeamLead(iUINFrom);
if not bFlag then sMsg := sErrMsg1;
end else
// если пользователь собирается контролировать мышку и клавиатуру,
// то запрещаем эму открывать сеанс VNC
if sData = 'VNCGETLOCALIPS-CONTROL' then begin
sMsg := sErrMsg2;
bFlag := false;
end;
if not bFlag then
// отправляем пользователю сообщение о невозможности
// открыть сеанс удалённого администрирования
mSendCustomMsgToClientConsoleByCID(iCID,
sMsg +
' (' + mGetUserAttribute(iUINTo, 'DisplayName') + ')',
'Error', true, true, 77);
end;
result := bFlag;
end;
begin
end.
mSendCustomMsgToClientConsoleByCID