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); }
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); }
public static SessionMessageBase CreateFromMessageType(SessionMessageType messageType) { var type = SessionMessageTypeAttribute.GetTypeForMessageType(messageType); if (type == null) { return(new UnknownMessage()); } return((SessionMessageBase)Activator.CreateInstance(type)); }
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"); } }
/// <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); }
/// <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); }
public SessionInfo(int sessionId, int terminalId, int remDevId, SessionMessageType infotype) { SetData(sessionId, terminalId, remDevId, infotype); }
public SessionMessageTypeAttribute(SessionMessageType messageType) { MessageType = messageType; }
public static Type GetTypeForMessageType(SessionMessageType messageType) { return(_typeMapping.GetTypeForKey(messageType)); }