12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- using InABox.Core;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Net;
- namespace InABox.Core
- {
- public interface IPollHandler
- {
- Type Type { get; }
- /// <summary>
- /// Polls for pushes, called on client connection.
- /// </summary>
- /// <returns>New pushes</returns>
- IEnumerable<BaseObject> Poll(Guid session);
- }
- public class PollHandler<TPush> : IPollHandler
- where TPush : BaseObject
- {
- public delegate IEnumerable<TPush> PollEvent(Guid session);
- public event PollEvent? OnPoll;
- public Type Type => typeof(TPush);
- public PollHandler() { }
- public PollHandler(PollEvent poll)
- {
- OnPoll += poll;
- }
- public IEnumerable<BaseObject> Poll(Guid session) => OnPoll?.Invoke(session) ?? Array.Empty<TPush>();
- }
- /// <summary>
- /// Classes that implement this interface implement the manner by which the server actually gets messages pushed to the client.
- /// The implementation will manage the transport layer.
- /// </summary>
- /// <remarks>
- /// If one wishes to implement <see cref="IPusher"/>, it is likely one should also register it with <see cref="PushManager.AddPusher(IPusher)"/>;
- /// this way, when the server wishes to push a message, it will go through this pusher (as well as any other registered ones).
- /// </remarks>
- public interface IPusher
- {
- void PushToAll<TPush>(TPush push) where TPush : BaseObject;
- void PushToSession<TPush>(Guid session, TPush push) where TPush : BaseObject;
- void PushToSession(Guid session, Type TPush, BaseObject push);
- IEnumerable<Guid> GetUserSessions(Guid user);
- IEnumerable<Guid> GetSessions(Platform platform);
- public void Push<TPush>(TPush push)
- where TPush : BaseObject
- {
- PushToAll(push);
- }
- public void Push(Guid session, Type TPush, BaseObject push)
- {
- PushToSession(session, TPush, push);
- }
- public void Push<TPush>(Guid session, TPush push)
- where TPush : BaseObject
- {
- PushToSession(session, push);
- }
- public void PushUser<TPush>(Guid user, TPush push)
- where TPush : BaseObject
- {
- foreach (var session in GetUserSessions(user))
- {
- PushToSession(session, push);
- }
- }
- public void Push<TPush>(Platform platform, TPush push)
- where TPush : BaseObject
- {
- foreach (var session in GetSessions(platform))
- {
- PushToSession(session, push);
- }
- }
- }
- }
|