@@ -21,11 +21,6 @@ var ErrRoomClosed = errors.New("room closed")
2121// as empty string.
2222var ErrInvalidName = errors .New ("invalid name" )
2323
24- // Member is a User with per-Room metadata attached to it.
25- type Member struct {
26- * message.User
27- }
28-
2924// Room definition, also a Set of User Items
3025type Room struct {
3126 topic string
@@ -58,14 +53,10 @@ func (r *Room) SetCommands(commands Commands) {
5853 r .commands = commands
5954}
6055
61- // Close the room and all the users it contains.
56+ // Close the room
6257func (r * Room ) Close () {
6358 r .closeOnce .Do (func () {
6459 r .closed = true
65- r .Members .Each (func (_ string , item set.Item ) error {
66- item .Value ().(* Member ).Close ()
67- return nil
68- })
6960 r .Members .Clear ()
7061 close (r .broadcast )
7162 })
@@ -98,9 +89,10 @@ func (r *Room) HandleMsg(m message.Message) {
9889
9990 r .history .Add (m )
10091 r .Members .Each (func (_ string , item set.Item ) (err error ) {
101- user := item .Value ().(* Member ).User
92+ roomMember := item .Value ().(* roomMember )
93+ user := roomMember .Member
10294
103- if fromMsg != nil && user .Ignored .In (fromMsg .From ().ID ()) {
95+ if fromMsg != nil && roomMember .Ignored .In (fromMsg .From ().ID ()) {
10496 // Skip because ignored
10597 return
10698 }
@@ -142,12 +134,15 @@ func (r *Room) History(u *message.User) {
142134}
143135
144136// Join the room as a user, will announce.
145- func (r * Room ) Join (u * message.User ) (* Member , error ) {
137+ func (r * Room ) Join (u * message.User ) (* roomMember , error ) {
146138 // TODO: Check if closed
147139 if u .ID () == "" {
148140 return nil , ErrInvalidName
149141 }
150- member := & Member {u }
142+ member := & roomMember {
143+ Member : u ,
144+ Ignored : set .New (),
145+ }
151146 err := r .Members .Add (set .Itemize (u .ID (), member ))
152147 if err != nil {
153148 return nil , err
@@ -187,28 +182,28 @@ func (r *Room) Rename(oldID string, u message.Identifier) error {
187182
188183// Member returns a corresponding Member object to a User if the Member is
189184// present in this room.
190- func (r * Room ) Member (u * message.User ) (* Member , bool ) {
185+ func (r * Room ) Member (u message.Identifier ) (* roomMember , bool ) {
191186 m , ok := r .MemberByID (u .ID ())
192187 if ! ok {
193188 return nil , false
194189 }
195190 // Check that it's the same user
196- if m .User != u {
191+ if m .Member != u {
197192 return nil , false
198193 }
199194 return m , true
200195}
201196
202- func (r * Room ) MemberByID (id string ) (* Member , bool ) {
197+ func (r * Room ) MemberByID (id string ) (* roomMember , bool ) {
203198 m , err := r .Members .Get (id )
204199 if err != nil {
205200 return nil , false
206201 }
207- return m .Value ().(* Member ), true
202+ return m .Value ().(* roomMember ), true
208203}
209204
210205// IsOp returns whether a user is an operator in this room.
211- func (r * Room ) IsOp (u * message.User ) bool {
206+ func (r * Room ) IsOp (u message.Identifier ) bool {
212207 return r .Ops .In (u .ID ())
213208}
214209
@@ -228,7 +223,7 @@ func (r *Room) NamesPrefix(prefix string) []string {
228223 items := r .Members .ListPrefix (prefix )
229224 names := make ([]string , len (items ))
230225 for i , item := range items {
231- names [i ] = item .Value ().(* Member ). User .Name ()
226+ names [i ] = item .Value ().(* roomMember ) .Name ()
232227 }
233228 return names
234229}
0 commit comments