Voor de GoT contest ben ik bezig met een Delphi client (bot), maar loop tegen een probleem aan. De binnen gekomen TCP data wil ik op een OO manier afhandelen. De server stuurt een commando waar vervolgens mijn client iets mee doet.
Het parsen van de binnen gekomen tekst gaat dmv van een reguliere expressie prima:
Opzich is dit een leuke oplossing (command design pattern). Nu kan ik Command.Execute doen, alleen wat moet ik dan doen in die Execute? Soms moet er een antwoord terug naar de server, soms moet er binnen de client iets veranderen.
Is hier een generieke oplossing voor? Hoe zorg ik ervoor dat de commando's op een gestructureerde manier worden afgehandeld. Liefst zonder veel afhankelijkheden. Iemand misschien een voorbeeldje?
Het parsen van de binnen gekomen tekst gaat dmv van een reguliere expressie prima:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| var
Command: TServerCommand;
begin
FRegEx.Expression := '^(.+?)($| (.+?$))';
if FRegEx.Exec(Data) then
begin
Command := nil;
if FRegEx.Match[1] = 'ERROR' then
Command := TErrorCommand.Create
else if FRegEx.Match[1] = 'WORLDINFO' then
Command := TWorldInfoCommand.Create
else if FRegEx.Match[1] = 'VERSION' then
Command := TVersionCommand.Create;
if Assigned(Command) then
begin
if FRegEx.SubExprMatchCount = 3 then
Command.ParseParameters(FRegEx.Match[3]);
//hier uitvoeren?
end;
end;
end; |
Opzich is dit een leuke oplossing (command design pattern). Nu kan ik Command.Execute doen, alleen wat moet ik dan doen in die Execute? Soms moet er een antwoord terug naar de server, soms moet er binnen de client iets veranderen.
Is hier een generieke oplossing voor? Hoe zorg ik ervoor dat de commando's op een gestructureerde manier worden afgehandeld. Liefst zonder veel afhankelijkheden. Iemand misschien een voorbeeldje?
"The shell stopped unexpectedly and Explorer.exe was restarted."