Reference
Setup
struct Setup: EyesonEvent {
  var locked: Bool
  var recording: Recording?
  var snapshots: [Snapshots.Item]?
  var broadcasts: [Broadcasts.Item]?
}
Mode
struct Mode: EyesonEvent {
  var video: Bool // false if audio only
  var p2p: Bool   // determines if MCU or SFU mode
}
Locked
struct Locked: EyesonEvent {
  var locked: Bool
}
Chat
struct Chat: EyesonEvent {
  var user: User
  var message: String
}
Custom Message
struct Custom: EyesonEvent {
  var content: String
}
Participants
struct Participants: EyesonEvent {
  var audio: [User]
  var video: [User]
  var presenter: User?
}
Recording
struct Recording: EyesonEvent {
  var id: String
  var duration: Double? // nil if recording is currently active
  var links: Links // present if recording file has been processed
  var user: User
  var createdAt: Date
}
Muted
struct Muted: EyesonEvent {
  var by: User
}
Voice Activity
struct Voice: EyesonEvent {
  var user: user
  var active: Bool
}
Snapshots
struct Snapshots: EyesonEvent {
  var items: [Item]
  struct Item: Identifiable {
    var id: String
    var name: String
    var links: Links
    var user: User
    var createdAt: Date
  }
}
Broadcasts
struct Broadcasts: EyesonEvent {
  var items: [Item]
  struct Item: Identifiable {
    var id: String
    var platform: String
    var playerUrl: URL
    var user: User
  }
}
Playback
struct Playback: EyesonEvent {
  var items: [Item]
  struct Item: Identifiable {
    var id: String
    var name: String
    var url: URL
    var replacementId: String
    var audio: Bool
  }
}
Stats
struct Stats: EyesonEvent {
  var jitter: Double
  var packetLoss: Double
  var roundTripTime: Double
  var nack: Double
  var bitrateSend: Double // Bits per second sent
  var bitrateReceive: Double  // Bits per second received
  var status: Status // Average quality .good|.ok|.bad|.unknown
  var bytesSent: Double
  var bytesReceived: Double
  var time: TimeInterval
  enum Status {
              case bad
              case ok
              case good
              case unknown
          }
}
Terminated
struct Terminated: EyesonEvent {
  var reason: TerminateReason
}
TerminateReason
enum TerminateReason {
    case locked
    case unwanted
    case busy
    case declined
    case terminated
    case gone
    case other
}