Session

Struct Session 

Source
pub struct Session {
    pub terminal: Terminal,
    scrollback: Mutex<VecDeque<ScrollbackEvent>>,
    scrollback_bytes: Mutex<usize>,
    scrollback_limit: usize,
    clients: AtomicUsize,
    detached_at: Mutex<Option<Instant>>,
    window_size: Sender<(u16, u16)>,
}
Expand description

A persistent terminal session.

Tracks connected clients, buffers recent output for replay on reconnect, and detects when the session becomes orphaned.

Fields§

§terminal: Terminal§scrollback: Mutex<VecDeque<ScrollbackEvent>>§scrollback_bytes: Mutex<usize>§scrollback_limit: usize§clients: AtomicUsize§detached_at: Mutex<Option<Instant>>§window_size: Sender<(u16, u16)>

Implementations§

Source§

impl Session

Source

pub fn new( terminal: Terminal, output_rx: Receiver<Vec<u8>>, scrollback_limit: usize, ) -> Arc<Self>

Create a new session and spawn a background scrollback collector task.

Source

fn push_scrollback(&self, event: ScrollbackEvent)

Push an event into the scrollback ring buffer, evicting old events when the byte budget is exceeded.

Source

pub fn attach( &self, ) -> (Vec<ScrollbackEvent>, Receiver<Vec<u8>>, Receiver<(u16, u16)>)

Attach a client: increment the counter, subscribe to live output, and return the scrollback event log. The subscription and snapshot are taken under the same lock so no output is lost.

Source

pub fn set_window_size(&self, rows: u16, cols: u16)

Update the current PTY window size (broadcast to viewers) and record the resize in the scrollback log so replay clients see it too.

Source

pub fn detach(&self)

Detach a client. When the last client detaches, the orphan timer starts.

Source

fn is_orphaned(&self) -> bool

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,