package Ġmicro server . bio ĊĊ Ċ import Ġmicro server . bio . listener . Connection Listener Ċ import Ġmicro server . bio . listener . Server Listener Ċ import Ġjava . io . IOException Ċ import Ġjava . net . Server Socket Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġgu o zh ong Ġon Ġ 1 7 / 2 / 1 4 . Ċ Ġ*/ Ċ public Ġfinal Ġclass ĠMicro Server ( var Ġm Config : ĠServer Config ? Ġ= ĠServer Config ()) Ġ{ Ċ // ĠĠĠ Ġprivate Ġval ĠDEFAULT _ CONFIG : ĠServer Config Ġ= ĠServer Config () ĊĊĠĠĠ Ġvar Ġm Server : ĠServer Socket ? Ġ= Ġnull Ċ Ċ // ĠĠĠ Ġvar Ġm Config : ĠServer Config ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġm State : ĠServer State ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġm Server Listener : ĠServer Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġm Connection Listener : ĠConnection Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġinternal Ġfun Ġon Server Create (): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġm Server Listener ?. onCreate ( m Config , Ġm State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Server Start () Ġ= Ġm Server Listener ?. onStart ( m Config , Ġm State ) ĊĊĠĠĠ Ġfun Ġon Server Close () Ġ= Ġm Server Listener ?. onClose ( m Config , Ġm State ) ĊĊĠĠĠ Ġfun Ġon Server Accept ( connection : ĠMicro Connection ) Ġ= Ġm Server Listener ?. on Accept ( connection ) ĊĊĠĠĠ Ġfun Ġremove Connection Listener () Ġ= Ġm Connection Listener . to ( null ) ĊĊĠĠĠ Ġfun Ġon Connection Accept ( connection : ĠMicro Connection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm State ?. add Connection ( connection ) ĊĠĠĠĠĠĠĠ Ġm Connection Listener ?. on Accept ( connection ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Connection Close ( connection : ĠMicro Connection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm State ?. cut Connection ( connection ) ĊĠĠĠĠĠĠĠ Ġm Connection Listener ?. onClose ( connection ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Connection Send ( connection : ĠMicro Connection , Ġbuffer : ĠByteArray ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Connection Listener ?. on Send ( connection , Ġbuffer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Connection Receive ( connection : ĠMicro Connection , Ġbuffer : ĠByteArray , Ġlength : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Connection Listener ?. on Receive ( connection , Ġbuffer , Ġlength ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfinal Ġval ĠwaitFor Connect T read : ĠThread Ġ= ĠThread () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( m State Ġ!= Ġnull Ġ&& Ġm State !!. isRunning Ġ&& Ġm Server Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è¿ŀæİ¥ æķ° ä¸įèĥ½ å¤§äºİ è®¾ å®ļçļĦ æľĢå¤§ åĢ¼ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( m State ?. connection Total Ġas ĠInt ) Ġ< Ġ( m Config ?. connection Maximum Ġas ĠInt )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çŃīå¾ħ è¿ŀæİ¥ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserver Accept () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinit Server (): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠS Log . error (" Server Ġinitialize Ġstarting ...") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠåĪĿå§ĭåĮĸ Server Socket æľįåĬ¡ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Server Ġ= ĠServer Socket ( m Config ?. port Ġas ĠInt ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠåĪĿå§ĭåĮĸ æľįåĬ¡åĻ¨ ä¿¡æģ¯ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm State Ġ= ĠServer State ( this ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® æľįåĬ¡åĻ¨ çĬ¶æĢģ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm State ?. isRunning Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠS Log . error (" Server Ġinitialize Ġsuccess ...") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æľįåĬ¡åĻ¨ åĽŀè°ĥ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Server Create () ĊĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠonError ( e ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠS Log . error (" Server Ġinitialize Ġfailed ...") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Server () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠwaitFor Connect At Thread () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æľįåĬ¡åĻ¨ åĲ¯åĬ¨ åĽŀè°ĥ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Server Start () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠwaitFor Connect At Thread () Ġ{ ĊĠĠĠĠĠĠĠ ĠwaitFor Connect T read . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġserver Accept () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS Log . error (" Waiting Ġfor Ġclient Ġconnect ...") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsocket Ġ= Ġm Server ?. accept () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( socket Ġ!= Ġnull Ġ&& Ġsocket . isConnected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġsocket . inet Address . host Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġip Ġ= Ġsocket . inet Address . host Address ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġport Ġ= Ġsocket . port ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMicro Connection ( this , Ġsocket ). run () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS Log . error (" new Ġclient [$ name ($ ip :$ port )] Ġconnect Ġsuccess ...") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS Log . error (" new Ġclient Ġerror ...") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonError ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS Log . error (" Wait Ġfor Ġconnect Ġstopped Ġthat ĠServer Ġhas Ġbeen Ġclosed ...") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclose Server () Ġ{ ĊĊĠĠĠĠĠĠĠ ĠS Log . error (" Server Ġis Ġclosing ...") ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Server Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Server ?. close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonError ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm State ?. isRunning Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġm State ?. close All Connection () ĊĊĠĠĠĠĠĠĠ Ġm Server Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġm State Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġm Config Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ ĠS Log . error (" Server Ġhas Ġclosed ...") ĊĊĠĠĠĠĠĠĠ Ġ// Ġ æľįåĬ¡åĻ¨ åħ³éĹŃ åĽŀè°ĥ ĊĠĠĠĠĠĠĠ Ġon Server Close () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠonError ( e : ĠIOException ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¢ŀåĬł ä¸Ģä¸ª å®¢æĪ·ç«¯ è¿ŀæİ¥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġadd Connection ( connection : ĠMicro Connection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m State Ġ!= Ġnull ) Ġm State ?. add Connection ( connection ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åħ³éĹŃ ä¸Ģä¸ª å®¢æĪ·ç«¯ è¿ŀæİ¥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġremove Connection ( connection : ĠMicro Connection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m State Ġ!= Ġnull ) Ġm State ?. cut Connection ( connection ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ ä¸Ģä¸ª å®¢æĪ·ç«¯ è¿ŀæİ¥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Connection ( name : ĠString ): ĠMicro Connection ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( m State Ġ== Ġnull ) Ġnull Ġelse Ġm State ?. getConnection ( name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ åħ¨éĥ¨ å®¢æĪ·ç«¯ è¿ŀæİ¥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetAll Connection (): ĠMap < String , ĠMicro Connection >? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( m State Ġ== Ġnull ) Ġnull Ġelse Ġm State ?. all Connection ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ çĶ¨æĪ· åĪĹè¡¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetAll Connection Name (): ĠList < String >? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( m State Ġ== Ġnull ) Ġnull Ġelse Ġm State ?. all Connection Name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ æľįåĬ¡åĻ¨ çĬ¶æĢģ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetState (): ĠServer State ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( m State Ġ== Ġnull ) Ġnull Ġelse Ġm State ĊĠĠĠ Ġ} Ċ Ċ } ĊĊĊ