Приклад відправки повідомлення MyChat на Delphi XE3
Чесно кажучи, програма може бути написана на будь-чому, тому що використовується стандартний для всіх програм у Windows механізм динамічних бібліотек — DLL. Але авторові статті найближче середовище програмування Delphi, тому приклад буде саме на ній.
Наша програма буде консольною, без інтерфейсу користувача. Запускаємо середовище програмування та вибираємо у головному меню "File" — "New" — "Other":
І у відкритому вікні обираємо "Console Application":
Оскільки для нашої першої програми не потрібен ніякий графічний інтерфейс, консольний додаток підійде найкраще.
Нам знадобиться 32-розрядна DLL бібліотека MyChat Integration API (C:\Program Files (x86)\MyChat Server\doc\IntegrationAPI\MyChatIntegrationAPIDLLs\x32\mychat.dll) завдяки якій ми зможемо підключитися до сервера MyChat і відправити текстове повідомлення.
Простий приклад показує, як відправити приватне тестове повідомлення, що складається з двох рядків, від імені вбудованого робота Elisa.
Текст програми:
// MyChat Integration API sample
// Copyright (c) 2012-2016 by Alexey Pikurov / Network Software Solutions
// https://nsoft-s.com/aboutmychat.html
// [email protected]
//
// Тестувалось на Delphi XE3
// Підтримка, питання, коментарі: https://nsoft-s.com/forum
//
// 22.02.2016
program TestMyChatDLL;
{$APPTYPE CONSOLE}
uses Windows;
const
MCIAPI_CS_SendPrivateMessage = 2;
MCIAPI_CS_IsUINOnline = 3;
MCIAPI_CS_SendChannelMessage = 4;
MCIAPI_CS_GetUINByNick = 5;
MCIAPI_CS_GetUINByEmail = 6;
MCIAPI_CS_IsUINExists = 7;
MCIAPI_CS_AddBBSMessage = 8;
MCIAPI_SC_SetChannelTopic = 9;
MCIAPI_CS_GetChannelNameByUID = 10;
MCIAPI_CS_IsChannelExists = 11;
MCIAPI_CS_GetUINByADLogin = 12;
MCIAPI_CS_GetInfoByUIN = 13;
MCIAPI_CS_GetServerInfo = 14;
var
mychatGetLibVersion: function:WideString;safecall;
mychatGetLibReleaseDate: function:WideString;safecall;
mychatSendData: function (sIP: WideString; iPort: DWORD; sServerKey: WideString; iCmd: DWORD; sJSONData: WideString): WideString;safecall;
LibHandle: THandle;
sData: WideString;
begin
// чистимо змінні від сміття
@mychatGetLibVersion := nil;
@mychatGetLibReleaseDate := nil;
@mychatSendData := nil;
// намагаємось завантажити бібліотеку
LibHandle := LoadLibrary('mychat.dll');
// якщо все ОК
if LibHandle >= 32 then begin
// ...то намагаємось отримати адресу функції в бібліотеці
@mychatGetLibVersion := GetProcAddress(LibHandle, 'mychatGetLibVersion');
@mychatGetLibReleaseDate := GetProcAddress(LibHandle, 'mychatGetLibReleaseDate');
@mychatSendData := GetProcAddress(LibHandle, 'mychatSendData');
Writeln(mychatGetLibVersion + ' / ' + mychatGetLibReleaseDate);
// якщо і тут все ОК
sData := '{"UserTo":"6","UserFrom":"0","Msg":"Привіт'+ #13#10#13#10 + 'Просто нагадую, що треба додати скріншоти в останню статтю!"}';
if @mychatSendData <> nil then
// ...то викликаємо цю функцію і показуємо результат
writeln(mychatSendData('mychat-server.com', 2004, 'iddqd' , MCIAPI_CS_SendPrivateMessage, sData));
end;
// ...і не забуваємо звільнити пам'ять і вивантажити DLL
FreeLibrary(LibHandle);
end.
Отримане повідомлення на клієнті виглядає так: