Exemple #1
0
        /// <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);
        }
Exemple #2
0
        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);
            }
        }
Exemple #3
0
        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);
            }
        }
Exemple #4
0
        /// <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);
        }