Пример отправки сообщения в MyChat на Delphi XE3

Пример отправки сообщения в MyChat на Delphi XE3

Строго говоря, программа может быть написана на чём угодно, потому что используется стандартный для всех программ в Windows механизм динамических библиотек — DLL. Но автору статьи ближе всего среда программирования Delphi, поэтому пример будет именно на ней.

 

Наше приложение будет консольным, без интерфейса пользователя. Запускаем среду программирования и выбираем в главном меню "File" — "New" — "Other":

 

Создание нового проекта для MyChat Integration API в Delphi XE3

 

И из открывшегося окна выбираем "Console Application":

 

Console Application for MyChat Integration API in Delphi XE3
 

Поскольку для нашей первой программы не нужен никакой графический интерфейс, консольное приложение подойдёт лучше всего.

 

Нам понадобится 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
// support@nsoft-s.com
//
// Тестировалось на 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.

 

Полученное сообщение на клиенте выглядит вот так:

 

Сообщение в MyChat Client, отправленное из внешней библиотеки MyChat Integration API

 

Ещё посмотреть

1C 8.xx / 1С через REST

C#

Java

Python

Работа через сокеты