Exemplo n.º 1
0
        /// <summary>
        /// Запуск ответа на звонок из браузера
        /// </summary>
        /// <param name="callId">ID звонка</param>
        /// <returns>status code</returns>
        public ResponseHelper Answer(string callId)
        {
            ResponseHelper response = new ResponseHelper();

            try
            {
                Guid        connectionId = new Guid(Context.ConnectionId);
                SignalRUser user         = connectionsList.Find(x => x.ConnectionId.Contains(connectionId));
                CrmHelper   crm          = new CrmHelper();
                response = crm.SetAttrsAnswer(callId);
                if (!response.IsError)
                {
                    response = crm.CreateIncident(callId);
                    Guid[]   connectionsIds         = user.ConnectionId.ToArray();
                    string[] connectionsIdsToString = Array.ConvertAll(connectionsIds, x => x.ToString());
                    var      context = GlobalHost.ConnectionManager.GetHubContext <CrmHub>();
                    context.Clients.Clients(connectionsIdsToString).SuccessAnswer(response.TransferParam);
                }
            } catch (Exception e)
            {
                response.IsError      = true;
                response.ErrorMessage = e.Message;
                response.Code         = 500;
                return(response);
            }
            return(response);
        }
Exemplo n.º 2
0
 private void Client_OnMessageReceived(SignalRUser user)
 {
     Device.BeginInvokeOnMainThread(() =>
     {
         model.Add(user);
     });
 }
Exemplo n.º 3
0
        public void Connect(string _username)
        {
            Connection = new HubConnection(url, new Dictionary
                                           <string, string>
            {
                { "username", _username }
            });

            Connection.StateChanged += Connection_StateChanged;

            ChatHubProxy = Connection.CreateHubProxy("ChatHub");

            ChatHubProxy.On <string, string>("MessageReceived",
                                             (username, message) =>
            {
                var user = new SignalRUser
                {
                    userName = username,
                    message  = message
                };
                OnMessageReceived?.Invoke(user);
            });

            Start().ContinueWith(task =>
            {
                if (task.IsFaulted)
                {
                    ConnectionError?.Invoke();
                }
            });
        }
Exemplo n.º 4
0
        /// <summary>
        /// Выход из extension
        /// </summary>
        /// <param name="inputNumber">Короткий номер пользователя</param>
        /// <returns>status code</returns>
        public ResponseHelper SignOut(string inputNumber)
        {
            CrmHelper      crm          = new CrmHelper();
            Guid           connectionId = new Guid(Context.ConnectionId);
            ResponseHelper response     = crm.LogOff(inputNumber);

            if (!response.IsError)
            {
                SignalRUser user = connectionsList.Find(x => x.ShortNumber.Equals(inputNumber));
                connectionsList.Remove(user);
            }
            return(response);
        }
Exemplo n.º 5
0
        public async void AddConUserList(string user, string groupName)
        {
            var _user = new SignalRUser();

            _user.UserName   = user;
            _user.ConnectID  = Context.ConnectionId;
            _user.OnlineTime = DateTime.Now;
            _user.GroupName  = groupName;

            await Groups.AddToGroupAsync(Context.ConnectionId, groupName);

            await Clients.Group(groupName).SendAsync("GetConList", conUserList.AddList(_user));
        }
Exemplo n.º 6
0
        public void AddNewUser(SignalRUser user, string hubConnectionId)
        {
            SignalRUser checkUser = OnlineUsers.Where(u => u.email == user.email).FirstOrDefault();

            if (checkUser == null && user.email != null && user.username != null)
            {
                user.hubConnectionId = hubConnectionId;
                OnlineUsers.Add(user);
            }
            if (checkUser != null)
            {
                checkUser.hubConnectionId = hubConnectionId;
            }
            OnlineUsers = OnlineUsers.DistinctBy(x => x.email).ToList();
        }
Exemplo n.º 7
0
        /// <summary>
        /// Метод авторизации extension SignalR (вызывается из браузера)
        /// </summary>
        /// <param name="inputNumber">Короткий номер пользователя</param>
        /// <returns>status code</returns>
        public ResponseHelper SignIn(string inputNumber)
        {
            CrmHelper      crm          = new CrmHelper();
            Guid           connectionId = new Guid(Context.ConnectionId);
            ResponseHelper response     = crm.LogIn(inputNumber);

            if (!response.IsError)
            {
                SignalRUser user = new SignalRUser();
                user.ConnectionId = new List <Guid> {
                    connectionId
                };
                user.ShortNumber = inputNumber;
                connectionsList.Add(user);
            }
            return(response);
        }
Exemplo n.º 8
0
        /// <summary>
        /// Триггер SignalR на отсоединение пользователя CRM
        /// </summary>
        /// <param name="stopCalled">системный параметр</param>
        /// <returns></returns>
        public override Task OnDisconnected(bool stopCalled)
        {
            Guid connectionId = new Guid(Context.ConnectionId);

            try
            {
                SignalRUser user = connectionsList.Find(x => x.ConnectionId.Contains(connectionId));
                if (user != null && user.ConnectionId.Count > 1)
                {
                    Guid id = user.ConnectionId.Find(x => x == connectionId);
                    user.ConnectionId.Remove(id);
                }
                else if (user != null)
                {
                    connectionsList.Remove(user);
                }
            } catch { }
            return(base.OnDisconnected(stopCalled));
        }
Exemplo n.º 9
0
        /// <summary>
        /// Запуск звонка в браузере
        /// </summary>
        /// <param name="callerHelper">Объект с полями информации о вызывающем абоненте АТС + Короткий номер пользователя + ID звонка</param>
        /// <returns>status code</returns>
        public ResponseHelper ExecuteSignalRIncomingCall(CallerHepler callerHelper)
        {
            ResponseHelper response = new ResponseHelper();

            try
            {
                SignalRUser user                   = connectionsList.Find(x => x.ShortNumber.Equals(callerHelper.UserShortNumber));
                Guid[]      connectionsIds         = user.ConnectionId.ToArray();
                string[]    connectionsIdsToString = Array.ConvertAll(connectionsIds, x => x.ToString());
                var         context                = GlobalHost.ConnectionManager.GetHubContext <CrmHub>();
                context.Clients.Clients(connectionsIdsToString).IncomingCall(callerHelper);
                response.Code = 200;
            } catch (Exception e)
            {
                response.IsError      = true;
                response.ErrorMessage = e.Message;
                response.Code         = 500;
                return(response);
            }
            return(response);
        }
Exemplo n.º 10
0
        /// <summary>
        /// Запуск завершения звонка из браузера
        /// </summary>
        /// <param name="callId">ID звонка</param>
        /// <param name="completeDate">Дата завершения звонка</param>
        /// <param name="reason">Описание(причина) завершения</param>
        /// <returns>status code</returns>
        public ResponseHelper CompleteCall(string callId, DateTime completeDate, string reason)
        {
            ResponseHelper response = new ResponseHelper();

            try
            {
                Guid        connectionId = new Guid(Context.ConnectionId);
                SignalRUser user         = connectionsList.Find(x => x.ConnectionId.Contains(connectionId));
                CrmHelper   crm          = new CrmHelper();
                response = crm.SetAttrsCompleteCall(callId, completeDate, reason);
                Guid[]   connectionsIds         = user.ConnectionId.ToArray();
                string[] connectionsIdsToString = Array.ConvertAll(connectionsIds, x => x.ToString());
                var      context = GlobalHost.ConnectionManager.GetHubContext <CrmHub>();
                context.Clients.Clients(connectionsIdsToString).BackToPage();
            } catch (Exception e)
            {
                response.IsError      = true;
                response.ErrorMessage = e.Message;
                response.Code         = 500;
                return(response);
            }
            return(response);
        }
Exemplo n.º 11
0
        /// <summary>
        /// Триггер SignalR на присоединение пользователя CRM
        /// </summary>
        /// <returns></returns>
        public override Task OnConnected()
        {
            string shortNumber = Context.QueryString["shortNumber"];

            if (shortNumber != null)
            {
                Guid        connectionId = new Guid(Context.ConnectionId);
                SignalRUser user         = connectionsList.Find(x => x.ShortNumber.Equals(shortNumber));
                if (user != null)
                {
                    user.ConnectionId.Add(connectionId);
                }
                else
                {
                    user              = new SignalRUser();
                    user.ShortNumber  = shortNumber;
                    user.ConnectionId = new List <Guid> {
                        connectionId
                    };
                    connectionsList.Add(user);
                }
            }
            return(base.OnConnected());
        }
Exemplo n.º 12
0
        public async Task OnConnectedAsync(SignalRUser user)
        {
            helper.AddNewUser(user, Context.ConnectionId);

            await Clients.All.SendAsync("NewOnlineUser", helper.GetOnlineUsers());
        }
Exemplo n.º 13
0
 public List <SignalRUser> AddList(SignalRUser user)
 {
     _list.Add(user);
     return(_list);
 }