MSL: событие OnClientPluginSendRawData

Скриптовое событие 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 - руководитель этого подразделения
            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