sync

package
v0.4.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 19, 2023 License: Apache-2.0 Imports: 6 Imported by: 0

Documentation

Overview

Package sync provides the synchronization primitives for the server.

Index

Constants

This section is empty.

Variables

View Source
var ErrAlreadyLocked = errors.New("already locked")

ErrAlreadyLocked is returned when the lock is already locked.

Functions

This section is empty.

Types

type Coordinator

type Coordinator interface {
	// NewLocker creates a sync.Locker.
	NewLocker(ctx context.Context, key Key) (Locker, error)

	// Subscribe subscribes to the given documents.
	Subscribe(
		ctx context.Context,
		subscriber types.Client,
		documentID types.ID,
	) (*Subscription, []types.Client, error)

	// Unsubscribe unsubscribes from the given documents.
	Unsubscribe(
		ctx context.Context,
		documentID types.ID,
		sub *Subscription,
	) error

	// Publish publishes the given event.
	Publish(ctx context.Context, publisherID *time.ActorID, event DocEvent)

	// PublishToLocal publishes the given event.
	PublishToLocal(ctx context.Context, publisherID *time.ActorID, event DocEvent)

	// UpdatePresence updates the presence of the given client.
	UpdatePresence(
		ctx context.Context,
		publisher *types.Client,
		documentID types.ID,
	) error

	// Members returns the members of this cluster.
	Members() map[string]*ServerInfo

	// Close closes all resources of this Coordinator.
	Close() error
}

Coordinator provides synchronization functions such as locks and event Pub/Sub.

type DocEvent

type DocEvent struct {
	Type       types.DocEventType
	Publisher  types.Client
	DocumentID types.ID
}

DocEvent represents events that occur related to the document.

type Key

type Key string

Key represents key of Locker.

func NewKey

func NewKey(key string) Key

NewKey creates a new instance of Key.

func (Key) String

func (k Key) String() string

String returns a string representation of this Key.

type Locker

type Locker interface {
	// Lock locks the mutex with a cancelable context
	Lock(ctx context.Context) error

	// TryLock locks the mutex if not already locked by another session.
	TryLock(ctx context.Context) error

	// Unlock unlocks the mutex.
	Unlock(ctx context.Context) error
}

A Locker represents an object that can be locked and unlocked.

type ServerInfo

type ServerInfo struct {
	ID        string      `json:"id"`
	Hostname  string      `json:"hostname"`
	UpdatedAt gotime.Time `json:"updated_at"`
}

ServerInfo represents the information of the Server.

type Subscription

type Subscription struct {
	// contains filtered or unexported fields
}

Subscription represents a subscription of a subscriber to documents.

func NewSubscription

func NewSubscription(subscriber types.Client) *Subscription

NewSubscription creates a new instance of Subscription.

func (*Subscription) Close

func (s *Subscription) Close()

Close closes all resources of this Subscription.

func (*Subscription) Events

func (s *Subscription) Events() chan DocEvent

Events returns the DocEvent channel of this subscription.

func (*Subscription) ID

func (s *Subscription) ID() string

ID returns the id of this subscription.

func (*Subscription) Subscriber

func (s *Subscription) Subscriber() types.Client

Subscriber returns the subscriber of this subscription.

func (*Subscription) SubscriberID

func (s *Subscription) SubscriberID() string

SubscriberID returns string representation of the subscriber.

func (*Subscription) UpdatePresence

func (s *Subscription) UpdatePresence(info types.PresenceInfo)

UpdatePresence updates the presence of the subscriber.

Directories

Path Synopsis
Package memory provides the memory implementation of the sync package.
Package memory provides the memory implementation of the sync package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL