multiserver/active_object.go

61 lines
1.2 KiB
Go
Raw Normal View History

2021-01-08 11:03:41 -08:00
package multiserver
import (
"encoding/binary"
)
2021-01-08 11:03:41 -08:00
2021-01-14 08:09:06 -08:00
func processAoRmAdd(p *Peer, data []byte) []byte {
2021-01-08 11:03:41 -08:00
countRm := binary.BigEndian.Uint16(data[2:4])
aoRm := make([]uint16, countRm)
aoRmI := 0
for i := uint16(0); i < countRm; i += 2 {
2021-01-09 03:26:30 -08:00
aoRm[aoRmI] = binary.BigEndian.Uint16(data[4+i : 6+i])
2021-01-08 11:03:41 -08:00
aoRmI++
}
2021-01-09 03:26:30 -08:00
countAdd := binary.BigEndian.Uint16(data[4+countRm*2 : 6+countRm*2])
2021-01-08 11:03:41 -08:00
aoAdd := make([]uint16, countAdd)
aoAddI := 0
j := uint32(0)
for i := uint32(0); i < uint32(countAdd); i++ {
2021-01-09 03:26:30 -08:00
si := j + 6 + uint32(countRm)*2
initDataLen := binary.BigEndian.Uint32(data[3+si : 7+si])
namelen := binary.BigEndian.Uint16(data[8+si : 10+si])
2021-01-11 13:05:51 -08:00
name := data[10+si : 10+si+uint32(namelen)]
if string(name) == string(p.username) {
if p.initAoReceived {
2021-01-11 13:05:51 -08:00
binary.BigEndian.PutUint16(data[4+countRm*2:6+countRm*2], countAdd-1)
data = append(data[:si], data[7+si+initDataLen:]...)
} else {
p.initAoReceived = true
}
2021-01-10 13:45:45 -08:00
2021-01-08 11:03:41 -08:00
j += 7 + initDataLen
2021-01-10 13:45:45 -08:00
2021-01-08 11:03:41 -08:00
continue
}
2021-01-09 03:26:30 -08:00
aoAdd[aoAddI] = binary.BigEndian.Uint16(data[si : 2+si])
2021-01-08 11:03:41 -08:00
aoAddI++
2021-01-09 03:26:30 -08:00
2021-01-08 11:03:41 -08:00
j += 7 + initDataLen
}
2021-01-09 03:26:30 -08:00
2021-01-10 13:37:42 -08:00
p.redirectMu.Lock()
2021-01-08 11:03:41 -08:00
for i := range aoAdd {
if aoAdd[i] != 0 {
2021-01-18 01:49:56 -08:00
p.aoIDs[aoAdd[i]] = true
2021-01-08 11:03:41 -08:00
}
}
2021-01-09 03:26:30 -08:00
2021-01-08 11:03:41 -08:00
for i := range aoRm {
2021-01-18 01:49:56 -08:00
p.aoIDs[aoRm[i]] = false
2021-01-08 11:03:41 -08:00
}
2021-01-10 13:37:42 -08:00
p.redirectMu.Unlock()
return data
2021-01-08 11:03:41 -08:00
}