using System;
using System.Collections.Generic;
using System.Linq;
using Abp.Dependency;
using IwbZero.ToolCommon.StringModel;
using Microsoft.AspNet.SignalR;
namespace WeOnlineApp.Hubs
{
public class IwbHub:Hub, ITransientDependency
{
///
/// 注册组链接
///
///
public void RegisterGroup(string name)
{
Groups.Add(Context.ConnectionId, name);
}
public static List UserList=> new List();
///
/// 注册链接
///
///
public void RegisterClient(string userNo)
{
var user = UserList.FirstOrDefault(a => a.UserNo == userNo);
if (user==null)
{
UserList.Add(new UserClient(userNo,Context.ConnectionId));
}
else
{
user.ConnectionId = Context.ConnectionId;
user.LastDateTime=DateTime.Now;
}
Clean();
}
public string GetConnectionId(string userNo)
{
var user = UserList.FirstOrDefault(a => a.UserNo == userNo);
Clean();
return user?.ConnectionId;
}
public void SendCurrentScenePath(string no, string path,string name)
{
Clients.Group(no).GetCurrentScenePath(new
{
path,
name
}.Obj2String());
}
public void Clean()
{
var list = UserList.Where(a => a.LastDateTime.AddHours(1) < DateTime.Now).ToList();
if (list.Any())
{
foreach (var userClient in list)
{
UserList.Remove(userClient);
}
}
}
public class UserClient
{
public UserClient(string userNo, string connectionId)
{
UserNo = userNo;
ConnectionId = connectionId;
LastDateTime = DateTime.Now;
}
public string UserNo { get; set; }
public string ConnectionId { get; set; }
public DateTime LastDateTime { get; set; }
}
}
}