SelectGroup

class SelectGroup[F[_], S](api: Gopher[F]) extends SelectListeners[F, S, S]

Select group is a virtual 'lock' object. Readers and writers are grouped into select groups. When event about avaiability to read or to write is arrived and no current event group members is running, than run of one of the members is triggered. I.e. only one from group can run.

Note, that application develeper usually not work with SelectGroup directly, it is created internally by select pseudostatement.

See also:

[gopher.Select]

[gopher.select]

Source:
SelectGroup.scala
trait SelectListeners[F, S, S]
class Object
trait Matchable
class Any

Type members

Classlikes

case class ReaderRecord[A](ch: ReadChannel[F, A], action: Try[A] => F[S]) extends Reader[A] with Expiration
case class TimeoutRecord(duration: FiniteDuration, action: Try[FiniteDuration] => F[S]) extends Expiration
case class WriterRecord[A](ch: WriteChannel[F, A], element: A, action: Try[Unit] => F[S]) extends Writer[A] with Expiration

Value members

Concrete methods

def addReader[A](ch: ReadChannel[F, A], action: Try[A] => F[S]): Unit
def addWriter[A](ch: WriteChannel[F, A], element: A, action: Try[Unit] => F[S]): Unit
transparent inline def apply(inline pf: PartialFunction[Any, S])(using mc: CpsMonadContext[F]): S
override def asyncMonad: CpsSchedulingMonad[F]
Definition Classes
Source:
SelectGroup.scala
def done[S](s: S): Done[S]

short alias for SelectFold.Done

short alias for SelectFold.Done

Source:
SelectGroup.scala
def onRead[A](ch: ReadChannel[F, A])(f: A => S): SelectGroup[F, S]

FluentDSL for user SelectGroup without macroses.

FluentDSL for user SelectGroup without macroses.

SelectGroup.onRead(input){ x => println(x) }
          .onRead(endSignal){ () => done=true }
Source:
SelectGroup.scala
def onReadAsync[A](ch: ReadChannel[F, A])(f: A => F[S]): SelectGroup[F, S]
def onRead_async[A](ch: ReadChannel[F, A])(f: A => F[S]): F[SelectGroup[F, S]]
def onTimeout(t: FiniteDuration)(f: FiniteDuration => S): SelectGroup[F, S]
def onTimeoutAsync(t: FiniteDuration)(f: FiniteDuration => F[S]): SelectGroup[F, S]
def onTimeout_async(t: FiniteDuration)(f: FiniteDuration => F[S]): F[SelectGroup[F, S]]
def onWrite[A](ch: WriteChannel[F, A], a: => A)(f: A => S): SelectGroup[F, S]

FluentDSL for user SelectGroup without macroses.

FluentDSL for user SelectGroup without macroses.

SelectGroup.onWrite(input){ x => println(x) }
          .onWrite(endSignal){ () => done=true }
Source:
SelectGroup.scala
def onWriteAsync[A](ch: WriteChannel[F, A], a: () => F[A])(f: A => F[S]): SelectGroup[F, S]
def runAsync(): F[S]
transparent inline def select(inline pf: PartialFunction[Any, S])(using mc: CpsMonadContext[F]): S
def setTimeout(timeout: FiniteDuration, action: Try[FiniteDuration] => F[S]): Unit
def step(): F[S]

Inherited methods

transparent inline def run()(using CpsMonadContext[F]): S

Concrete fields

val waitState: AtomicInteger

instance of select group created for call of select. 0 - free 1 - now processes 2 - expired

instance of select group created for call of select. 0 - free 1 - now processes 2 - expired

Source:
SelectGroup.scala