public VideoViewModel(bool isCallInitiator, User mainUser, List<User> users, VideoChatMessage videoMessage, bool isVideoCall)
		{
			this.isVideoCall = isVideoCall;
			this.videoMessage = videoMessage;
			this.isCallInitiator = isCallInitiator;
			this.mainUser = mainUser;
			this.users = users;

			this.AnswerCommand = new Command(this.AnswerCommandExecute,CanCommandExecute);
			this.EndOfCallCommand = new Command(this.EndOfCallCommandExecute, CanCommandExecute);
			this.RejectCommand = new Command(this.RejectCommandExecute,CanCommandExecute);
		}
        public VideoPage(bool isCallInitiator, User mainUser, List <User> users, VideoChatMessage videoMessage, bool isVideoCall)
        {
            InitializeComponent();

            this.mainUser             = mainUser;
            this.users                = users;
            this.isCallInitiator      = isCallInitiator;
            this.initiateVideoMessage = videoMessage;
            this.isVideoCall          = isVideoCall;

            App.CallHelperProvider.InitVideoContainer(videoContainer);
        }
        public VideoViewModel(bool isCallInitiator, User mainUser, List <User> users, VideoChatMessage videoMessage, bool isVideoCall)
        {
            this.isVideoCall     = isVideoCall;
            this.videoMessage    = videoMessage;
            this.isCallInitiator = isCallInitiator;
            this.mainUser        = mainUser;
            this.users           = users;

            this.AnswerCommand    = new Command(this.AnswerCommandExecute, CanCommandExecute);
            this.EndOfCallCommand = new Command(this.EndOfCallCommandExecute, CanCommandExecute);
            this.RejectCommand    = new Command(this.RejectCommandExecute, CanCommandExecute);
        }
		public VideoPage(bool isCallInitiator, User mainUser, List<User> users, VideoChatMessage videoMessage, bool isVideoCall)
		{
			InitializeComponent();

			this.mainUser = mainUser;
			this.users = users;
			this.isCallInitiator = isCallInitiator;
			this.initiateVideoMessage = videoMessage;
			this.isVideoCall = isVideoCall;

			App.CallHelperProvider.InitVideoContainer(videoContainer);
		}
 private void IncomingDropMessage(object sender, VideoChatMessage e)
 {
     //if (e.Caller == e.Sender.ToString())
     //{
     Device.BeginInvokeOnMainThread(() => App.SetUsersPage());
     //}
     //else
     //{
     //	users = users.Where(u => u.Id != e.Sender).ToList();
     //	if (users.Any())
     //	{
     //		Device.BeginInvokeOnMainThread(() => App.SetUsersPage());
     //	}
     //}
 }
        private void DropCall(object sender, VideoChatMessage e)
        {
            VideoChatState = VideoChatState.None;
            if (this.CurrentCall != null)
            {
                if (e.Sender == Int32.Parse(e.Caller))
                {
                    this.CurrentCall.UnlinkAll();
                }
                else
                {
                    this.CurrentCall.Unlink(e.Sender.ToString());
                }
            }

            InvokeDropCallMessage(sender, e);
        }
        public void ConnectToIncomingCall(VideoChatMessage e)
        {
            StartLocalMedia((error) =>
            {
                // TODO: temp err
                if (!string.IsNullOrEmpty(error))
                {
                    Debug.WriteLine("Error CAll: " + error);
                    return;
                }

                // Incoming new call
                this.CurrentCall                           = new ConferenceWrapper(e.SessionId, localMedia);
                this.CurrentCall.LinkUpEvent              += OnLinkUp;
                this.CurrentCall.LinkDownEvent            += OnLinkDown;
                this.CurrentCall.ReceiveSdpEvent          += OnReceiveSdp;
                this.CurrentCall.ReceiveIceCandidateEvent += OnReceiveIceCandidate;
                this.CurrentCall.ReceiveOfferAnwer(e.Sdp, true, e.Caller);
            });
        }
        private void InvokeIncomingEvent(object sender, VideoChatMessage e, User callerUser, List <User> opponents)
        {
            var handler = IncomingCallMessageEvent;

            if (handler != null)
            {
                var incomingCall = new IncomingCall()
                {
                    VideoChatMessage = e,
                    Caller           = callerUser,
                    Opponents        = opponents
                };

                handler.Invoke(sender, incomingCall);
            }

            Device.BeginInvokeOnMainThread(() =>
            {
                callOutgoingAudioTimer.Stop();
                callIncomingAudioTimer.Start();
            });
        }
        private void InvokeDropCallMessage(object sender, VideoChatMessage e)
        {
            var handler = IncomingDropMessageEvent;

            if (handler != null)
            {
                handler.Invoke(sender, e);
            }

            Device.BeginInvokeOnMainThread(() =>
            {
                callOutgoingAudioTimer.Stop();
                callIncomingAudioTimer.Stop();
            });

            if (e.Signal == SignalType.hangUp)
            {
                DependencyService.Get <IAudio>().PlayAudioFile(EndCallFileName);
            }
            else if (e.Signal == SignalType.reject)
            {
                DependencyService.Get <IAudio>().PlayAudioFile(BusyFileName);
            }
        }
		private void IncomingDropMessage(object sender, VideoChatMessage e)
		{
			//if (e.Caller == e.Sender.ToString())
			//{
				Device.BeginInvokeOnMainThread(() => App.SetUsersPage());
			//}
			//else 
			//{
			//	users = users.Where(u => u.Id != e.Sender).ToList();
			//	if (users.Any())
			//	{
			//		Device.BeginInvokeOnMainThread(() => App.SetUsersPage());
			//	}
			//}
		}
        private void OnVideoMessageReceived(object sender, VideoChatMessage e)
        {
            //if (e.Caller != OpponentId)
            //	return;

            //Dateifi.LogProvider.Instance().LogEvent("Signal type: " + e.Signal + " Guid: " + e.Guid + "; Receiver: " + e.Receiver + "; Caller: " + e.Caller);

            //if (VideoChatState == VideoChatState.SendOffer && e.Signal == SignalType.call)
            //	return;

            //if (e.Signal == SignalType.reject || e.Signal == SignalType.hangUp)
            //{
            //	hangUpCall.Invoke();
            //	VideoChatState = VideoChatState.None;
            //	if (conference != null)
            //	{
            //		conference.UnlinkAll();
            //	}

            //	if (localMedia != null)
            //	{
            //		localMedia.LocalMediaStream.MuteAudio();
            //	}
            //}
            //else if (e.Signal == SignalType.call || e.Signal == SignalType.accept)
            //{
            //	// Входящий сигнал, и текущее состояние не активен
            //	if (VideoChatState == VideoChatState.None)
            //	{
            //		SessionId = e.Guid;

            //		//if (await requestStartvideo ()) {
            //		VideoChatState = VideoChatState.WaitAnswer;
            //		OfferAnswer offer = new OfferAnswer();
            //		offer.SdpMessage = e.Sdp;
            //		offer.IsOffer = true;
            //		conference.ReceiveOfferAnswer(offer, e.Caller.ToString());
            //		//} else {
            //		//	webSyncClient.Reject (SessionId, OpponentId);
            //		//}
            //	}
            //	else if (VideoChatState == VideoChatState.SendOffer)
            //	{
            //		VideoChatState = VideoChatState.Complete;
            //		OfferAnswer answer = new OfferAnswer();
            //		answer.SdpMessage = e.Sdp;
            //		answer.IsOffer = false;
            //		conference.ReceiveOfferAnswer(answer, e.Caller.ToString());
            //	}
            //}
            //else if (e.Signal == SignalType.iceCandidates)
            //{
            //	foreach (var iceCandidate in e.IceCandidates)
            //	{
            //		var candidate = new Candidate();
            //		candidate.SdpCandidateAttribute = iceCandidate.Candidate;
            //		candidate.SdpMediaIndex = iceCandidate.SdpMLineIndex != null ? int.Parse(iceCandidate.SdpMLineIndex) : 0;
            //		SessionId = e.Guid;
            //		conference.ReceiveCandidate(candidate, e.Caller.ToString());
            //	}
            //}

            //Dateifi.LogProvider.Instance().LogEvent("End OnHeadlineMessageReceive");
        }
Exemple #12
0
		public static void SetVideoCall(bool isCallInitiator, User mainUser, List<User> opponents, VideoChatMessage videoMessage, bool isVideoCall = true)
		{
			var page = new VideoPage(isCallInitiator, mainUser, opponents, videoMessage, isVideoCall);
			Current.MainPage = page;
		}
		private void OnVideoMessageReceived(object sender, VideoChatMessage e)
		{
			//if (e.Caller != OpponentId)
			//	return;

			//Dateifi.LogProvider.Instance().LogEvent("Signal type: " + e.Signal + " Guid: " + e.Guid + "; Receiver: " + e.Receiver + "; Caller: " + e.Caller);

			//if (VideoChatState == VideoChatState.SendOffer && e.Signal == SignalType.call)
			//	return;

			//if (e.Signal == SignalType.reject || e.Signal == SignalType.hangUp)
			//{
			//	hangUpCall.Invoke();
			//	VideoChatState = VideoChatState.None;
			//	if (conference != null)
			//	{
			//		conference.UnlinkAll();
			//	}

			//	if (localMedia != null)
			//	{
			//		localMedia.LocalMediaStream.MuteAudio();
			//	}
			//}
			//else if (e.Signal == SignalType.call || e.Signal == SignalType.accept)
			//{
			//	// Входящий сигнал, и текущее состояние не активен
			//	if (VideoChatState == VideoChatState.None)
			//	{
			//		SessionId = e.Guid;

			//		//if (await requestStartvideo ()) {
			//		VideoChatState = VideoChatState.WaitAnswer;
			//		OfferAnswer offer = new OfferAnswer();
			//		offer.SdpMessage = e.Sdp;
			//		offer.IsOffer = true;
			//		conference.ReceiveOfferAnswer(offer, e.Caller.ToString());
			//		//} else {
			//		//	webSyncClient.Reject (SessionId, OpponentId);
			//		//}			
			//	}
			//	else if (VideoChatState == VideoChatState.SendOffer)
			//	{
			//		VideoChatState = VideoChatState.Complete;
			//		OfferAnswer answer = new OfferAnswer();
			//		answer.SdpMessage = e.Sdp;
			//		answer.IsOffer = false;
			//		conference.ReceiveOfferAnswer(answer, e.Caller.ToString());
			//	}
			//}
			//else if (e.Signal == SignalType.iceCandidates)
			//{
			//	foreach (var iceCandidate in e.IceCandidates)
			//	{
			//		var candidate = new Candidate();
			//		candidate.SdpCandidateAttribute = iceCandidate.Candidate;
			//		candidate.SdpMediaIndex = iceCandidate.SdpMLineIndex != null ? int.Parse(iceCandidate.SdpMLineIndex) : 0;
			//		SessionId = e.Guid;
			//		conference.ReceiveCandidate(candidate, e.Caller.ToString());
			//	}
			//}

			//Dateifi.LogProvider.Instance().LogEvent("End OnHeadlineMessageReceive");



		}
Exemple #14
0
        public static void SetVideoCall(bool isCallInitiator, User mainUser, List <User> opponents, VideoChatMessage videoMessage, bool isVideoCall = true)
        {
            var page = new VideoPage(isCallInitiator, mainUser, opponents, videoMessage, isVideoCall);

            Current.MainPage = page;
        }
        private void OnVideoChatMessageReceived(object sender, VideoChatMessage e)
        {
            //if (e.Caller != OpponentId)
            //    return;

            // Check if message missing and not actual from other call
            if (e.SessionId != this.sessionId && this.sessionId != null)
            {
                return;
            }

            // Reject incoming call when current user call
            if (e.Signal == SignalType.call && VideoChatState != VideoChatState.None)
            {
                if (sessionId == e.SessionId)
                {
                    return;
                }

                this.webSyncClient.Reject(e.SessionId, e.Caller, e.Caller, e.OpponentsIds.ToList(), Device.OS.ToString().ToLower());

                // Check if user already call to this user now
                if (opponents != null && opponents.FirstOrDefault(u => u.Id.ToString() == e.Caller) != null)
                {
                    DropCall(sender, e);
                }

                return;
            }

            if ((e.Signal == SignalType.reject || e.Signal == SignalType.hangUp) && this.sessionId != null)
            {
                DropCall(sender, e);
            }
            else if ((e.Signal == SignalType.call && this.sessionId == null) || (e.Signal == SignalType.accept && this.sessionId != null))
            {
                // Входящий сигнал, и текущее состояние не активен
                if (VideoChatState == VideoChatState.None)
                {
                    var callerIdInRequestCall = e.Caller;
                    var callerUser            = App.UsersInRoom.FirstOrDefault(u => u.Id == Int32.Parse(callerIdInRequestCall));
                    if (callerUser != null)
                    {
                        this.IsConnecting = true;
                        VideoChatState    = VideoChatState.WaitAnswer;

                        var opponents = new List <User>();
                        foreach (var id in e.OpponentsIds)
                        {
                            var user = App.UsersInRoom.FirstOrDefault(u => u.Id == Int32.Parse(id));
                            if (user != null)
                            {
                                opponents.Add(user);
                            }
                        }

                        InvokeIncomingEvent(sender, e, callerUser, opponents);
                    }

                    //if (await requestStartvideo ()) {
                    //VideoChatState = VideoChatState.WaitAnswer;
                    //OfferAnswer offer = new OfferAnswer();
                    //offer.SdpMessage = e.Sdp;
                    //offer.IsOffer = true;
                    //Conference.ReceiveOfferAnswer(offer, e.Caller.ToString());
                    //} else {
                    //	WebSyncClient.Reject (SessionId, OpponentId);
                    //}
                }
                else if (VideoChatState == VideoChatState.SendOffer)
                {
                    VideoChatState = VideoChatState.Complete;
                    this.CurrentCall.ReceiveOfferAnwer(e.Sdp, false, e.Sender.ToString());
                    //OfferAnswer answer = new OfferAnswer();
                    //answer.SdpMessage = e.Sdp;
                    //answer.IsOffer = false;
                    //Conference.ReceiveOfferAnswer(answer, e.Caller.ToString());
                }
            }
            else if ((e.Signal == SignalType.iceCandidates) && this.sessionId != null)
            {
                //foreach (var iceCandidate in e.IceCandidates)
                //{
                //	var candidate = new Candidate();
                //	candidate.SdpCandidateAttribute = iceCandidate.Candidate;
                //	candidate.SdpMediaIndex = iceCandidate.SdpMLineIndex != null ? int.Parse(iceCandidate.SdpMLineIndex) : 0;
                //	SessionId = e.Guid;
                //	Conference.ReceiveCandidate(candidate, e.Caller.ToString());
                //}

                if (e.IceCandidates == null)
                {
                    return;
                }

                this.CurrentCall.ReceiveIceCandidate(e.IceCandidates, e.Sender.ToString());
            }
        }