-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathgaple_net.pas
More file actions
149 lines (128 loc) · 4.08 KB
/
gaple_net.pas
File metadata and controls
149 lines (128 loc) · 4.08 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
(* NETWORK ROUTINES *)
{ client side }
procedure TFormGaple.ClientSocketConnecting(Sender: TObject; Socket: TCustomWinSocket);
begin
with FormNew do
begin
// disable control while connecting
cbKind.Enabled := false;
EditName.Enabled := false;
EditIP.Enabled := false;
cbPlayer2.Enabled := false;
cbPlayer3.Enabled := false;
cbPlayer4.Enabled := false;
EditMsg.Enabled := false;
ButtonMsg.Enabled := false;
ButtonClient.Caption := '&Abort';
MemoMsg.Lines.Add('Connecting to server...');
end;
end;
procedure TFormGaple.ClientSocketConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
with FormNew do
begin
cbKind.Enabled := false;
EditName.Enabled := false;
EditIP.Enabled := false;
EditMsg.Enabled := true;
ButtonMsg.Enabled := true;
ButtonClient.Caption := '&Abort';
MemoMsg.Lines.Add('Connected to server.');
// send client player info after connected
Socket.SendText('INFO:Name='+EditName.Text);
end;
end;
procedure TFormGaple.ClientSocketDisconnect(Sender: TObject; Socket: TCustomWinSocket);
begin
with FormNew do
begin
// enable control after disconnecting
cbKind.Enabled := true;
EditName.Enabled := true;
EditIP.Enabled := true;
EditMsg.Enabled := false;
ButtonMsg.Enabled := false;
ButtonClient.Caption := '&Join';
MemoMsg.Lines.Add('Join game has aborted.');
end;
end;
procedure TFormGaple.ClientSocketError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
with FormNew do
begin
// enable control on error
cbKind.Enabled := true;
EditName.Enabled := true;
EditIP.Enabled := true;
EditMsg.Enabled := false;
ButtonMsg.Enabled := false;
ButtonClient.Caption := '&Join';
MemoMsg.Lines.Add('Unable to connect to server.');
ErrorCode := 0;
end;
end;
// read from server
procedure TFormGaple.ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket);
var
data_text: string;
cmd_text: string;
cmd_del_pos: integer;
begin
data_text := Socket.ReceiveText;
cmd_del_pos := Pos(':',data_text);
cmd_text := Copy(data_text,1,cmd_del_pos-1);
data_text := Copy(data_text,cmd_del_pos+1,Length(data_text));
if (cmd_del_pos > 0) and (cmd_del_pos < 9) then
begin
// read server banner
if cmd_text = 'BANNER' then
FormNew.MemoMsg.Lines.Add(data_text);
end
else
FormNew.MemoMsg.Lines.Add(data_text);
end;
{ server side }
procedure TFormGaple.ServerSocketClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
// send server banner to connected client
if ServerSocket.Socket.ActiveConnections <= NetworkPlayers then
Socket.SendText(ConfigFile.ReadString('NETWORK','Greeting','Welcome to Gaple server.'))
else
// reject client if server is full
begin
Socket.SendText('Game server is full.');
Socket.Disconnect(Socket.SocketHandle);
end;
end;
procedure TFormGaple.ServerSocketClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
begin
FormNew.MemoMsg.Lines.Add('A player has been disconnected.');
end;
// read from client
procedure TFormGaple.ServerSocketClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
data_text: string;
cmd_text: string;
i,cmd_del_pos: integer;
begin
data_text := Socket.ReceiveText;
cmd_del_pos := Pos(':',data_text);
cmd_text := Copy(data_text,1,cmd_del_pos-1);
data_text := Copy(data_text,cmd_del_pos+1,Length(data_text));
if (cmd_del_pos > 0) and (cmd_del_pos < 9) then
begin
// send new player info to network
if cmd_text = 'INFO' then
begin
FormNew.MemoMsg.Lines.Add(data_text+' connected.');
for i := 0 to ServerSocket.Socket.ActiveConnections-1 do
ServerSocket.Socket.Connections[i].SendText(data_text+' connected.');
end;
end
else
begin
FormNew.MemoMsg.Lines.Add(data_text);
for i := 0 to ServerSocket.Socket.ActiveConnections-1 do
ServerSocket.Socket.Connections[i].SendText(data_text);
end;
end;