Перейти к содержанию
Fire Monkey от А до Я
  • 0

MQTT под Ubuntu Server


fsdb

Вопрос

Ребята подскажите /помогите.

есть вот эта демка http://www.esegece.com/websockets/protocols/mqtt

и использовал crossvcl-trial.

получилось забавно (скриншот 1), но не совсем то что я хотел. GUI мне вообще никак не нужен.  но в противном случае компоненты ведут себя странно если консольное приложение см скриншот 2. на топики не подписывается, т.е. подписка работает только если VCL и мы подписку в кнопке сделали, а не сразу после подключения к серверу(даже если добавить пазузу не помогает) (в кнсольном). не формируется GUID (скриншот 2)  и вообще как то странно себя ведет ИМЕННО В КОНСОЛЬНОМ ПРИЛОЕЖЕНИИ хоть под линукс, хоть под Windows. только если VCL. как будто часть задач отрезали. ошибок не выводит,не понятно что происходит. код прилагаю. я не силен  в дельфи- помогите.

image.thumb.png.8b27369d763c5fd55ff19fdc0972a268.png

 

image.png.7cc89d88cfd73386f4907c6c857bc562.png

 

 

program LinuxMQTT;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  sgcWebSocket_Classes,
  sgcWebSocket_Client,
  sgcWebSocket,
  sgcWebSocket_Protocol_Base_Client,
  idGlobal,
  sgcWebSocket_Protocols,
  sgcWebSocket_Types,
  sgcWebSocket_Classes_Indy,
  sgcWebSocket_Protocol_MQTT_Client,
  sgcWebSocket_Protocol_MQTT_Message;

Type
  OnMyPublish = Class
procedure OnMQTTPublish(Connection: TsgcWSConnection; aTopic, aText: string);

  end;


 procedure  OnMyPublish.OnMQTTPublish(Connection: TsgcWSConnection; aTopic: string; aText: string);
 begin
 writeln(aTopic+aText);
 end;



  var
   WSClient: TsgcWebSocketClient;
   MQTT:TsgcWSProtocol_MQTT_Client;

   MyPublish:OnMyPublish;


begin




  WSClient:=TsgcWebSocketClient.Create(nil);



  WSClient.ConnectTimeout:=0;
    WSClient.TLS:=false;

      WSClient.Proxy.Enabled := false;
  WSClient.Proxy.Username := '';
  WSClient.Proxy.Password := '';
  WSClient.Proxy.Host := '';

  WSClient.Port:=80;
  WSClient.Host :='192.168.1.40';      //40



  WSClient.Authentication.Basic.Enabled:=false;
   WSClient.Authentication.Enabled:=false;
  WSClient.Authentication.User:='';
  WSClient.Authentication.Password:='';
 WSClient.Authentication.URL.Enabled:=true;
  WSClient.Authentication.Session.Enabled:=true;

 WSClient.Extensions.DeflateFrame.Enabled:=false;
WSClient.Extensions.DeflateFrame.WindowBits:=15;


WSClient.Extensions.PerMessage_Deflate.ClientMaxWindowBits:=15;
WSClient.Extensions.PerMessage_Deflate.ClientNoContextTakeOver:=false;
WSClient.Extensions.PerMessage_Deflate.Enabled:=false;
WSClient.Extensions.PerMessage_Deflate.MemLevel:=1;
WSClient.Extensions.PerMessage_Deflate.ServerMaxWindowBits:=15;
WSClient.Extensions.PerMessage_Deflate.ServerNoContextTakeOver:=false;


  WSClient.ConnectTimeout:=0;
   WSClient.Extensions.DeflateFrame.Enabled:=false;
WSClient.Extensions.DeflateFrame.WindowBits:=15;
   WSClient.NotifyEvents:=neAsynchronous;
  WSClient.IPVersion:=idGlobal.TIdIPVersion(Id_IPv4);
  WSClient.HeartBeat.Enabled:=false;
    WSClient.HeartBeat.Interval:=300;
  WSClient.HeartBeat.Timeout:=0;



  WSClient.NotifyEvents:=sgcWebSocket_Types.TwsNotifyEvent(neAsynchronous);
  WSClient.Options.FragmentedMessages:=frgOnlyBuffer;
  WSClient.Options.Origin:='';
  WSClient.Options.Parameters:='/ws';
  WSClient.Options.RaiseDisconnectExceptions:=True;



  WSClient.Specifications.Drafts.Hixie76:=false;
  WSClient.Specifications.RFC6455:=true;


  WSClient.ReadTimeout:=-1;

  WSClient.TLS:=false;



 MQTT:=TsgcWSPClient_MQTT.Create(nil);
 MyPublish:=OnMyPublish.Create;

 MQTT.OnMQTTPublish:=MyPublish.OnMQTTPublish;


 MQTT.Authentication.Enabled:=false;
 MQTT.Authentication.Password:='';
 MQTT.Authentication.UserName:='';
 MQTT.Client:=WSClient;
 MQTT.Guid:='';
 MQTT.HeartBeat.Enabled:=true;
 MQTT.HeartBeat.Interval:=300;

 MQTT.Authentication.Enabled := false;
 MQTT.Authentication.UserName := ''; // requires username
 MQTT.Authentication.Password := ''; // requires username

 MQTT.LastWillTestament.Enabled:=false;
 MQTT.LastWillTestament.QoS:=mtqsAtMostOnce;
 MQTT.LastWillTestament.Retain:=false;
 MQTT.LastWillTestament.Text:='';
 MQTT.LastWillTestament.Topic:='';



 WSClient.Active := True;

// MQTT.Connect;



 MQTT.Subscribe('tms/chat');
 //получение инфы


 MQTT.Publish('tms/chat', '3333333', TmqttQoS(0), false);
 //раздача инфы





end.

 

 

 

 

Изменено пользователем fsdb
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Для начала под linux нет VCL. Есть только FMX. VCL - это исключительно win-приложения. Под linux они запускаются по средствам wine, и все проблемы работы приложения на плечах этих ребят. Тут вам ни чем не помогут.

Так же не совсем понятны скриншоты окна к консольному приложению. С sgc я не работал, но если интересуют причины не работы - надо под отладником на целевой платформе копаться в их коде копаться в их коде.
 

Ссылка на комментарий
  • 0

Я в понятиях не спец но я использовал crossvcl-trial которая позволила создавать окна на Linux Desktop а sgc  компоненты под Linux могут быть использованы.Таким образом на первом скриншоте у меня получилась рабочая связка. работает хорошо. но меня не интересует GUI совершенно.

Скриншот консольного приложения показывает момент авторизации пользователя на MQTT сервере, т.е. он как unknown  и почему то GUID не формирует сам компонент (хотя ранее формировал). выше можно увидеть строчки с нормальным соединением выполненное другим клиентом (иное ПО)

Отладчик работает без ошибок. консольное приложение может быть на Windows и на Lunix , если я переключаю на Windows то происходит тоже самое. те же самые логи на сервере. т.е. не под Windows Console не под Linux Console не удается нормально подключиться к серверу. как дальше попытаться разобраться? методика?

мне кажется если исправить эту ситуацию в Windows Console то и в Linux Console будет работать.

 

моя конечная цель, однако тут использован другой компонент.

 

Изменено пользователем Александр Лукьянов (Filament Extruder 1.75)
Ссылка на комментарий
  • 0

В дельфи не силен, нечего и начинать. 

Под никсы, по взрослому, нужен GCC, QT Creator и https://github.com/eclipse/paho.mqtt.embedded-c или https://github.com/eclipse/paho.mqtt.cpp.

Если сильно хочется VCL, можно под CBuilder собрать.

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...