auto try connect + upgrade (when no initial connection yet)
This commit is contained in:
parent
be087753c5
commit
28aa5d1a7a
2 changed files with 27 additions and 4 deletions
|
@ -55,6 +55,9 @@ type
|
||||||
|
|
||||||
function TryUpgradeToWebsocket: Boolean;
|
function TryUpgradeToWebsocket: Boolean;
|
||||||
procedure UpgradeToWebsocket;
|
procedure UpgradeToWebsocket;
|
||||||
|
|
||||||
|
procedure Connect; override;
|
||||||
|
function TryConnect: Boolean;
|
||||||
procedure Disconnect(ANotifyPeer: Boolean); override;
|
procedure Disconnect(ANotifyPeer: Boolean); override;
|
||||||
|
|
||||||
property IOHandler: TIdIOHandlerWebsocket read GetIOHandlerWS write SetIOHandlerWS;
|
property IOHandler: TIdIOHandlerWebsocket read GetIOHandlerWS write SetIOHandlerWS;
|
||||||
|
@ -234,6 +237,12 @@ begin
|
||||||
end);
|
end);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TIdHTTPWebsocketClient.Connect;
|
||||||
|
begin
|
||||||
|
FHeartBeat.Enabled := True;
|
||||||
|
inherited Connect;
|
||||||
|
end;
|
||||||
|
|
||||||
destructor TIdHTTPWebsocketClient.Destroy;
|
destructor TIdHTTPWebsocketClient.Destroy;
|
||||||
var tmr: TObject;
|
var tmr: TObject;
|
||||||
begin
|
begin
|
||||||
|
@ -342,6 +351,20 @@ begin
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TIdHTTPWebsocketClient.TryConnect: Boolean;
|
||||||
|
begin
|
||||||
|
try
|
||||||
|
if Connected then Exit(True);
|
||||||
|
|
||||||
|
Connect;
|
||||||
|
Result := Connected;
|
||||||
|
if Result and SocketIOCompatible then
|
||||||
|
Result := TryUpgradeToWebsocket;
|
||||||
|
except
|
||||||
|
Result := False;
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
|
||||||
function TIdHTTPWebsocketClient.TryUpgradeToWebsocket: Boolean;
|
function TIdHTTPWebsocketClient.TryUpgradeToWebsocket: Boolean;
|
||||||
var
|
var
|
||||||
sError: string;
|
sError: string;
|
||||||
|
|
|
@ -6094,7 +6094,7 @@ function TSuperRttiContext.FromJson(TypeInfo: PTypeInfo; const obj: ISuperObject
|
||||||
begin
|
begin
|
||||||
if ObjectIsType(obj, stObject) and (f.FieldType <> nil) then
|
if ObjectIsType(obj, stObject) and (f.FieldType <> nil) then
|
||||||
begin
|
begin
|
||||||
p := IValueData(TValueData(Value).FHeapData).GetReferenceToRawData;
|
p := IValueData(TValueData(Value).FValueData).GetReferenceToRawData;
|
||||||
Result := FromJson(f.FieldType.Handle, GetFieldDefault(f, obj.AsObject[GetFieldName(f)]), v);
|
Result := FromJson(f.FieldType.Handle, GetFieldDefault(f, obj.AsObject[GetFieldName(f)]), v);
|
||||||
if Result then
|
if Result then
|
||||||
f.SetValue(p, v) else
|
f.SetValue(p, v) else
|
||||||
|
@ -6408,7 +6408,7 @@ function TSuperRttiContext.ToJson(var value: TValue; const index: ISuperObject):
|
||||||
Result := TSuperObject.Create(stObject);
|
Result := TSuperObject.Create(stObject);
|
||||||
for f in Context.GetType(Value.TypeInfo).GetFields do
|
for f in Context.GetType(Value.TypeInfo).GetFields do
|
||||||
begin
|
begin
|
||||||
v := f.GetValue(IValueData(TValueData(Value).FHeapData).GetReferenceToRawData);
|
v := f.GetValue(IValueData(TValueData(Value).FValueData).GetReferenceToRawData);
|
||||||
Result.AsObject[GetFieldName(f)] := ToJson(v, index);
|
Result.AsObject[GetFieldName(f)] := ToJson(v, index);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
@ -6483,8 +6483,8 @@ function TSuperRttiContext.ToJson(var value: TValue; const index: ISuperObject):
|
||||||
|
|
||||||
procedure ToInterface;
|
procedure ToInterface;
|
||||||
begin
|
begin
|
||||||
if TValueData(Value).FHeapData <> nil then
|
if TValueData(Value).FValueData <> nil then
|
||||||
TValueData(Value).FHeapData.QueryInterface(ISuperObject, Result) else
|
TValueData(Value).FValueData.QueryInterface(ISuperObject, Result) else
|
||||||
Result := nil;
|
Result := nil;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue