diff options
Diffstat (limited to 'internal/message.go')
| -rw-r--r-- | internal/message.go | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/internal/message.go b/internal/message.go new file mode 100644 index 0000000..7a70d79 --- /dev/null +++ b/internal/message.go @@ -0,0 +1,44 @@ +package ircd + +import ( + "errors" + "strings" +) + +type Message struct { + command string + params []string +} + +func ParseIRCMessage(raw string) (*Message, error) { + m := Message{} + + raw = strings.TrimSpace(raw) + parts := []string{} + + for { + if len(raw) == 0 { + break + } else if strings.HasPrefix(raw, ":") { + parts = append(parts, raw[1:]) + break + } else { + p := strings.SplitN(raw, " ", 2) + parts = append(parts, p[0]) + + if len(p) == 1 { + raw = "" + } else { + raw = strings.TrimSpace(p[1]) + } + } + } + + if len(parts) > 0 { + m.command = parts[0] + m.params = parts[1:] + return &m, nil + } else { + return nil, errors.New("Invalid IRC message") + } +} |
