Exemplo n.º 1
0
        public Task SendMessage <T>(SessionMessageType name, Guid messageId, T data, CancellationToken cancellationToken)
        {
            if (_disposed)
            {
                throw new ObjectDisposedException(GetType().Name);
            }

            if (_device == null)
            {
                return(Task.CompletedTask);
            }

            if (name == SessionMessageType.Play)
            {
                return(SendPlayCommand(data as PlayRequest, cancellationToken));
            }

            if (name == SessionMessageType.Playstate)
            {
                return(SendPlaystateCommand(data as PlaystateRequest, cancellationToken));
            }

            if (name == SessionMessageType.GeneralCommand)
            {
                return(SendGeneralCommand(data as GeneralCommand, cancellationToken));
            }

            // Not supported or needed right now
            return(Task.CompletedTask);
        }
Exemplo n.º 2
0
        public SessionMessageBase AssembleFragment(SessionMessageBase message, uint sequenceNumber)
        {
            FragmentMessage fragment = message as FragmentMessage;

            SessionMessageType messageType = fragment.Header.SessionMessageType;
            int sequenceBegin = (int)fragment.SequenceBegin;
            int sequenceEnd   = (int)fragment.SequenceEnd;

            _fragmentQueue[(int)sequenceNumber] = fragment.Data;

            IEnumerable <int> neededSequences = Enumerable.Range(sequenceBegin, sequenceEnd - sequenceBegin);

            foreach (var seq in neededSequences)
            {
                if (!_fragmentQueue.ContainsKey(seq))
                {
                    return(null);
                }
            }

            EndianWriter writer = new EndianWriter();

            foreach (int seq in neededSequences)
            {
                byte[] data = _fragmentQueue[seq];
                writer.Write(data);
                _fragmentQueue.Remove(seq);
            }

            SessionMessageBase assembled = SessionMessageTransport.CreateFromMessageType(messageType);

            assembled.Deserialize(new EndianReader(writer.ToBytes()));
            return(assembled);
        }
Exemplo n.º 3
0
        public static SessionMessageBase CreateFromMessageType(SessionMessageType messageType)
        {
            var type = SessionMessageTypeAttribute.GetTypeForMessageType(messageType);

            if (type == null)
            {
                return(new UnknownMessage());
            }

            return((SessionMessageBase)Activator.CreateInstance(type));
        }
Exemplo n.º 4
0
        private async Task SendMessage(SessionMessageType name, TimerEventInfo info)
        {
            var users = _userManager.Users.Where(i => i.HasPermission(PermissionKind.EnableLiveTvAccess)).Select(i => i.Id).ToList();

            try
            {
                await _sessionManager.SendMessageToUserSessions(users, name, info, CancellationToken.None).ConfigureAwait(false);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Error sending message");
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Returns the session the message code.
        /// </summary>
        /// <param name="type">The session message type.</param>
        /// <returns></returns>
        private string SessionMessageCode(SessionMessageType type)
        {
            switch (type)
            {
            case SessionMessageType.Heartbeat:
                return("0");

                break;

            case SessionMessageType.Logon:
                return("A");

                break;

            case SessionMessageType.Logout:
                return("5");

                break;

            case SessionMessageType.Reject:
                return("3");

                break;

            case SessionMessageType.Resend:
                return("2");

                break;

            case SessionMessageType.SequenceReset:
                return("4");

                break;

            case SessionMessageType.TestRequest:
                return("1");

                break;

            default:
                return("0");
            }
        }
        public SessionMessageBase AssembleFragment(SessionMessageBase message, uint sequenceNumber)
        {
            FragmentMessage fragment = message as FragmentMessage;

            SessionMessageType messageType = fragment.Header.SessionMessageType;
            int sequenceBegin = (int)fragment.SequenceBegin;
            int sequenceEnd   = (int)fragment.SequenceEnd;

            _fragmentQueue[(int)sequenceNumber] = fragment.Data;

            IEnumerable <int> neededSequences = Enumerable.Range(sequenceBegin, sequenceEnd - sequenceBegin);

            BEWriter writer = new BEWriter();

            foreach (int seq in neededSequences)
            {
                try
                {
                    byte[] data = _fragmentQueue[seq];
                    writer.Write(data);
                }
                catch (KeyNotFoundException)
                {
                    return(null);
                }
            }

            // Pop obsolete fragment data
            foreach (int seq in neededSequences)
            {
                _fragmentQueue.Remove(seq);
            }

            SessionMessageBase assembled = SessionMessageTransport.CreateFromMessageType(messageType);

            assembled.Deserialize(new BEReader(writer.ToBytes()));
            return(assembled);
        }
Exemplo n.º 7
0
        /// <inheritdoc />
        public Task SendMessage <T>(
            SessionMessageType name,
            Guid messageId,
            T data,
            CancellationToken cancellationToken)
        {
            var socket = GetActiveSockets()
                         .OrderByDescending(i => i.LastActivityDate)
                         .FirstOrDefault();

            if (socket == null)
            {
                return(Task.CompletedTask);
            }

            return(socket.SendAsync(
                       new WebSocketMessage <T>
            {
                Data = data,
                MessageType = name,
                MessageId = messageId
            },
                       cancellationToken));
        }
 /// <summary>
 /// Sets the message to display on the next page load.
 /// </summary>
 /// <param name="message">The message.</param>
 /// <param name="messageType">Type of the message.</param>
 /// <param name="survivePageLoads">Number of pageloads for this message to survive.</param>
 public static void SetMessage(string message, SessionMessageType messageType, int survivePageLoads)
 {
     HttpContext.Current.Session[SessionMessageKey]       = message;
     HttpContext.Current.Session[SessionMessageTypeKey]   = messageType;
     HttpContext.Current.Session[SessionMessageStickyKey] = survivePageLoads;
 }
 /// <summary>
 /// Sets the message to display on the next page load.
 /// </summary>
 /// <param name="message">The message.</param>
 /// <param name="messageType">Type of the message.</param>
 public static void SetMessage(string message, SessionMessageType messageType)
 {
     SetMessage(message, messageType, 1);
 }
Exemplo n.º 10
0
 public SessionInfo(int sessionId, int terminalId, int remDevId, SessionMessageType infotype)
 {
     SetData(sessionId, terminalId, remDevId, infotype);
 }
Exemplo n.º 11
0
 public SessionMessageTypeAttribute(SessionMessageType messageType)
 {
     MessageType = messageType;
 }
Exemplo n.º 12
0
 public static Type GetTypeForMessageType(SessionMessageType messageType)
 {
     return(_typeMapping.GetTypeForKey(messageType));
 }