package Ġcom . she pel ie v . we br t ck mp Ċ Ċ import ĠWeb RTC . RT CA udio Track Ċ import ĠWeb RTC . RTC Data Channel Ċ import ĠWeb RTC . RT CI ce Candidate Ċ import ĠWeb RTC . RT CI ce Connection State Ċ import ĠWeb RTC . RT CI ce Gather ing State Ċ import ĠWeb RTC . RT CM edia Stream Ċ import ĠWeb RTC . RT CP eer Connection Ċ import ĠWeb RTC . RT CP eer Connection Delegate Protocol Ċ import ĠWeb RTC . RT CP eer Connection State Ċ import ĠWeb RTC . RT CR tp MediaType Ċ import ĠWeb RTC . RT CR tp Receiver Ċ import ĠWeb RTC . RT CR tp Trans ceiver Ċ import ĠWeb RTC . RTC Signal ing State Ċ import ĠWeb RTC . RTC Video Track Ċ import Ġkotlinx . coroutines . Main Scope Ċ import Ġkotlinx . coroutines . cancel Ċ import Ġkotlinx . coroutines . launch Ċ import Ġplatform . darwin . NSObject Ċ import Ġkotlin . native . concurrent . freeze Ċ Ċ internal Ġclass ĠPeer Connection Observer ( ĊĠĠĠ Ġprivate Ġval Ġevents : ĠPeer Connection Events , Ċ ) Ġ: ĠNSObject (), ĠR TCP eer Connection Delegate Protocol Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġscope Ġ= ĠMain Scope () ĊĊĠĠĠ Ġoverride Ġfun Ġpeer Connection ( ĊĠĠĠĠĠĠĠ Ġpeer Connection : ĠR TCP eer Connection , ĊĠĠĠĠĠĠĠ Ġdid Change Signal ing State : ĠRTC Signal ing State ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevents . on Signal ing StateChange . emit ( rtc Signal ing State As Common ( did Change Signal ing State )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" CONF LI CT ING _ OVERLOAD S ") ĊĠĠĠ Ġoverride Ġfun Ġpeer Connection ( peer Connection : ĠR TCP eer Connection , Ġdid Add Stream : ĠRT CM edia Stream ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġthis Ġdeprecated ĠAPI Ġshould Ġnot Ġlonger Ġbe Ġused ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// developer . mozilla . org / en - US / docs / Web / API / RT CP eer Connection / on add stream ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" CONF LI CT ING _ OVERLOAD S ") ĊĠĠĠ Ġoverride Ġfun Ġpeer Connection ( ĊĠĠĠĠĠĠĠ Ġpeer Connection : ĠR TCP eer Connection , ĊĠĠĠĠĠĠĠ Ġdid Remove Stream : ĠRT CM edia Stream ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġremov est ream Ġevent Ġhas Ġbeen Ġremoved Ġfrom Ġthe ĠWeb RTC Ġspecification Ġin Ġfavor Ġof ĊĠĠĠĠĠĠĠ Ġ// Ġthe Ġexisting Ġremove track Ġevent Ġon Ġthe Ġremote ĠMedia Stream Ġand Ġthe Ġcorresponding ĊĠĠĠĠĠĠĠ Ġ// ĠMedia Stream . on remove track Ġevent Ġhandler Ġproperty Ġof Ġthe Ġremote ĠMedia Stream . ĊĠĠĠĠĠĠĠ Ġ// ĠThe ĠR TCP eer Connection ĠAPI Ġis Ġnow Ġtrack - based , Ġso Ġhaving Ġzero Ġtracks Ġin Ġthe Ġremote ĊĠĠĠĠĠĠĠ Ġ// Ġstream Ġis Ġequivalent Ġto Ġthe Ġremote Ġstream Ġbeing Ġremoved Ġand Ġthe Ġold Ġremov est ream Ġevent . ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// developer . mozilla . org / en - US / docs / Web / API / RT CP eer Connection / on re mov est ream ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" CONF LI CT ING _ OVERLOAD S ") ĊĠĠĠ Ġoverride Ġfun Ġpeer Connection ( ĊĠĠĠĠĠĠĠ Ġpeer Connection : ĠR TCP eer Connection , ĊĠĠĠĠĠĠĠ Ġdid Change Ice Connection State : ĠRT CI ce Connection State ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevents . on Ice Connection StateChange . emit ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr tc Ice Connection State As Common ( did Change Ice Connection State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpeer Connection ( ĊĠĠĠĠĠĠĠ Ġpeer Connection : ĠR TCP eer Connection , ĊĠĠĠĠĠĠĠ Ġdid Change Ice Gather ing State : ĠRT CI ce Gather ing State ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevents . on Ice Gather ing StateChange . emit ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr tc Ice Gather ing State As Common ( did Change Ice Gather ing State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpeer Connection ( ĊĠĠĠĠĠĠĠ Ġpeer Connection : ĠR TCP eer Connection , ĊĠĠĠĠĠĠĠ Ġdid Generate Ice Candidate : ĠRT CI ce Candidate ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevents . on Ice Candidate . emit ( Ice Candidate ( did Generate Ice Candidate )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpeer Connection ( ĊĠĠĠĠĠĠĠ Ġpeer Connection : ĠR TCP eer Connection , ĊĠĠĠĠĠĠĠ Ġdid Remove Ice Candidates : ĠList < *> ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcandidates Ġ= Ġdid Remove Ice Candidates . map Ġ{ ĠI ce Candidate ( it Ġas ĠRT CI ce Candidate ) Ġ} ĊĠĠĠĠĠĠĠ Ġscope . launch Ġ{ Ġevents . on Removed Ice Candidates . emit ( candidates ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpeer Connection ( ĊĠĠĠĠĠĠĠ Ġpeer Connection : ĠR TCP eer Connection , ĊĠĠĠĠĠĠĠ Ġdid Open Data Channel : ĠRTC Data Channel ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevents . on Data Channel . emit ( Data Channel ( did Open Data Channel ). freeze ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" CONF LI CT ING _ OVERLOAD S ") ĊĠĠĠ Ġoverride Ġfun Ġpeer Connection ( ĊĠĠĠĠĠĠĠ Ġpeer Connection : ĠR TCP eer Connection , ĊĠĠĠĠĠĠĠ Ġdid Change Standard ized Ice Connection State : ĠRT CI ce Connection State ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevents . on Standard ized Ice Connection Change . emit ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr tc Ice Connection State As Common ( did Change Standard ized Ice Connection State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpeer Connection ( ĊĠĠĠĠĠĠĠ Ġpeer Connection : ĠR TCP eer Connection , ĊĠĠĠĠĠĠĠ Ġdid Change Connection State : ĠR TCP eer Connection State ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevents . on Connection StateChange . emit ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr tc Peer Connection State As Common ( did Change Connection State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( did Change Connection State Ġ== ĠR TCP eer Connection State . RT CP eer Connection State Closed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscope . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpeer Connection ( ĊĠĠĠĠĠĠĠ Ġpeer Connection : ĠR TCP eer Connection , ĊĠĠĠĠĠĠĠ Ġdid Remove Receiver : ĠRT CR tp Receiver ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscope . launch Ġ{ Ġevents . on Remove Track . emit ( R tp Receiver ( did Remove Receiver )) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpeer Connection ( ĊĠĠĠĠĠĠĠ Ġpeer Connection : ĠR TCP eer Connection , ĊĠĠĠĠĠĠĠ Ġdid Start Re ceiving On Trans ceiver : ĠRT CR tp Trans ceiver ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsender Ġ= Ġdid Start Re ceiving On Trans ceiver . sender ĊĠĠĠĠĠĠĠ Ġval Ġreceiver Ġ= Ġdid Start Re ceiving On Trans ceiver . receiver ĊĠĠĠĠĠĠĠ Ġval Ġtrack Ġ= Ġwhen Ġ( did Start Re ceiving On Trans ceiver . media Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRT CR tp MediaType . RT CR tp MediaType Audio Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAudio Stream Track ( receiver . track Ġas ĠRT CA udio Track ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠRT CR tp MediaType . RT CR tp MediaType Video Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVideo Stream Track ( receiver . track Ġas ĠRTC Video Track ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠRT CR tp MediaType . RT CR tp MediaType Data , ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠRT CR tp MediaType . RT CR tp MediaType Unsupported Ġ-> Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unknown ĠRT CR tp MediaType : Ġ${ did Start Re ceiving On Trans ceiver . media Type }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġstreams Ġ= Ġsender . stream Ids . map Ġ{ Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Stream ( ios Ġ= Ġnull , Ġ"$ id "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrack ?. also Ġ{ Ġsafe Track Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( safe Track Ġis ĠAudio Stream Track ) Ġadd Track ( safe Track ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( safe Track Ġis ĠVideo Stream Track ) Ġadd Track ( safe Track ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtrack Event Ġ= ĠTrack Event ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver Ġ= ĠR tp Receiver ( did Start Re ceiving On Trans ceiver . receiver ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstreams Ġ= Ġstreams , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrack Ġ= Ġtrack , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrans ceiver Ġ= ĠR tp Trans ceiver ( did Start Re ceiving On Trans ceiver ) ĊĠĠĠĠĠĠĠ Ġ). freeze () ĊĠĠĠĠĠĠĠ Ġscope . launch Ġ{ Ġevents . on Track . emit ( track Event ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpeer Connection Should Neg otiate ( peer Connection : ĠR TCP eer Connection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscope . launch Ġ{ Ġevents . on Neg otiation Needed . emit ( Unit ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ