-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathSSEServer.dpr
More file actions
155 lines (144 loc) · 3.44 KB
/
Copy pathSSEServer.dpr
File metadata and controls
155 lines (144 loc) · 3.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
program SSEServer;
{$APPTYPE CONSOLE}
uses
System.SysUtils,
System.Types,
IPPeerServer,
IPPeerAPI,
IdHTTPWebBrokerBridge,
Web.WebReq,
Web.WebBroker,
WebModuleUnit1 in 'WebModuleUnit1.pas' {WebModule1: TWebModule},
ServerConst1 in 'ServerConst1.pas',
SseDemoSupport in 'SseDemoSupport.pas';
{$R *.res}
function BindPort(APort: Integer): Boolean;
var
LTestServer: IIPTestServer;
begin
Result := True;
try
LTestServer := PeerFactory.CreatePeer('', IIPTestServer) as IIPTestServer;
LTestServer.TestOpenPort(APort, nil);
except
Result := False;
end;
end;
function CheckPort(APort: Integer): Integer;
begin
if BindPort(APort) then
Result := APort
else
Result := 0;
end;
procedure SetPort(const AServer: TIdHTTPWebBrokerBridge; APort: String);
begin
if not AServer.Active then
begin
APort := APort.Replace(cCommandSetPort, '').Trim;
if CheckPort(APort.ToInteger) > 0 then
begin
AServer.DefaultPort := APort.ToInteger;
Writeln(Format(sPortSet, [APort]));
end
else
Writeln(Format(sPortInUse, [APort]));
end
else
Writeln(sServerRunning);
Write(cArrow);
end;
procedure StartServer(const AServer: TIdHTTPWebBrokerBridge);
begin
if not AServer.Active then
begin
if CheckPort(AServer.DefaultPort) > 0 then
begin
Writeln(Format(sStartingServer, [AServer.DefaultPort]));
AServer.Bindings.Clear;
AServer.Active := True;
end
else
Writeln(Format(sPortInUse, [AServer.DefaultPort.ToString]));
end
else
Writeln(sServerRunning);
Write(cArrow);
end;
procedure StopServer(const AServer: TIdHTTPWebBrokerBridge);
begin
if AServer.Active then
begin
Writeln(sStoppingServer);
AServer.Active := False;
AServer.Bindings.Clear;
Writeln(sServerStopped);
end
else
Writeln(sServerNotRunning);
Write(cArrow);
end;
procedure WriteCommands;
begin
Writeln(sCommands);
Write(cArrow);
end;
procedure WriteStatus(const AServer: TIdHTTPWebBrokerBridge);
begin
Writeln(sIndyVersion + AServer.SessionList.Version);
Writeln(sActive + AServer.Active.ToString(TUseBoolStrs.True));
Writeln(sPort + AServer.DefaultPort.ToString);
Writeln(sSessionID + AServer.SessionIDCookieName);
Write(cArrow);
end;
procedure RunServer(APort: Integer);
var
LServer: TIdHTTPWebBrokerBridge;
LResponse: string;
begin
WriteCommands;
LServer := TIdHTTPWebBrokerBridge.Create(nil);
try
LServer.DefaultPort := APort;
while True do
begin
Readln(LResponse);
LResponse := LowerCase(LResponse);
if LResponse.StartsWith(cCommandSetPort) then
SetPort(LServer, LResponse)
else if sametext(LResponse, cCommandStart) then
StartServer(LServer)
else if sametext(LResponse, cCommandStatus) then
WriteStatus(LServer)
else if sametext(LResponse, cCommandStop) then
StopServer(LServer)
else if sametext(LResponse, cCommandHelp) then
WriteCommands
else if sametext(LResponse, cCommandExit) then
if LServer.Active then
begin
StopServer(LServer);
break
end
else
break
else
begin
Writeln(sInvalidCommand);
Write(cArrow);
end;
end;
finally
LServer.Free;
end;
end;
begin
try
if WebRequestHandler <> nil then
WebRequestHandler.WebModuleClass := WebModuleClass;
RunServer(8080);
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end
end.