diff options
Diffstat (limited to 'chat')
| -rw-r--r-- | chat/chat_test.go | 4 | ||||
| -rw-r--r-- | chat/rooms.go | 16 | 
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  	}  | 
