Options
All
  • Public
  • Public/Protected
  • All
Menu

Class CCounter

A collaborative counter with an add operation.

If multiple users call add concurrently, all of their additions take effect.

Values and add args are required to be safe integers, since floating-point addition is not commutative. If you need non-integer values, you should use e.g. counter.value / 100.

See also: CVar<number>: for a number that can be set and get atomically instead of counting.

Hierarchy

Index

Constructors

  • new CCounter(init: InitToken, options?: { initialValue?: number }): CCounter
  • Constructs a CCounter.

    Parameters

    • init: InitToken
    • options: { initialValue?: number } = {}
      • Optional initialValue?: number

        The initial value. Defaults to 0.

    Returns CCounter

Properties

name: string

Internal (this/parent) use only.

This Collab's name, which distinguishes it among its siblings in the tree of Collabs.

parent: Parent

Internal (this/parent) use only.

This Collab's parent in the tree of Collabs.

runtime: IRuntime

The ambient [[IRuntime]].

Use this to access utilities like [[IRuntime.replicaID]].

Accessors

  • get value(): number

Methods

  • add(toAdd: number): void
  • Adds the given number to value.

    If multiple users call add concurrently, all of their additions take effect.

    throws

    If toAdd is not a safe integer.

    Parameters

    • toAdd: number

    Returns void

  • canGC(): boolean
  • Internal (parent) use only.

    If this Collab is in its initial, post-constructor state, then this method may (but is not required to) return true; otherwise, it returns false.

    By default, this method always returns false; override to change.

    If this method returns true:

    1. The parent may choose to weakly reference this object to save memory (e.g., [[CLazyMap]] does so). If this becomes garbage collected, then is needed later, the parent will recreate it using the same constructor call.
    2. The parent may skip calling save during saving. When loading the resulting saved state, the parent will call load(null, meta). load should process this as if called with the output of save from a garbage-collectable state. For a nontrivial example, see CMultiValueMap.load's implementation.

    Returns boolean

  • emit<K>(eventName: K, event: CounterEventsRecord[K] & CollabEvent, options?: { skipAnyEvent?: boolean }): void
  • Emits an event, which triggers all the registered event handlers.

    See [[CollabEventsRecord]] for advice on what events to emit.

    This is a wrapper around [[EventEmitter.emit]] that forces events to extend [[CollabEvent]] and also emits an "Any" event.

    Type Parameters

    Parameters

    • eventName: K
    • event: CounterEventsRecord[K] & CollabEvent
    • Optional options: { skipAnyEvent?: boolean }
      • Optional skipAnyEvent?: boolean

        Set to true to skip emitting an "Any" event.

    Returns void

  • finalize(): void
  • Internal (parent) use only.

    Called by this Collab's parent when it has been deleted from a collection on the local replica and can no longer be used (e.g., due to CSet.delete on this or an ancestor). A Collab implementation can implement this method to clean up external resources, e.g., associated DOM elements.

    finalize has no relation to the JavaScript garbage collector or canGC.

    By default, this method does nothing.

    Returns void

  • load(savedState: null | SavedStateTree, meta: SavedStateMeta): void
  • Parameters

    • savedState: null | SavedStateTree
    • meta: SavedStateMeta

    Returns void

  • loadPrimitive(savedState: null | Uint8Array, meta: SavedStateMeta): void
  • Registers an event handler that is triggered when the event happens.

    Type Parameters

    Parameters

    • eventName: K

      Name of the event to listen on.

    • handler: ((event: CounterEventsRecord[K], caller: CCounter) => void)

      Callback that handles the event.

    • Optional options: { once?: boolean }
      • Optional once?: boolean

        If true, the event handler is triggered at most once (the next time the event happens), then unsubscribed.

    Returns (() => void)

    An "off" function that removes the event handler when called.

      • (): void
      • Registers an event handler that is triggered when the event happens.

        Returns void

        An "off" function that removes the event handler when called.

  • receive(messageStack: (string | Uint8Array)[], meta: MessageMeta): void
  • Parameters

    • messageStack: (string | Uint8Array)[]
    • meta: MessageMeta

    Returns void

  • receivePrimitive(message: string | Uint8Array, meta: MessageMeta): void
  • save(): SavedStateTree
  • Returns SavedStateTree

  • savePrimitive(): Uint8Array
  • send(messageStack: (string | Uint8Array)[], metaRequests: MetaRequest[]): void
  • Broadcasts a message to other replicas of this Collab. The message will be delivered to all replicas' receive, including locally.

    For convenience, the message may be expressed as a stack of (Uint8Array | string), instead of just a single Uint8Array. This is useful for parents sending messages on behalf of their children; see the implementation of [[CObject]] for an example.

    Parameters

    • messageStack: (string | Uint8Array)[]

      The message to send, in the form of a stack of Uint8Arrays. Note that this method may mutate it in-place.

    • metaRequests: MetaRequest[]

      A stack of metadata requests. The runtime will use the union of these when creating the [[MessageMeta]] for receive. Note that the stack need not align with messageStack, and this method may mutate it in place.

    Returns void

  • sendPrimitive(message: string | Uint8Array, metaRequest?: MetaRequest): void
  • Broadcasts a message to other replicas of this Collab. The message will be delivered to all replicas' receivePrimitive, including locally.

    Call this method instead of [[Collab.send]].

    Parameters

    • message: string | Uint8Array

      The message to send.

    • Optional metaRequest: MetaRequest

      A metadata request. The runtime will use this when creating the [[MessageMeta]] for receivePrimitive.

    Returns void

Generated using TypeDoc