package Ġcom . did ich ux ing . d ora emon kit . kit . mc Ċ Ċ import Ġcom . did ich ux ing . d ora emon kit . Do Kit Ċ import Ġcom . did ich ux ing . d ora emon kit . kit . connect . Connect Address Ċ import Ġcom . did ich ux ing . d ora emon kit . kit . connect . data . Package Type Ċ import Ġcom . did ich ux ing . d ora emon kit . kit . connect . data . Text Package Ċ import Ġcom . did ich ux ing . d ora emon kit . kit . connect . parser . Json Parser Ċ import Ġcom . did ich ux ing . d ora emon kit . kit . connect . ws .* Ċ import Ġcom . did ich ux ing . d ora emon kit . kit . mc . ui . connect . Multi Control Do Kit View Ċ import Ġcom . did ich ux ing . d ora emon kit . kit . test . Test Mode Ċ import Ġcom . did ich ux ing . d ora emon kit . kit . test . mock . Mock Manager Ċ import Ġcom . did ich ux ing . d ora emon kit . kit . test . mock . Proxy Mock Callback Ċ import Ġcom . did ich ux ing . d ora emon kit . kit . test . report . Auto Test Message Ċ import Ġcom . did ich ux ing . d ora emon kit . util . Gson Utils Ċ import Ġcom . did ich ux ing . d ora emon kit . util . Toast Utils Ċ import Ġkotlinx . coroutines . Coroutine Name Ċ import Ġkotlinx . coroutines . Main Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . plus ĊĊ Ċ /** Ċ Ġ* Ġdid i ĠCreate Ġon Ġ 2 0 2 2 / 4 / 2 2 Ġ. Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 2 / 4 / 2 2 Ġby Ġdid ig lobal . com . Ċ Ġ* Ċ Ġ* Ġ@ author Ġ< a Ġhref =" real only one @ 1 2 6 . com "> zhang jun </ a > Ċ Ġ* Ġ@ version Ġ 1 . 0 Ċ Ġ* Ġ@ Date Ġ 2 0 2 2 / 4 / 2 2 Ġ 1 2 : 2 5 Ġä¸ĭåįĪ Ċ Ġ* Ġ@ Description Ġä¸Ģ æľº å¤ļ æİ§ ç®¡çĲĨ Ċ Ġ*/ Ċ Ċ object ĠMulti Control Manager Ġ{ ĊĊĊĠĠĠ Ġprivate Ġval Ġmain Scope Ġ= ĠMain Scope () Ġ+ ĠCor outine Name ( this . toString ()) ĊĊĠĠĠ Ġprivate Ġval Ġweb Socket Client : ĠWebSocket Client Ġ= ĠWebSocket Client () ĊĊĠĠĠ Ġprivate Ġvar Ġconnect Address : ĠConnect Address ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġhost Multi Controller Ġ= ĠHost Multi Controller ( web Socket Client ) ĊĊĠĠĠ Ġprivate Ġval Ġclient Multi Controller Ġ= ĠClient Multi Controller ( web Socket Client ) ĊĊĠĠĠ Ġprivate Ġvar Ġweb Socket Client Create Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġmode : ĠTest Mode Ġ= ĠTest Mode . UNKNOWN ĊĊĠĠĠ Ġprivate Ġval Ġon Mode Change Listeners : ĠMutable Set < On Multi Control Mode ChangeListener > Ġ= Ġmutable Set Of () ĊĊĠĠĠ Ġfun Ġget Mode (): ĠTest Mode Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmode ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Host Mode ( connect Address : ĠConnect Address ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . connect Address Ġ= Ġconnect Address ĊĠĠĠĠĠĠĠ Ġmode Ġ= ĠTest Mode . HOST ĊĠĠĠĠĠĠĠ Ġconnect () ĊĠĠĠĠĠĠĠ Ġclient Multi Controller . close () ĊĠĠĠĠĠĠĠ Ġhost Multi Controller . start () ĊĠĠĠĠĠĠĠ Ġon Notify Multi Control Mode Change ( mode ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Host Mode () Ġ{ ĊĠĠĠĠĠĠĠ Ġmode Ġ= ĠTest Mode . HOST ĊĠĠĠĠĠĠĠ Ġclient Multi Controller . close () ĊĠĠĠĠĠĠĠ Ġhost Multi Controller . start () ĊĠĠĠĠĠĠĠ Ġsend Change Host Mode () ĊĠĠĠĠĠĠĠ Ġon Notify Multi Control Mode Change ( mode ) ĊĠĠĠĠĠĠĠ ĠToast Utils . show Short (" ä¸»æľº æ¨¡å¼ı ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Client Mode ( connect Address : ĠConnect Address ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . connect Address Ġ= Ġconnect Address ĊĠĠĠĠĠĠĠ Ġmode Ġ= ĠTest Mode . CLIENT ĊĠĠĠĠĠĠĠ Ġconnect () ĊĠĠĠĠĠĠĠ Ġhost Multi Controller . close () ĊĠĠĠĠĠĠĠ Ġclient Multi Controller . start () ĊĠĠĠĠĠĠĠ Ġon Notify Multi Control Mode Change ( mode ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Client Mode () Ġ{ ĊĠĠĠĠĠĠĠ Ġmode Ġ= ĠTest Mode . CLIENT ĊĠĠĠĠĠĠĠ Ġhost Multi Controller . close () ĊĠĠĠĠĠĠĠ Ġclient Multi Controller . start () ĊĠĠĠĠĠĠĠ Ġon Notify Multi Control Mode Change ( mode ) ĊĠĠĠĠĠĠĠ ĠToast Utils . show Short (" ä»İ æľº æ¨¡å¼ı ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġchange Mode ( test Mode : ĠTest Mode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( test Mode Ġ== ĠTest Mode . HOST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Host Mode () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( test Mode Ġ== ĠTest Mode . CLIENT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Client Mode () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠMulti Control Do Kit View . update Connect Mode () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġchange Mode () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( mode Ġ== ĠTest Mode . HOST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Client Mode () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( mode Ġ== ĠTest Mode . CLIENT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Host Mode () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠMulti Control Do Kit View . update Connect Mode () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclose Work Mode () Ġ{ ĊĠĠĠĠĠĠĠ Ġmode Ġ= ĠTest Mode . UNKNOWN ĊĠĠĠĠĠĠĠ Ġclient Multi Controller . close () ĊĠĠĠĠĠĠĠ Ġhost Multi Controller . close () ĊĠĠĠĠĠĠĠ Ġstop Connect () ĊĊĠĠĠĠĠĠĠ Ġon Notify Multi Control Mode Change ( mode ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend Change Host Mode () Ġ{ ĊĠĠĠĠĠĠĠ Ġweb Socket Client . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . send ( Json Parser . toJson ( Package Type . BRO ADCAST , Ġ"", Ġ" mc _ host ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Receive Host Mode Change () Ġ{ ĊĠĠĠĠĠĠĠ Ġmain Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mode Ġ== ĠTest Mode . HOST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange Mode ( Test Mode . CLIENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd On Multi Control Mode ChangeListener ( listener : ĠOn Multi Control Mode ChangeListener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Mode Change Listeners . add ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove On Multi Control Mode ChangeListener ( listener : ĠOn Multi Control Mode ChangeListener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Mode Change Listeners . remove ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Notify Multi Control Mode Change ( mode : ĠTest Mode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Mode Change Listeners . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Multi Control Mode Changed ( mode ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Receive Control ( text Package : ĠText Package ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġtext Package . data ĊĠĠĠĠĠĠĠ Ġval Ġauto Test Message Ġ= ĠGson Utils . fromJson < Auto Test Message >( text , ĠAuto Test Message :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( auto Test Message . command ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" start Record " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= ĠAuto Test Message ( command Ġ= Ġ" control _ response ", Ġmessage Ġ= Ġ" success ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Response Auto Test Message ( msg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æİ§åĪ¶ æ¶Īæģ¯ åĵįåºĶ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġon Response Auto Test Message ( auto Test Message : ĠAuto Test Message ) Ġ{ ĊĠĠĠĠĠĠĠ Ġweb Socket Client ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . send ( Json Parser . toJson ( Package Type . AUT OT EST , Ġauto Test Message , Ġ" auto _ test _ control ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æİ¥æĶ¶ åĪ° èĩªåĬ¨ åĮĸ æµĭè¯ķ äºĭä»¶ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġon Receive Action ( text Package : ĠText Package ) Ġ{ ĊĠĠĠĠĠĠĠ Ġclient Multi Controller . on Receive Action ( text Package ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġstop Connect () Ġ{ ĊĠĠĠĠĠĠĠ Ġweb Socket Client . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconnect () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( connect Address Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! web Socket Client Create ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweb Socket Client Create Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweb Socket Client . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . add On WebSocket Login Success Listener ( object Ġ: ĠOn WebSocket Login Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon WebSocket Login Success () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDo Kit . launch Floating ( Multi Control Do Kit View :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . add On WebSocket Text Package Listener ( object Ġ: ĠOn WebSocket Text Package Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive Text Package ( web Socket : ĠOk Http WebSocket Session , Ġtext Package : ĠText Package ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( text Package . type Ġ== ĠPackage Type . AUT OT EST Ġ|| Ġtext Package . type Ġ== ĠPackage Type . BRO ADCAST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( text Package . contentType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" mc _ host " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Receive Host Mode Change () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" auto _ test _ control " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Receive Control ( text Package ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" action " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Receive Action ( text Package ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( text Package . type Ġ== ĠPackage Type . DATA ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMock Manager . receive Query Response ( text Package ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . add On WebSocket Close Listener ( object Ġ: ĠOn WebSocket Close Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon WebSocket Close () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDo Kit . remove Floating ( Multi Control Do Kit View :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . add On WebSocket Status ChangeListener ( object Ġ: ĠOn WebSocket Status ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Closed ( web Socket : ĠOk Http WebSocket Session , Ġcode : ĠInt , Ġreason : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Open ( web Socket : ĠOk Http WebSocket Session , Ġresponse : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( web Socket : ĠOk Http WebSocket Session , Ġt : ĠThrowable , Ġresponse : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast Utils . show Short (" éĵ¾æİ¥ å¤±è´¥ :" Ġ+ Ġt . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Closing ( web Socket : ĠOk Http WebSocket Session , Ġcode : ĠInt , Ġreason : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMock Manager . proxy Mock Callback Ġ= Ġobject Ġ: ĠProxy Mock Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsend ( data : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweb Socket Client . send ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . start Auto Connect () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . connect ( connect Address !!. url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweb Socket Client . start Auto Connect () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweb Socket Client . re Connect ( connect Address !!. url ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ } Ċ