• 0
Авторизация  
fsdb

MQTT под Ubuntu Server

Вопросы

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

есть вот эта демка 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 ответов на этот вопрос

  • 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 собрать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

ну ничего. шишки набивать надо. ото так вас послушать так если ничего не выходит то надо все бросить))) жалко ответа по существу не дали. ну ок

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

Авторизация  

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

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