/// <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); }
private void Client_OnMessageReceived(SignalRUser user) { Device.BeginInvokeOnMainThread(() => { model.Add(user); }); }
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(); } }); }
/// <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); }
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)); }
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(); }
/// <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); }
/// <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)); }
/// <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); }
/// <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); }
/// <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()); }
public async Task OnConnectedAsync(SignalRUser user) { helper.AddNewUser(user, Context.ConnectionId); await Clients.All.SendAsync("NewOnlineUser", helper.GetOnlineUsers()); }
public List <SignalRUser> AddList(SignalRUser user) { _list.Add(user); return(_list); }