package Ġcom . github . sh an park . con et Ċ Ċ import Ġjava . net . SocketAddress Ċ Ċ type alias ĠOn Connected < T > Ġ= Ġsuspend Ġ( conn : ĠT ) Ġ-> ĠUnit Ċ type alias ĠOn Read < T > Ġ= Ġsuspend Ġ( conn : ĠT , Ġin Obj : ĠAny ) Ġ-> ĠUnit Ċ type alias ĠOn Read From < T > Ġ= Ġsuspend Ġ( conn : ĠT , Ġin Obj : ĠAny , Ġpeer Address : ĠSocket Address ) Ġ-> ĠUnit Ċ type alias ĠOn Closed < T > Ġ= Ġsuspend Ġ( conn : ĠT ) Ġ-> ĠUnit Ċ type alias ĠOn Error < T > Ġ= Ġsuspend Ġ( conn : ĠT , Ġe : ĠThrowable ) Ġ-> ĠUnit Ċ type alias ĠOn Idle < T > Ġ= Ġsuspend Ġ( conn : ĠT ) Ġ-> ĠUnit Ċ type alias ĠOn User < T > Ġ= Ġsuspend Ġ( conn : ĠT , Ġparam : ĠAny ?) Ġ-> ĠUnit Ċ Ċ /** Ċ Ġ* Ġê°ģ Ġconnection ìĹĲìĦľ Ġë°ľ ìĥĿ íķĺëĬĶ ĠìĿ´ë ² ¤íĬ¸ ë¥¼ Ġì²ĺë¦¬ íķĺëĬĶ Ġíģ´ëŀĺìĬ¤ . Ċ Ġ* Ġëª¨ëĵł Ġconnection ìĿĢ ĠìŀĲ ìĭł ë§Į ìĿĺ Ġhandler Ġê°Ŀì²´ ë¥¼ Ġê°Ģì§Ģ ê³ł ĠìŀĪ ìľ¼ ë©° Ġconnection ìĿĺ Ġìĥģíĥľ ĠìłĢìŀ¥ ìĿĦ Ġë¹Ħ ë¡ ¯ íķĺìĹ¬ Ċ Ġ* Ġconnection ìĿĦ ĠíĨµ íķ´ìĦľ Ġëĵ¤ ìĸ´ ìĺ¤ ê³ł ĠëĤĺ ê°Ģ ëĬĶ Ġëį°ìĿ´íĦ°ë¥¼ Ġì²ĺë¦¬ íķ´ìķ¼ íķĺëĬĶ Ġìłĳ ìłĲ ìĿ´ ë¯ Ģë¡ľ ĠëĮĢ ë¶Ģ ë¶Ħ Ġêµ¬íĺĦ Ġë¡ľ ì§ģ ìĿĺ Ġìĭľìŀĳ ìłĲ ìĿ´ëĭ¤ . Ċ Ġ* Ċ Ġ* ĠìĿ´ Ġíģ´ëŀĺìĬ¤ ë¥¼ Ġìĥģ ìĨį ë° Ľ ìķĦ ìĦľ ĠCo Handlers Ġê°Ŀì²´ ë¥¼ Ġêµ¬íĺĦ íķł ĠìĪĺ ĠëıĦ ĠìŀĪ ê³ł Ġì§ ģ ìłĳ ĠCo Handlers Ġê°Ŀì²´ ë¥¼ ĠìĥĿìĦ± íķĺìĹ¬ Ċ Ġ* Ġon X xx Handler ĠìĨį ìĦ± ìĹĲ Ġíķ¨ìĪĺ Ġê°Ŀì²´ ë¥¼ Ġì§Ģìłķ íķĺìĹ¬ Ġcustom izing íķĺëĬĶ Ġê²ĥ ëıĦ Ġê°ĢëĬ¥ íķĺëĭ¤ . Ċ Ġ*/ Ċ open Ġclass ĠCo Handlers < CONN > Ġ{ ĊĠĠĠ Ġvar Ġidle Timeout : ĠLong Ġ= ĠLong . MAX _ VALUE ĊĊĠĠĠ Ġvar Ġon Connected Handler : ĠOn Connected < CONN > Ġ= Ġ:: on Connected ĊĠĠĠ Ġvar Ġon Read Handler : ĠOn Read < CONN > Ġ= Ġ:: on Read ĊĠĠĠ Ġvar Ġon Read From Handler : ĠOn Read From < CONN > Ġ= Ġ:: on Read From ĊĠĠĠ Ġvar Ġon Closed Handler : ĠOn Closed < CONN > Ġ= Ġ:: on Closed ĊĠĠĠ Ġvar ĠonError Handler : ĠOn Error < CONN > Ġ= Ġ:: onError ĊĠĠĠ Ġvar Ġon User Handler : ĠOn User < CONN > Ġ= Ġ:: on User ĊĠĠĠ Ġvar Ġon Idle Handler : ĠOn Idle < CONN > Ġ= Ġ:: on Idle ĊĊĠĠĠ Ġvar Ġcodec Chain : ĠMutable List < Co Codec < CONN >> Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġìłĳ ìĨį ìĿ´ ĠìĿ´ë £ ¨ ìĸ´ ì§Ģ ë©´ Ġê°Ģ ìŀ¥ Ġë ¨ ¼ ìłĢ Ġíĺ¸ì¶ľ ëĲĺëĬĶ Ġhandler Ġíķ¨ìĪĺ . ĊĠĠĠĠ Ġ* ĠUDP ìĿĺ Ġê²½ìļ° ìĹĲëĬĶ Ġconnect () ë¥¼ Ġíĺ¸ì¶ľ íķľ Ġê²½ìļ° ìĹĲ ë§Į ĠìĿ´ Ġíķ ¸ ëĵ¤ ëŁ¬ ê°Ģ Ġíĺ¸ì¶ľ ëĲľ ëĭ¤ . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġconn ĠCo Tcp , ĠCo Udp Ġëĵ± ìĿĺ ĠíĺĦ ìŀ¬ ĠìĹ° ê²° Ġê°Ŀì²´ . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġsuspend Ġfun Ġon Connected ( conn : ĠCON N ) Ġ{} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠìĿ ½ ìĿĦ ĠìĪĺ ĠìŀĪëĬĶ Ġdata ê°Ģ ĠëıĦ ì° © íĸĪ ìĿĦ ĠëķĮ Ġíĺ¸ì¶ľ ëĲĺëĬĶ Ġhandler Ġíķ¨ìĪĺ . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġcodec Chain ìĿ´ Ġêµ¬ìĦ± ëĲĺ ì§Ģ ĠìķĬ ìĿĢ Ġê²½ìļ° Ġin Obj ĠíĮĮ ëĿ¼ ë¯¸ íĦ° ëĬĶ ĠTCP ĠìĹ° ê²° ìĿ¼ ĠëķĮ ëĬĶ ĠRead Buffer Ġê°Ŀì²´ ê°Ģ ĠìłĦ ëĭ ¬ ëĲĺ ê³ł ĊĠĠĠĠ Ġ* ĠUDP ĠìĹ° ê²° ìĿ¼ ĠëķĮ ëĬĶ ĠData gram Packet ìĿ´ ĠìłĦ ëĭ ¬ ëĲľ ëĭ¤ . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠUDP ĠìĹ° ê²° ìĹĲìĦľëĬĶ Ġconnect ê°Ģ ĠìĿ´ë £ ¨ ìĸ´ ì§Ħ Ġìĥģíĥľ ìĹĲìĦľ ë§Į ĠìĿ´ Ġíķ¨ìĪĺ ê°Ģ Ġíĺ¸ì¶ľ ëĲľ ëĭ¤ . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġcodec Chain ìĿ´ Ġ Ġêµ¬ìĦ± ëĲĺìĸ´ ĠìŀĪëĭ¤ ë©´ Ġë§Ī ì§Ģ ë§ ī Ġcodec ìĿ´ Ġë°ĺíĻĺ íķľ Ġëį°ìĿ´íĦ° ê°Ģ Ġin Obj ë¡ľ ĠìłĦ ëĭ ¬ ëĲľ ëĭ¤ . ĊĠĠĠĠ Ġ* ĠTCP ĠìĹ° ê²° ìĿ¼ ĠëķĮ ĠëıĦ ì° © íķľ Ġëį°ìĿ´íĦ°ë¥¼ ĠìĿ ½ ìĸ´ ìĦľ ĠìĤ¬ìļ© íķĺì§Ģ ĠìķĬ ìľ¼ ë©´ Ġbuffer ìĿĺ ĠëĤ´ìļ© ìĿĢ Ġê³Ħ ìĨį Ġë Ī Ħ ìłģ ëĲĺ ë¯ Ģë¡ľ Ġìłģ ìł Ī íŀĪ ĠìĿ ½ ìĸ´ ìĦľ ĠìĤ¬ìļ© íķ´ìķ¼ Ġíķľëĭ¤ . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġconn ĠCo Tcp , ĠCo Udp Ġëĵ± ìĿĺ ĠíĺĦ ìŀ¬ ĠìĹ° ê²° Ġê°Ŀì²´ . ĊĠĠĠĠ Ġ* Ġ@ param Ġin Obj Ġcodec Chain ìĿ´ Ġêµ¬ìĦ± ëĲľ Ġê²½ìļ° ìĹĲëĬĶ Ġcodec Chain ìĿĦ Ġê± ° ì ³ Ĳ ìĦľ ĠìĥĿìĦ± ëĲľ Ġê°Ŀì²´ . Ġcodec Chain ìĿ´ Ġêµ¬ìĦ± ëĲĺ ì§Ģ ĠìķĬ ìĿĢ Ġê²½ìļ° ĠëıĦ ì° © íķľ Ġëį°ìĿ´íĦ°ë¥¼ ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġëĭ ´ ê³ł ĠìŀĪëĬĶ ĠRead Buffer ĠëĺĲëĬĶ ĠData gram Packet Ġê°Ŀì²´ . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġsuspend Ġfun Ġon Read ( conn : ĠCON N , Ġin Obj : ĠAny ) Ġ{} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠìĿ ½ ìĿĦ ĠìĪĺ ĠìŀĪëĬĶ Ġdata ê°Ģ ĠëıĦ ì° © íĸĪ ìĿĦ ĠëķĮ Ġíĺ¸ì¶ľ ëĲĺëĬĶ Ġhandler Ġíķ¨ìĪĺ . ĊĠĠĠĠ Ġ* ĠUDP ĠìłĦ ìļ© Ġhandler Ġíķ¨ìĪĺ ìĿ´ ë©° Ġconnect Ġìĥģíĥľ ê°Ģ ĠìķĦ ëĭ Ĳ ĠëķĮ Ġëį°ìĿ´íĦ° ê°Ģ ĠëıĦ ì° © íķĺë©´ Ġíĺ¸ì¶ľ ëĲľ ëĭ¤ . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġcodec Chain ìĿ´ Ġêµ¬ìĦ± ëĲĺ ì§Ģ ĠìķĬ ìĿĢ Ġê²½ìļ° ìĹĲëĬĶ Ġin Obj ĠíĮĮ ëĿ¼ ë¯¸ íĦ° ëĬĶ ĠData gram Packet Ġê°Ŀì²´ ê°Ģ ĠìłĦ ëĭ ¬ ëĲľ ëĭ¤ . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġcodec Chain ìĿ´ Ġêµ¬ìĦ± ëĲľ Ġê²½ìļ° Ġcodec Chain ìĿĦ Ġê± ° ìł¸ ìĦľ Ġìµľ ì¢ ħ ìłģìľ¼ë¡ľ ĠìĥĿìĦ± ëĲľ Ġê°Ŀì²´ ê°Ģ ĠìłĦ ëĭ ¬ ëĲľ ëĭ¤ . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġconn ĠCo Tcp , ĠCo Udp Ġëĵ± ìĿĺ ĠíĺĦ ìŀ¬ ĠìĹ° ê²° Ġê°Ŀì²´ . ĊĠĠĠĠ Ġ* Ġ@ param Ġin Obj Ġcodec Chain ìĿ´ Ġêµ¬ìĦ± ëĲľ Ġê²½ìļ° ìĹĲëĬĶ Ġcodec Chain ìĿĦ Ġê± ° ì ³ Ĳ ìĦľ ĠìĥĿìĦ± ëĲľ Ġê°Ŀì²´ . Ġcodec Chain ìĿ´ Ġêµ¬ìĦ± ëĲĺ ì§Ģ ĠìķĬ ìĿĢ Ġê²½ìļ° ĠëıĦ ì° © íķľ Ġëį°ìĿ´íĦ°ë¥¼ ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġëĭ ´ ê³ł ĠìŀĪëĬĶ ĠData gram Packet Ġê°Ŀì²´ . ĊĠĠĠĠ Ġ* Ġ@ param Ġpeer Address Ġëį°ìĿ´íĦ°ë¥¼ Ġë³ ´ë Ĥ ¸ Ġpeer ìĿĺ Ġì£¼ ìĨĮ . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġsuspend Ġfun Ġon Read From ( conn : ĠCON N , Ġin Obj : ĠAny , Ġpeer Address : ĠSocket Address ) Ġ{} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġìłĳ ìĨį ìĿ´ Ġì¢ ħ ë£Į ëĲĺ ë©´ Ġë§Ī ì§Ģ ë§ ī ìľ¼ë¡ľ Ġíĺ¸ì¶ľ ëĲĺëĬĶ Ġhandler Ġíķ¨ìĪĺ . ĊĠĠĠĠ Ġ* ĠìĿ´ë¯¸ Ġìłĳ ìĨį ìĿ´ Ġì¢ ħ ë£Į ê°Ģ ĠëĲľ ĠíĽĦ ìĹĲ Ġë§Ī ì§Ģ ë§ ī ìľ¼ë¡ľ Ġíĺ¸ì¶ľ ëĲľ ëĭ¤ . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġconn ĠCo Tcp , ĠCo Udp Ġëĵ± ìĿĺ ĠíĺĦ ìŀ¬ ĠìĹ° ê²° Ġê°Ŀì²´ . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġsuspend Ġfun Ġon Closed ( conn : ĠCON N ) Ġ{} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġconnection ìĿĺ Ġhandler ìĹĲìĦľ ĠìĹĲ ëŁ¬ ê°Ģ Ġë°ľ ìĥĿ íķĺë©´ Ġíĺ¸ì¶ľ ëĲľ ëĭ¤ . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġconn ĠCo Tcp , ĠCo Udp Ġëĵ± ìĿĺ ĠíĺĦ ìŀ¬ ĠìĹ° ê²° Ġê°Ŀì²´ . ĊĠĠĠĠ Ġ* Ġ@ param Ġcause ĠìĹĲ ëŁ¬ ë¥¼ Ġë°ľ ìĥĿ ìĭľ í Ĥ¨ Ġexception Ġê°Ŀì²´ . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġsuspend Ġfun ĠonError ( conn : ĠCON N , Ġcause : ĠThrowable ) Ġ{} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠìĤ¬ìļ©ìŀĲ ĠìłķìĿĺ ĠìĿ´ë ² ¤íĬ¸ ê°Ģ ĠìłĦ ìĨ ¡ ëĲĺ ë©´ Ġíĺ¸ì¶ľ ëĲĺëĬĶ Ġhandler Ġíķ¨ìĪĺ . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġconn ĠCo Tcp , ĠCo Udp Ġëĵ± ìĿĺ ĠíĺĦ ìŀ¬ ĠìĹ° ê²° Ġê°Ŀì²´ . ĊĠĠĠĠ Ġ* Ġ@ param Ġparam ĠìĤ¬ìļ©ìŀĲ ĠìĿ´ë ² ¤íĬ¸ ë¡ľ Ġë³ ´ë Ĥ´ ì§Ħ Ġparameter Ġê°Ŀì²´ . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġsuspend Ġfun Ġon User ( conn : ĠCON N , Ġparam : ĠAny ?) Ġ{} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġidle Timeout ĠìĨį ìĦ± ìĹĲ Ġì§Ģìłķ ëĲľ Ġìĭľê°Ħ ( ms ) ĠëıĻ ìķĪ Ġìĸ´ëĸ ¤ Ġhandler ëıĦ Ġíĺ¸ì¶ľ ëĲĺ ì§Ģ ĠìķĬ ìľ¼ ë©´ Ġíĺ¸ì¶ľ ëĲĺëĬĶ Ġhandler Ġíķ¨ìĪĺ . ĊĠĠĠĠ Ġ* Ġread , Ġwrite , Ġerror Ġëĵ± ìĿĺ ĠìĿ´ë ² ¤íĬ¸ ĠìĹĨ ìĿ´ Ġidle Timeout Ġìĭľê°Ħ ìĿ´ Ġì§Ģ ëĤĺ ë©´ Ġíĺ¸ì¶ľ ëĲľ ëĭ¤ . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġconn ĠCo Tcp , ĠCo Udp Ġëĵ± ìĿĺ ĠíĺĦ ìŀ¬ ĠìĹ° ê²° Ġê°Ŀì²´ . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġsuspend Ġfun Ġon Idle ( conn : ĠCON N ) Ġ{} Ċ } Ċ Ċ type alias ĠCo Tcp Handlers Ġ= ĠCo Handlers < Co Tcp > Ċ type alias ĠCo Udp Handlers Ġ= ĠCo Handlers < Co Udp > Ċ