/// <summary> /// Unregisters the local client from broadcasts directed at the specified room. /// </summary> /// <param name="membership">The room membership.</param> public bool Leave(RoomMembership membership) { var index = FindById(membership.RoomId); if (!index.HasValue) { return(false); } var m = _rooms[index.Value]; m.Count--; _rooms[index.Value] = m; if (m.Count <= 0) { //Remove membership _rooms.RemoveAt(index.Value); //Invoke event OnLeftRoom(membership); return(true); } return(false); }
private void OnLeftRoom(RoomMembership membership) { Log.Debug("Left chat room '{0}'", membership.RoomName); //Remove from name list var idIndex = _roomNames.BinarySearch(membership.RoomName); if (idIndex >= 0) { _roomNames.RemoveAt(idIndex); } var handler = LeftRoom; if (handler != null) { handler(membership.RoomName); } }
private void OnJoinedRoom(RoomMembership membership) { Log.Debug("Joined chat room '{0}'", membership.RoomName); //Add to name list var idIndex = _roomNames.BinarySearch(membership.RoomName); if (idIndex < 0) { _roomNames.Insert(~idIndex, membership.RoomName); } var handler = JoinedRoom; if (handler != null) { handler(membership.RoomName); } }
/// <summary> /// Registers the local client as interested in broadcasts directed at the specified room. /// </summary> /// <param name="roomName">The room name.</param> public RoomMembership Join(string roomName) { if (roomName == null) { throw new ArgumentNullException("roomName", "Cannot join a null room"); } var membership = new RoomMembership(roomName, 1); //Check to see if we already have this membership in the list var index = _rooms.BinarySearch(membership, Comparer); if (_rooms.Count == 0 || index < 0) { //Insert membership into list (making sure to keep it in order) var i = ~index; if (i == _rooms.Count) { _rooms.Add(membership); } else { _rooms.Insert(i, membership); } //newly joined, so invoke the event OnJoinedRoom(roomName); } else { //We're already in this room, increment the subscriber count var m = _rooms[index]; m.Count++; _rooms[index] = m; } return(membership); }