コード例 #1
0
        /// <summary>
        /// Creates a new room with the specified details, or a blank one otherwise.
        /// </summary>
        /// <returns>A MatrixRoom object</returns>
        /// <param name="roomdetails">Optional set of options to send to the server.</param>
        public MatrixRoom CreateRoom(MatrixCreateRoom roomdetails = null)
        {
            string roomid = api.ClientCreateRoom(roomdetails);

            if (roomid != null)
            {
                MatrixRoom room = JoinRoom(roomid);
                return(room);
            }
            return(null);
        }
コード例 #2
0
 /// <summary>
 /// Join a matrix room. If the user has already joined this room, do nothing.
 /// </summary>
 /// <returns>The room.</returns>
 /// <param name="roomid">roomid or alias</param>
 public MatrixRoom JoinRoom(string roomid) //TODO: Maybe add a try method.
 {
     if (!_rooms.ContainsKey(roomid))      //TODO: Check the status of the room too.
     {
         roomid = api.ClientJoin(roomid);
         if (roomid == null)
         {
             return(null);
         }
         MatrixRoom room = new MatrixRoom(api, roomid);
         _rooms.TryAdd(room.ID, room);
     }
     return(_rooms [roomid]);
 }
コード例 #3
0
        private void MatrixClient_OnEvent(string roomid, MatrixEventRoomJoined joined)
        {
            MatrixRoom mroom;

            if (!_rooms.ContainsKey(roomid))
            {
                mroom = new MatrixRoom(api, roomid);
                _rooms.TryAdd(roomid, mroom);
                //Update existing room
            }
            else
            {
                mroom = _rooms [roomid];
            }
            joined.state.events.ToList().ForEach(x => { mroom.FeedEvent(x); });
            joined.timeline.events.ToList().ForEach(x => { mroom.FeedEvent(x); });
            mroom.SetEphemeral(joined.ephemeral);
        }
コード例 #4
0
        /// <summary>
        /// Return a joined room object by it's roomid.
        /// </summary>
        /// <returns>The room.</returns>
        /// <param name="roomid">Roomid.</param>
        public MatrixRoom GetRoom(string roomid)  //TODO: Maybe add a try method.
        {
            MatrixRoom room = null;

            _rooms.TryGetValue(roomid, out room);
            if (room == null)
            {
                log.LogInformation($"Don't have {roomid} synced, getting the room from /state");
                // If we don't have the room, attempt to grab it's state.
                var state = api.GetRoomState(roomid);
                room = new MatrixRoom(api, roomid);
                foreach (var matrixEvent in state)
                {
                    room.FeedEvent(matrixEvent);
                }
                _rooms.TryAdd(roomid, room);
            }
            return(room);
        }
コード例 #5
0
        /// <summary>
        /// Get a room object by any of it's registered aliases.
        /// </summary>
        /// <returns>The room by alias.</returns>
        /// <param name="alias">CanonicalAlias or any Alias</param>
        public MatrixRoom GetRoomByAlias(string alias)
        {
            MatrixRoom room = _rooms.Values.FirstOrDefault(x => {
                if (x.CanonicalAlias == alias)
                {
                    return(true);
                }
                else if (x.Aliases != null)
                {
                    return(x.Aliases.Contains(alias));
                }
                return(false);
            });

            if (room != default(MatrixRoom))
            {
                return(room);
            }
            else
            {
                return(null);
            }
        }