class AnyCable::Socket::State

(for example, used to keep session beetween RPC calls)
Represents the per-connection store

def changed_fields

def changed_fields
  return unless source
  keys = dirty_keys
  return if keys.nil?
  source.slice(*keys)
end

def initialize(from)

def initialize(from)
  @source = from
  @dirty_keys = nil
end

def read(key)

def read(key)
  source&.[](key)
end

def write(key, val)

def write(key, val)
  return if source&.[](key) == val
  @source ||= {}
  keys = (@dirty_keys ||= [])
  keys << key
  source[key] = val
end