Skip to content

Commit 7a24b99

Browse files
authored
add RequestReceiveSaveWithSize (#90)
* add RequestReceiveSaveWithSize * more * more * more * more
1 parent 2f75b14 commit 7a24b99

File tree

1 file changed

+42
-18
lines changed

1 file changed

+42
-18
lines changed

internal/gameServer/tcp.go

+42-18
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,20 @@ const (
2727
)
2828

2929
const (
30-
RequestNone = 255
31-
RequestSendSave = 1
32-
RequestReceiveSave = 2
33-
RequestSendSettings = 3
34-
RequestReceiveSettings = 4
35-
RequestRegisterPlayer = 5
36-
RequestGetRegistration = 6
37-
RequestDisconnectNotice = 7
38-
RequestSendCustomStart = 64 // 64-127 are custom data send slots, 128-191 are custom data receive slots
39-
CustomDataOffset = 64
30+
RequestNone = 255
31+
RequestSendSave = 1
32+
RequestReceiveSave = 2
33+
RequestSendSettings = 3
34+
RequestReceiveSettings = 4
35+
RequestRegisterPlayer = 5
36+
RequestGetRegistration = 6
37+
RequestDisconnectNotice = 7
38+
RequestReceiveSaveWithSize = 8
39+
RequestSendCustomStart = 64 // 64-127 are custom data send slots, 128-191 are custom data receive slots
40+
CustomDataOffset = 64
4041
)
4142

42-
func (g *GameServer) tcpSendFile(tcpData *TCPData, conn *net.TCPConn) {
43+
func (g *GameServer) tcpSendFile(tcpData *TCPData, conn *net.TCPConn, withSize bool) {
4344
startTime := time.Now()
4445
var ok bool
4546
for !ok {
@@ -51,11 +52,22 @@ func (g *GameServer) tcpSendFile(tcpData *TCPData, conn *net.TCPConn) {
5152
return
5253
}
5354
} else {
54-
_, err := conn.Write(g.TCPFiles[tcpData.Filename])
55-
if err != nil {
56-
g.Logger.Error(err, "could not write file", "address", conn.RemoteAddr().String())
55+
if withSize {
56+
size := make([]byte, 4) //nolint:gomnd,mnd
57+
binary.BigEndian.PutUint32(size, uint32(len(g.TCPFiles[tcpData.Filename]))) //nolint:gosec
58+
_, err := conn.Write(size)
59+
if err != nil {
60+
g.Logger.Error(err, "could not write size", "address", conn.RemoteAddr().String())
61+
}
62+
}
63+
if len(g.TCPFiles[tcpData.Filename]) > 0 {
64+
_, err := conn.Write(g.TCPFiles[tcpData.Filename])
65+
if err != nil {
66+
g.Logger.Error(err, "could not write file", "address", conn.RemoteAddr().String())
67+
}
5768
}
58-
// g.Logger.Info("sent file", "filename", tcpData.Filename, "filesize", tcpData.Filesize, "address", conn.RemoteAddr().String())
69+
70+
// g.Logger.Info("sent save file", "filename", tcpData.Filename, "filesize", tcpData.Filesize, "address", conn.RemoteAddr().String())
5971
tcpData.Filename = ""
6072
tcpData.Filesize = 0
6173
}
@@ -164,7 +176,7 @@ func (g *GameServer) processTCP(conn *net.TCPConn) {
164176
}
165177
}
166178

167-
if (tcpData.Request == RequestSendSave || tcpData.Request == RequestReceiveSave) && tcpData.Filename == "" { // get file name
179+
if (tcpData.Request == RequestSendSave || tcpData.Request == RequestReceiveSave || tcpData.Request == RequestReceiveSaveWithSize) && tcpData.Filename == "" { // get file name
168180
if bytes.IndexByte(tcpData.Buffer.Bytes(), 0) != -1 {
169181
filenameBytes, err := tcpData.Buffer.ReadBytes(0)
170182
if err != nil {
@@ -182,6 +194,13 @@ func (g *GameServer) processTCP(conn *net.TCPConn) {
182194
g.Logger.Error(err, "TCP error", "address", conn.RemoteAddr().String())
183195
}
184196
tcpData.Filesize = binary.BigEndian.Uint32(filesizeBytes)
197+
198+
if tcpData.Filesize == 0 {
199+
g.TCPFiles[tcpData.Filename] = make([]byte, tcpData.Filesize)
200+
tcpData.Filename = ""
201+
tcpData.Filesize = 0
202+
tcpData.Request = RequestNone
203+
}
185204
}
186205
}
187206

@@ -192,15 +211,20 @@ func (g *GameServer) processTCP(conn *net.TCPConn) {
192211
if err != nil {
193212
g.Logger.Error(err, "TCP error", "address", conn.RemoteAddr().String())
194213
}
195-
// g.Logger.Info("read file from sender", "filename", tcpData.Filename, "filesize", tcpData.Filesize, "address", conn.RemoteAddr().String())
214+
g.Logger.Info("received save file", "filename", tcpData.Filename, "filesize", tcpData.Filesize, "address", conn.RemoteAddr().String())
196215
tcpData.Filename = ""
197216
tcpData.Filesize = 0
198217
tcpData.Request = RequestNone
199218
}
200219
}
201220

202221
if tcpData.Request == RequestReceiveSave && tcpData.Filename != "" { // send requested file
203-
go g.tcpSendFile(tcpData, conn)
222+
go g.tcpSendFile(tcpData, conn, false)
223+
tcpData.Request = RequestNone
224+
}
225+
226+
if tcpData.Request == RequestReceiveSaveWithSize && tcpData.Filename != "" { // send requested file
227+
go g.tcpSendFile(tcpData, conn, true)
204228
tcpData.Request = RequestNone
205229
}
206230

0 commit comments

Comments
 (0)