Страница 1 из 1

Небольшой пример клиента (source Delphi XE6)

СообщениеДобавлено: Пт авг 22, 2014 1:41 pm
SV
Небольшой пример общения между сервером MyChat 5.6 и простенького клиента на Delphi.

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

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

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

Думаю этого достаточно для понятия принципа работы с сервером.
Использовалась документация http://www.nsoft-s.com/mychat/MyChatJSONprotocol.txt
и конечно помощь авторов чата, за что и большое спасибо.

Re: Небольшой пример клиента 5.6(Source Delphi XE6)

СообщениеДобавлено: Сб авг 23, 2014 12:25 pm
yurasek
У меня при попытке авторизоваться на сервере возвращает ошибку "ErrNum":14
Чтобы это могло значить?

Re: Небольшой пример клиента 5.6(Source Delphi XE6)

СообщениеДобавлено: Вс авг 24, 2014 6:21 pm
SV
yurasek писал(а):У меня при попытке авторизоваться на сервере возвращает ошибку "ErrNum":14
Чтобы это могло значить?

По моему это означает, не правильный логин или пароль.
При авторизации в этом клиенте нужно указывать UID и пароль.

Re: Небольшой пример клиента 5.6(Source Delphi XE6)

СообщениеДобавлено: Вс авг 24, 2014 10:03 pm
Андрей Раков
Список ошибок можно найти в файле клиента russian.ini, раздел Errors (папка languages).

Re: Небольшой пример клиента 5.6(Source Delphi XE6)

СообщениеДобавлено: Вс авг 24, 2014 10:20 pm
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;


Обновил исходник.

Re: Небольшой пример клиента 5.6(Source Delphi XE6)

СообщениеДобавлено: Вс авг 24, 2014 11:08 pm
yurasek
SV, теперь всё работает. Спасибо за пример.

Re: Небольшой пример клиента 5.6(Source Delphi XE6)

СообщениеДобавлено: Пн авг 25, 2014 6:46 am
SV
Не за что.

Re: Небольшой пример клиента 5.6(Source Delphi XE6)

СообщениеДобавлено: Пн авг 25, 2014 5:19 pm
SV
Закрепите пожалуйста тему. Для других программистов.

Re: Небольшой пример клиента 5.6(Source Delphi XE6)

СообщениеДобавлено: Пн авг 25, 2014 6:48 pm
Алексей Пикуров
Сделано, спасибо за работу.

Re: Небольшой пример клиента 5.6(Source Delphi XE6)

СообщениеДобавлено: Вт авг 26, 2014 7:10 am
SV
Вам спасибо, за помощь.

Re: Небольшой пример клиента 5.6(Source Delphi XE6)

СообщениеДобавлено: Вт авг 26, 2014 12:06 pm
SV
Поправил исходник немного.
  • Добавил отправку сообщений в различные каналы.
  • И приём сообщений в соответствующие вкладки.
Исходник в шапке.

Re: Небольшой пример клиента (source Delphi XE6)

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