コード例 #1
0
        /*************************************************************************
        *
        *              Meeting Logic Functions
        *
        *************************************************************************/
        public LiveMeeting CreateRoom(Int64 roomId)
        {
            //if room is already on-going
            if (liveRoomList.TryGetValue(roomId, out LiveMeeting room) && room != null)
            {
                return(room);
            }

            //check if exist in database
            Meeting meeting = _meetingService.Get(roomId);

            if (meeting == null)
            {
                return(null);
            }

            //if exist, open meeting
            LiveMeeting liveMeeting = new LiveMeeting(meeting);

            if (liveRoomList.TryAdd(liveMeeting.Id, liveMeeting))
            {
                //send via callback
                BizGazeCallback.onMeetingStart(liveMeeting);

                //log to database
                _logService.StartMeeting(meeting);
                return(liveMeeting);
            }
            else
            {
                return(null);
            }
        }
コード例 #2
0
        private void _FinishRoom(Int64 roomId)
        {
            LiveMeeting room = null;

            if (!liveRoomList.TryGetValue(roomId, out room))
            {
                return;
            }

            //set finish time
            room.closeTime = DateTime.Now;
            room.Clients.ForEach(c =>
            {
                if (c.leaveTime == default(DateTime))
                {
                    c.leaveTime = room.closeTime;
                }
            });

            //send via callback
            BizGazeCallback.onMeetingEnd(room);

            //log to database
            _logService.FinishMeeting(room._meeting);

            room.Clients.ForEach(c => connSessionMap.TryRemove(c.connId, out _));
            room.Clients.Clear();
            room.Dispose();

            liveRoomList.TryRemove(roomId, out _);
        }
コード例 #3
0
        public bool LeaveClient(string connectionId)
        {
            LiveMeeting room = getClientRoom(connectionId);

            if (room == null)
            {
                return(false);
            }


            var client = room.LeaveClient(connectionId);

            if (client == null)
            {
                return(false);
            }

            connSessionMap.TryRemove(connectionId, out _);

            //send via callback
            BizGazeCallback.onMeetingLeft(room, client);

            //log to database
            _logService.LeftMeeting(room._meeting, client.participant);

            return(true);
        }
コード例 #4
0
        /**
         * **************************************************************************
         *
         *              Join GroupChattig | webinar
         *           in webinar  [ userId = 0 ] means Anonymous user
         *
         * **************************************************************************
         */
        public Client JoinClientToRoom(Int64 roomId, Int64 userId, string anonymousUserName, string connectionId)
        {
            LiveMeeting room = getRoomById(roomId);

            if (room == null)
            {
                return(null);
            }

            var client = room.JoinClient(userId, anonymousUserName, connectionId);

            if (client == null)
            {
                return(null);
            }

            connSessionMap[connectionId] = room;

            //send via callback
            BizGazeCallback.onMeetingJoined(room, client);

            //log to database
            _logService.JoinMeeting(room._meeting, client.participant);
            return(client);
        }
コード例 #5
0
        public static void onMeetingEnd(LiveMeeting meeting)
        {
            MeetingEnd payload = new MeetingEnd();

            payload.ConferenceId = meeting.Id;
            payload.StartTime    = meeting.openTime;
            payload.StartTime    = meeting.closeTime;
            meeting.Clients.ForEach(c =>
            {
                MeetingParticipant p = new MeetingParticipant();
                p.ParticipantId      = c.BGId;
                p.Present            = c.joined;
                if (c.joined)
                {
                    p.JoinTime  = c.joinTime;
                    p.LeaveTime = c.leaveTime;
                }
                payload.Participants.Add(p);
            });

            string callbackRoot = meeting.CallbackUrl;
            string url          = string.Format(Urls.meetingEndUrl, callbackRoot);

            PostHelper.PostJson(url, payload, Urls.authKey);
        }
コード例 #6
0
        public async Task ControlMessage(string destId, string msg)
        {
            LiveMeeting room1 = roomMgr.getClientRoom(Context.ConnectionId);
            LiveMeeting room2 = roomMgr.getClientRoom(destId);

            if (room1.Id != room2.Id)
            {
                return;
            }

            await SendMessage("controlMessage", Context.ConnectionId, destId, msg);
        }
コード例 #7
0
        public static void onMeetingStart(LiveMeeting meeting)
        {
            MeetingStart payload = new MeetingStart();

            payload.ConferenceId = meeting.Id;
            payload.StartTime    = meeting.openTime;

            string callbackRoot = meeting.CallbackUrl;
            string url          = string.Format(Urls.meetingStartUrl, callbackRoot);

            PostHelper.PostJson(url, payload, Urls.authKey);
        }
コード例 #8
0
        public static void onMeetingLeft(LiveMeeting meeting, Client user)
        {
            MeetingLeave payload = new MeetingLeave();

            payload.ConferenceId  = meeting.Id;
            payload.participantId = user.BGId;
            payload.LeaveTime     = user.leaveTime;

            string callbackRoot = meeting.CallbackUrl;
            string url          = string.Format(Urls.meetingLeaveUrl, callbackRoot);

            PostHelper.PostJson(url, payload, Urls.authKey);
        }
コード例 #9
0
        public async Task RoomUserList(Int64 roomId)
        {
            LiveMeeting room = roomMgr.getRoomById(roomId);

            if (room == null)
            {
                return;
            }

            await RoomBroadcast(
                roomId,
                "roomUserList",
                JsonConvert.SerializeObject(room.Clients.Select(c => c.getInfo())));
        }
コード例 #10
0
 public async Task SignalingMessage(string sourceId, string destId, string msg)
 {
     //just relay
     if (destId == "room")
     {
         LiveMeeting room = roomMgr.getClientRoom(Context.ConnectionId);
         if (room != null)
         {
             await RoomBroadcast(room.Id, "SignalingMessage", msg);
         }
     }
     else
     {
         await SendMessage("SignalingMessage", sourceId, destId, msg);
     }
 }
コード例 #11
0
        public async Task LeaveRoom()
        {
            var         clientID = Context.ConnectionId;
            LiveMeeting room     = roomMgr.getClientRoom(Context.ConnectionId);

            if (room != null)
            {
                roomMgr.LeaveClient(Context.ConnectionId);
                await RemoveCallerFromGroup(room.Id.ToString());

                await SendMessageToCaller(
                    Protocol.BGtoUser.ROOM_LEFT,
                    clientID);

                await RoomBroadcast(room.Id,
                                    Protocol.BGtoUser.ROOM_LEFT,
                                    clientID);
            }
        }
コード例 #12
0
        public async Task ControlBroadcastMessage(string msg)
        {
            LiveMeeting room = roomMgr.getClientRoom(Context.ConnectionId);

            await RoomBroadcast(room.Id, "controlBroadcastMessage", msg);
        }