Подія отримання спеціальної команди надсилання 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.


Дивитися ще

mGetRoleNameByID

mGetUserAttribute

mGetUserDepartmentID

mGetUserRoleID

mIsUserTeamLead

mSendCustomMsgToClientConsoleByCID