mirror of https://gitlab.com/basile.b/dexed.git
fix, editor freezes if DCD haz crashed, fix #22
This commit is contained in:
parent
6842050c6f
commit
5004840dde
|
|
@ -27,11 +27,13 @@ type
|
|||
fServerWasRunning: boolean;
|
||||
fClient, fServer: TProcess;
|
||||
fAvailable: boolean;
|
||||
fServerListening: boolean;
|
||||
fDoc: TCESynMemo;
|
||||
fProj: TCENativeProject;
|
||||
procedure killServer;
|
||||
procedure terminateClient;
|
||||
procedure waitClient;
|
||||
procedure updateServerlistening;
|
||||
//
|
||||
procedure projNew(aProject: ICECommonProject);
|
||||
procedure projChanged(aProject: ICECommonProject);
|
||||
|
|
@ -61,11 +63,12 @@ var
|
|||
|
||||
implementation
|
||||
|
||||
{$REGION Standard Comp/Obj------------------------------------------------------}
|
||||
constructor TCEDcdWrapper.create(aOwner: TComponent);
|
||||
const
|
||||
clientName = 'dcd-client' + exeExt;
|
||||
serverName = 'dcd-server' + exeExt;
|
||||
|
||||
{$REGION Standard Comp/Obj------------------------------------------------------}
|
||||
constructor TCEDcdWrapper.create(aOwner: TComponent);
|
||||
begin
|
||||
inherited;
|
||||
//
|
||||
|
|
@ -92,10 +95,16 @@ begin
|
|||
|
||||
if (fServer <> nil) then
|
||||
fServer.Execute;
|
||||
updateServerlistening;
|
||||
//
|
||||
EntitiesConnector.addObserver(self);
|
||||
end;
|
||||
|
||||
procedure TCEDcdWrapper.updateServerlistening;
|
||||
begin
|
||||
fServerListening := AppIsRunning((serverName));
|
||||
end;
|
||||
|
||||
destructor TCEDcdWrapper.destroy;
|
||||
begin
|
||||
EntitiesConnector.removeObserver(self);
|
||||
|
|
@ -204,6 +213,7 @@ end;
|
|||
procedure TCEDcdWrapper.killServer;
|
||||
begin
|
||||
if not fAvailable then exit;
|
||||
if not fServerListening then exit;
|
||||
//
|
||||
fClient.Parameters.Clear;
|
||||
fClient.Parameters.Add('--shutdown');
|
||||
|
|
@ -226,6 +236,7 @@ end;
|
|||
procedure TCEDcdWrapper.addImportFolder(const aFolder: string);
|
||||
begin
|
||||
if not fAvailable then exit;
|
||||
if not fServerListening then exit;
|
||||
//
|
||||
if fImportCache.IndexOf(aFolder) <> -1 then exit;
|
||||
fImportCache.Add(aFolder);
|
||||
|
|
@ -238,6 +249,7 @@ end;
|
|||
procedure TCEDcdWrapper.getCallTip(out tips: string);
|
||||
begin
|
||||
if not fAvailable then exit;
|
||||
if not fServerListening then exit;
|
||||
if fDoc = nil then exit;
|
||||
//
|
||||
fTempLines.Assign(fDoc.Lines);
|
||||
|
|
@ -252,7 +264,11 @@ begin
|
|||
fClient.Execute;
|
||||
//
|
||||
fTempLines.LoadFromStream(fClient.Output);
|
||||
if fTempLines.Count = 0 then exit;
|
||||
if fTempLines.Count = 0 then
|
||||
begin
|
||||
updateServerlistening;
|
||||
exit;
|
||||
end;
|
||||
if not (fTempLines.Strings[0] = 'calltips') then exit;
|
||||
//
|
||||
fTempLines.Delete(0);
|
||||
|
|
@ -267,6 +283,7 @@ var
|
|||
item: string;
|
||||
begin
|
||||
if not fAvailable then exit;
|
||||
if not fServerListening then exit;
|
||||
if fDoc = nil then exit;
|
||||
//
|
||||
fTempLines.Assign(fDoc.Lines);
|
||||
|
|
@ -281,7 +298,11 @@ begin
|
|||
fClient.Execute;
|
||||
//
|
||||
fTempLines.LoadFromStream(fClient.Output);
|
||||
if fTempLines.Count = 0 then exit;
|
||||
if fTempLines.Count = 0 then
|
||||
begin
|
||||
updateServerlistening;
|
||||
exit;
|
||||
end;
|
||||
if not (fTempLines.Strings[0] = 'identifiers') then exit;
|
||||
//
|
||||
aList.Clear;
|
||||
|
|
@ -318,6 +339,7 @@ var
|
|||
i: Integer;
|
||||
begin
|
||||
if not fAvailable then exit;
|
||||
if not fServerListening then exit;
|
||||
if fDoc = nil then exit;
|
||||
//
|
||||
i := fDoc.MouseStart;
|
||||
|
|
@ -337,6 +359,8 @@ begin
|
|||
//
|
||||
aComment := '';
|
||||
fTempLines.LoadFromStream(fClient.Output);
|
||||
if fTempLines.Count = 0 then
|
||||
updateServerlistening;
|
||||
for i := 0 to fTempLines.Count-1 do
|
||||
aComment += ReplaceStr(fTempLines.Strings[i], '\n', LineEnding);
|
||||
end;
|
||||
|
|
@ -347,6 +371,7 @@ var
|
|||
str, loc: string;
|
||||
begin
|
||||
if not fAvailable then exit;
|
||||
if not fServerListening then exit;
|
||||
if fDoc = nil then exit;
|
||||
//
|
||||
fTempLines.Assign(fDoc.Lines);
|
||||
|
|
@ -364,6 +389,8 @@ begin
|
|||
str := 'a';
|
||||
setlength(str, 256);
|
||||
i := fClient.Output.Read(str[1], 256);
|
||||
if i = 0 then
|
||||
updateServerlistening;
|
||||
setLength(str, i);
|
||||
if str <> '' then
|
||||
begin
|
||||
|
|
|
|||
Loading…
Reference in New Issue