Anonymous User
  Friday, 28 March 2025
  4 Replies
  52 Visits
  Subscribe
This code can successfully connect to the websocket, but the custom heartbeat doesn't work. If I use the commented-out part of the code, the custom heartbeat works fine. How should I modify my code?

unit Unit1;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
sgcBase_Classes, sgcSocket_Classes, sgcTCP_Classes, sgcWebSocket_Classes, sgcWebSocket_Classes_Indy, sgcWebSocket_Client, sgcWebSocket,
Vcl.StdCtrls, qstring, sgcWebSocket_Types;

type
TForm1 = class(TForm)
sgcWebSocketClient1: TsgcWebSocketClient;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure sgcWebSocketClient1Message(Connection: TsgcWSConnection; const Text: string);
procedure sgcWebSocketClient1BeforeHeartBeat(Sender: TObject; const Connection: TsgcWSConnection; var Handled: Boolean);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
Fws: TsgcWebSocketClient;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
// sgcWebSocketClient1.HeartBeat.Enabled := True;
// sgcWebSocketClient1.url := 'ws://124.222.6.60:8800';
// if sgcWebSocketClient1.Connect(5000) then
// begin
// sgcWebSocketClient1.WriteData('你好');
// Fws.HeartBeat.Interval := 3;
// end;
fws.HeartBeat.Enabled := True;
fws.url := 'ws://124.222.6.60:8800';
if fws.Connect(5000) then
begin
fws.WriteData('你好');
Fws.HeartBeat.Interval := 3;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Fws := TsgcWebSocketClient.Create(Form1);
Fws.OnMessage := sgcWebSocketClient1Message;
Fws.OnBeforeHeartBeat := sgcWebSocketClient1BeforeHeartBeat;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
Fws.Free;
end;

procedure TForm1.sgcWebSocketClient1BeforeHeartBeat(Sender: TObject; const Connection: TsgcWSConnection; var Handled: Boolean);
begin
Connection.WriteData(DateTimeToStr(now) + '==>心跳包');
Handled := True;
end;

procedure TForm1.sgcWebSocketClient1Message(Connection: TsgcWSConnection; const Text: string);
begin
Debugout(Text);
end;

end.
4 days ago
·
#2256
Could you please help me take a look at this?
Attachments (1)
4 days ago
·
#2257
Hello,

You must set the heartbeat interval before connecting


  fws.HeartBeat.Enabled := True;
  Fws.HeartBeat.Interval := 3;
  fws.url := 'ws://124.222.6.60:8800';
  if fws.Connect(5000) then
  begin
    fws.WriteData('ÄãºÃ');
  end;


Kind Regards,
Sergio
2 days ago
·
#2258
Hello,

You must set the heartbeat interval before connecting


  fws.HeartBeat.Enabled := True;
  Fws.HeartBeat.Interval := 3;
  fws.url := 'ws://124.222.6.60:8800';
  if fws.Connect(5000) then
  begin
    fws.WriteData('ÄãºÃ');
  end;


Kind Regards,
Sergio
After I create a component in a thread, it seems the heartbeat stops working again. Do I need any special settings?
1 day ago
·
#2259
My bad, it was a coding problem. Don't bother with my question!
  • Page :
  • 1
There are no replies made for this post yet.
Submit Your Response
Upload files or images for this discussion by clicking on the upload button below.
Supported: gif,jpg,png,jpeg,zip,rar,pdf,pas,dfm,dpr,dproj,dpk
· Insert · Remove
  Upload Files (Maximum 10MB)