Скриптова подія MyChat Server: OnClientPluginSendRawData
Подія отримання спеціальної команди надсилання 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 - chief department
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.