Роботы, плагины и скрипты к чату MyChat. Разработка альтернативных клиентов и различных утилит. Технические вопросы по программированию, замечания и предложения по развитию API
Аватара пользователя
SV
Небольшой пример общения между сервером MyChat 5.6 и простенького клиента на Delphi.

  • Авторизация на сервере
  • Отправка и получения сообщений

Поправил исходник немного.
  • Добавил отправку сообщений в различные каналы.
  • И приём сообщений в соответствующие вкладки.

[Версия 5.7.0]
Исправлены мелкие недоделки:
  • Реализована автоматическая смена версии протокола
  • И версия клиента
Это было сделано связи с тем чтобы не обновлять каждый раз исходник, после выхода новых версий сервера.
Версию протока и версию сервера клиент узнаёт при получении команды sc_hello, по средством этого и
автоматически в ответ отправляет ту же версию протокола и клиента серверу.

Думаю этого достаточно для понятия принципа работы с сервером.
Использовалась документация http://www.nsoft-s.com/mychat/MyChatJSONprotocol.txt
и конечно помощь авторов чата, за что и большое спасибо.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось SV Ср сен 10, 2014 2:07 pm, всего редактировалось 11 раз(а).
yurasek
У меня при попытке авторизоваться на сервере возвращает ошибку "ErrNum":14
Чтобы это могло значить?
Аватара пользователя
SV
yurasek писал(а):У меня при попытке авторизоваться на сервере возвращает ошибку "ErrNum":14
Чтобы это могло значить?

По моему это означает, не правильный логин или пароль.
При авторизации в этом клиенте нужно указывать UID и пароль.
Аватара пользователя
Андрей Раков
Список ошибок можно найти в файле клиента russian.ini, раздел Errors (папка languages).
Аватара пользователя
SV
Кстати в исходнике есть косяк поправь функцию логина:

Код: Выделить всё

function my_login(UIN:Integer; Pass:String):WideString;
var
  JSONobj: ISuperObject;
begin
  JSONobj := SO();
  JSONobj.I['UIN']    := UIN;
  JSONobj.S['Pass']   := Pass;
  JSONobj.S['Email']  := '[email protected]';
  JSONobj.S['Nick']   := 'SV';
  JSONobj.I['State']  := 0;
  JSONobj.S['Domain'] := '';

  result := JSONobj.AsJSon;
  JSONobj.Clear(true);
  JSONobj := nil;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
begin
   IdTCPClient1.Host := Edit3.Text;
   IdTCPClient1.Port := StrToInt(Edit4.Text);

   IdTCPClient1.Connect;

   //Отправляем серверу что мы хоть подключиться
   IdTCPClient1.Socket.WriteLn('mc5.6' + '{"Secured":""}');

   //Отправляем приветствие
   IdTCPClient1.Socket.WriteLn(MagicString + cs_hello + SendingFlags + my_hello);

   //Логинимся
   IdTCPClient1.Socket.WriteLn(MagicString + cs_login + SendingFlags + my_login(StrTOInt(Edit1.Text), Edit2.text));

   //Пингуем сервер, иначе отключит
   IdTCPClient1.Socket.WriteLn(MagicString + cs_ping + SendingFlags + my_ping);

   MyThread:=TMyThread.Create(False);
   MyThread.Priority:=tpNormal;

   if Timer1.Enabled = False then
     Timer1.Enabled := True;

   Form1.Caption := 'Online';
   Button1.Enabled := False;

   for i:= 0 to Form1.ComponentCount - 1 do
    if Form1.Components[i] is TEdit then
     (Form1.Components[i] as TEdit).Enabled := False;
end;


Обновил исходник.
Последний раз редактировалось SV Пн авг 25, 2014 6:53 am, всего редактировалось 1 раз.
yurasek
SV, теперь всё работает. Спасибо за пример.
Аватара пользователя
SV
Не за что.
Аватара пользователя
SV
Закрепите пожалуйста тему. Для других программистов.
Аватара пользователя
Алексей Пикуров
Сделано, спасибо за работу.
Аватара пользователя
SV
Вам спасибо, за помощь.
Аватара пользователя
SV
Поправил исходник немного.
  • Добавил отправку сообщений в различные каналы.
  • И приём сообщений в соответствующие вкладки.
Исходник в шапке.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
SV
[Версия 5.7.0]
Исправлены мелкие недоделки:
  • Реализована автоматическая смена версии протокола
  • И версия клиента
Это было сделано связи с тем чтобы не обновлять каждый раз исходник, после выхода новых версий сервера.
Версию протока и версию сервера клиент узнаёт при получении команды sc_hello, по средством этого и
автоматически в ответ отправляет ту же версию протокола и клиента серверу.