summaryrefslogtreecommitdiff
path: root/chat
diff options
context:
space:
mode:
Diffstat (limited to 'chat')
-rw-r--r--chat/chat_test.go4
-rw-r--r--chat/rooms.go16
2 files changed, 20 insertions, 0 deletions
diff --git a/chat/chat_test.go b/chat/chat_test.go
index c92b8e7..65a50dd 100644
--- a/chat/chat_test.go
+++ b/chat/chat_test.go
@@ -22,6 +22,10 @@ func TestJoining(t *testing.T) {
t.Fatalf("Got error \"%s\", expected \"%s\"", err, EmptyNick)
}
+ if _, _, err = Join("test", "abcdefghijklmnopqrstuvwxyz"); err != NickTooLong {
+ t.Fatalf("Got error \"%s\", expected \"%s\"", err, NickTooLong)
+ }
+
b2, r2, err := Join("test", "Bar")
if err != nil {
t.Fatalf("Could not join room a second time: %s", err)
diff --git a/chat/rooms.go b/chat/rooms.go
index 793f027..849aeb8 100644
--- a/chat/rooms.go
+++ b/chat/rooms.go
@@ -8,6 +8,12 @@ var (
NickAlreadyInUse = errors.New("Nickname is already in use")
RoomIsFull = errors.New("Room is full")
EmptyNick = errors.New("Nickname must not be empty")
+ NickTooLong = errors.New("NIckname is too long")
+)
+
+const (
+ nickLenLimit = 16
+ msgLenLimit = 2000
)
// Room represents a chatroom.
@@ -46,6 +52,12 @@ func (r *Room) leave(nick string) {
func (r *Room) broadcast() {
for m := range r.messages {
+ if len(m.Text) > msgLenLimit {
+ text := []rune(m.Text)
+ text = text[:msgLenLimit]
+ m.Text = string(text) + " (message truncated. was too long)"
+ }
+
for _, buddy := range r.buddies {
buddy.Push(m)
}
@@ -87,6 +99,10 @@ func Join(room, nick string) (*Buddy, *Room, error) {
return nil, nil, EmptyNick
}
+ if len(nick) > nickLenLimit {
+ return nil, nil, NickTooLong
+ }
+
if len(r.buddies) >= perroom {
return nil, nil, RoomIsFull
}