| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 | using InABox.API;using InABox.Core;namespace InABox.IPC{    public class IPCPusher : IPusher    {        IPCPushState PushState { get; set; }        public IPCPusher(IPCPushState pushState)        {            PushState = pushState;            PushState.OnPoll += PushState_OnPoll;        }        private void PushState_OnPoll(IPCPushState.Session session)        {            PushManager.Poll(session.SessionID);        }        public IEnumerable<Guid> GetSessions(Platform platform)        {            return PushState.SessionMap.Where(x => x.Value.Platform == platform).Select(x => x.Key);        }        public IEnumerable<Guid> GetUserSessions(Guid userID)        {            return CredentialsCache.GetUserSessions(userID);        }        public void PushToAll<TPush>(TPush push) where TPush : BaseObject        {            foreach(var session in PushState.SessionMap.Values)            {                session.Connection.WriteAsync(IPCMessage.Push(push)).ContinueWith(task =>                {                    if(task.Exception != null)                    {                        Logger.Send(LogType.Error, "", $"Error in push: {CoreUtils.FormatException(task.Exception)}");                    }                });            }        }        public void PushToSession<TPush>(Guid sessionID, TPush push) where TPush : BaseObject        {            if(PushState.SessionMap.TryGetValue(sessionID, out var session))            {                session.Connection.WriteAsync(IPCMessage.Push(push)).ContinueWith(task =>                {                    if(task.Exception != null)                    {                        Logger.Send(LogType.Error, "", $"Error in push: {CoreUtils.FormatException(task.Exception)}");                    }                });            }        }        public void PushToSession(Guid sessionID, Type TPush, BaseObject push)        {            if(PushState.SessionMap.TryGetValue(sessionID, out var session))            {                session.Connection.WriteAsync(IPCMessage.Push(TPush, push)).ContinueWith(task =>                {                    if(task.Exception != null)                    {                        Logger.Send(LogType.Error, "", $"Error in push: {CoreUtils.FormatException(task.Exception)}");                    }                });            }        }    }}
 |