Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
145 changes: 0 additions & 145 deletions chatListener.go

This file was deleted.

67 changes: 20 additions & 47 deletions chatMessage.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,14 +62,14 @@ type CvarData struct {

const (
PlayerGlobalMessage = iota
PlayerTeamMessage = iota
PlayerChangedClass = iota
PlayerChangedTeam = iota
PlayerTeamMessage
PlayerChangedClass
PlayerChangedTeam

WorldPlayerConnected = iota
WorldPlayerDisconnected = iota
WorldGameOver = iota
ServerCvar = iota
WorldPlayerConnected
WorldPlayerDisconnected
WorldGameOver
ServerCvar

LogFileClosed = iota
)
Expand All @@ -83,77 +83,50 @@ var (
ErrInvalidPacket = errors.New("Invalid Packet")
)

func getSecret(data []byte) (string, error) {
func getSecret(data []byte) (string, int, error) {
if !(len(data) > 6) {
return "", ErrInvalidPacket
return "", 0, ErrInvalidPacket
}

if data[4] != 0x53 {
return "", errors.New("Server trying to send a chat packet without a secret")
return "", 0, errors.New("Server trying to send a chat packet without a secret")
}

bytes := data[5:]
var pos int
pos := 5

for bytes[pos] != 0x20 {
pos++
if pos >= len(bytes) {
return "", ErrInvalidPacket
return "", 0, ErrInvalidPacket
}
}

secret := string(bytes[:pos-1])
if pos+1 >= len(data) {
//No message/time data
return "", ErrInvalidPacket
return "", 0, ErrInvalidPacket
}

return secret, nil
return secret, pos + 1, nil
}

func ParseMessage(raw RawMessage) (LogMessage, error) {
textBytes := raw.data[0:raw.n]
if len(textBytes) <= 24 {
return LogMessage{}, ErrInvalidPacket
}

packetType := textBytes[4]

if packetType != 0x53 {
return LogMessage{}, errors.New("Server trying to send a chat packet without a secret")
}

// drop the header
textBytes = textBytes[5:]

pos := 0
for textBytes[pos] != 0x20 {
pos++
}

textBytes = textBytes[pos+1:]

text := string(textBytes)

timeText := text[:21]
message := text[23:]
const refTime = "01/02/2006 - 15:04:05"

const refTime = "01/02/2006 - 15:04:05"
func parse(text string) LogMessage {
timeText := text[5:26]
message := text[28:]

timeObj, _ := time.Parse(refTime, timeText)

m := parse(message)

return LogMessage{timeObj, text, m}, nil
return LogMessage{timeObj, text, ParseLine(message)}
}

func parse(message string) ParsedMsg {
func ParseLine(message string) ParsedMsg {
r := ParsedMsg{Type: -1}
var m []string

isPlayerMessage := false
playerData := PlayerData{}

switch {
case rPlayerGlobalMessage.MatchString(message):
m = rPlayerGlobalMessage.FindStringSubmatch(message)
Expand Down
7 changes: 4 additions & 3 deletions chatMessage_test.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package TF2RconWrapper

import (
"github.com/stretchr/testify/assert"
"testing"

"github.com/stretchr/testify/assert"
)

var logs []string = []string{
var logs = []string{
`"Sk1LL0<2><[U:1:198288660]><Unassigned>" joined team "Red"`,
`"Sk1LL0<2><[U:1:198288660]><Red>" changed role to "scout"`,
`"Sk1LL0<2><[U:1:198288660]><Red>" changed role to "soldier"`,
Expand All @@ -20,7 +21,7 @@ var logs []string = []string{

func TestParse(t *testing.T) {
for i := range logs {
m := parse(logs[i])
m := ParseLine(logs[i])

switch i {

Expand Down
Loading