public Room GetRoom(JID roomAndNick)
{
if (roomAndNick == null)
throw new ArgumentNullException("roomAndNick");
if (roomAndNick.Resource == null)
roomAndNick.Resource = DefaultNick;
if (m_rooms.ContainsKey(roomAndNick))
return m_rooms[roomAndNick];
// If no resource specified, pick up the user's name from their JID
if (roomAndNick.Resource == null)
roomAndNick.Resource = m_stream.JID.User;
Room r = new Room(this, roomAndNick);
r.OnJoin += OnJoin;
r.OnLeave += OnLeave;
r.OnPresenceError += OnPresenceError;
r.OnRoomConfig += OnRoomConfig;
r.OnRoomMessage += OnRoomMessage;
r.OnPrivateMessage += OnPrivateMessage;
r.OnAdminMessage += OnAdminMessage;
r.OnSelfMessage += OnSelfMessage;
r.OnSubjectChange += OnSubjectChange;
r.OnParticipantJoin += OnParticipantJoin;
r.OnParticipantLeave += OnParticipantLeave;
r.OnParticipantPresenceChange += OnParticipantPresenceChange;
r.OnPresenceChange += OnPresenceChange;
m_rooms[roomAndNick] = r;
return r;
}