package Ġfeature a . mod bus . master Ċ Ċ import Ġfeature a . mod bus . config . Channel Ċ import Ġfeature a . mod bus . transaction . Channel Group Ċ import Ġfeature a . mod bus . transaction . Transaction Ċ import Ġfeature a . now String Ċ Ċ class ĠLogger Ġ{ ĊĊĠĠĠ Ġfun Ġinterface ĠSource Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġlog ( string : ĠString ?) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġis Enable : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġval Ġsources Ġ= Ġmutable ListOf < Source >() ĊĊĠĠĠ Ġfun Ġlog Thread Start ( ip : ĠString , Ġport : ĠInt ) Ġ= Ġlog (" Start Ġthread Ġ$ ip :$ port ") ĊĠĠĠ Ġfun Ġlog Thread Stop ( ip : ĠString , Ġport : ĠInt ) Ġ= Ġlog (" Stop Ġthread Ġ$ ip :$ port ") ĊĠĠĠ Ġfun Ġlog Connect ( ip : ĠString , Ġport : ĠInt ) Ġ= Ġlog (" Connect Ġ$ ip :$ port ") ĊĠĠĠ Ġfun Ġlog Connection Failed ( ip : ĠString , Ġport : ĠInt , Ġe : ĠThrowable ) Ġ= ĊĠĠĠĠĠĠĠ Ġlog (" Error . ĠConnection Ġfailed Ġ$ ip :$ port ", Ġe ) ĊĊĠĠĠ Ġfun Ġlog Disconnect ( ip : ĠString , Ġport : ĠInt ) Ġ= Ġlog (" Disconnect Ġ$ ip :$ port ") ĊĊĠĠĠ Ġfun Ġon Re connect Success Socket Connection ( ip : ĠString , Ġport : ĠInt , Ġresponse Timeout : ĠInt , Ġe : ĠThrowable ) Ġ= ĊĠĠĠĠĠĠĠ Ġlog (" Error . ĠRe connect Ġ$ ip :$ port , Ġresponse Timeout : Ġ$ response Timeout ", Ġe ) ĊĊĠĠĠ Ġfun Ġon Re connect Failed Socket Connection ( ip : ĠString , Ġport : ĠInt , Ġresponse Timeout : ĠInt , Ġe : ĠThrowable ) Ġ= ĊĠĠĠĠĠĠĠ Ġlog (" Error . ĠRe connect Ġfailed Ġ$ ip :$ port , Ġresponse Timeout : Ġ$ response Timeout ", Ġe ) ĊĊĠĠĠ Ġfun Ġlog Write Suc ceed ( transaction : ĠTransaction ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= Ġtransaction . channel ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġchannel !!. readValue With Read Formula ĊĠĠĠĠĠĠĠ Ġlog (""" [ ${ now String ()} ] ĠWrite Ġ${ channel . debug String ( transaction . id )} : Ġ$ value Ġ(${ channel . update Interval } ms ) """) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlog Write Formula Evaluation Error ( formula : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġerror ("[ ${ now String ()} ] ĠError . ĠWrite Ġformula Ġevaluation Ġ$ formula ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlog Read Success ( transaction : ĠTransaction ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchannel Group Ġ= Ġtransaction . channel Group !! ĊĠĠĠĠĠĠĠ Ġlog (" Read Ġsucceed Ġchannels Ġ" Ġ+ Ġchannel Group . debug String ( transaction . id )) ĊĠĠĠĠĠĠĠ Ġval Ġchannels : ĠCollection < Channel > Ġ= Ġchannel Group . channels ĊĠĠĠĠĠĠĠ Ġfor Ġ( channel Ġin Ġchannels ) Ġlog (" Read Ġ${ channel . name }: Ġ${ channel . readValue With Read Formula } Ġ(${ channel . update Interval } ms )") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlog Read Failed ( transaction : ĠTransaction , Ġexception Code : ĠByte , Ġexception Message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchannel Group Ġ= Ġtransaction . channel Group !! ĊĠĠĠĠĠĠĠ Ġlog (" Error . ĠRead Ġfailed Ġ${ channel Group . debug String ( transaction . id )}, Ġexception Code : Ġ$ exception Code , Ġ Ġexception Message : Ġ$ exception Message ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlog Read Formula Evaluation Error ( formula : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġerror ("[ ${ now String ()} ] ĠError . ĠRead Ġformula Ġevaluation Ġ$ formula ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlog Device Not Valid Error ( ip : ĠString , Ġport : ĠInt ) Ġ= Ġlog (" Error . ĠDevice Ġnot Ġvalid Ġ$ ip :$ port ") ĊĊĠĠĠ Ġfun Ġlog ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ Ġif Ġ( target Os Ġ== ĠTarget Os . DE SK TOP Ġ&& Ġmessage . contains (" Error .")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeature a . log ( message ) Ġ// Ġquick fix Ġtodo Ġimprove ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Enable ) Ġreturn ĊĠĠĠĠĠĠĠ Ġfor Ġ( source Ġin Ġsources ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource . log ( message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* internals */ ĊĊĠĠĠ Ġprivate Ġfun Ġlog ( message : ĠString , Ġe : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog ( message ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ fun ĠChannel . debug String ( transaction Id : ĠShort ): ĠString Ġ{ ĊĠĠĠ Ġval Ġip Ġ= Ġconnection . ip Ġ?: Ġ" undefined " ĊĠĠĠ Ġval Ġport Ġ= Ġconnection . port ĊĠĠĠ Ġreturn Ġ"$ ip :$ port /$ transaction Id /$ region /$ address " Ċ } Ċ Ċ fun ĠChannel Group . debug String ( transaction Id : ĠShort ): ĠString Ġ{ ĊĠĠĠ Ġval Ġip : ĠString Ġ= Ġconnection . ip Ġ?: Ġ" undefined " ĊĠĠĠ Ġval Ġport : ĠInt Ġ= Ġconnection . port ĊĠĠĠ Ġreturn Ġ"$ ip :$ port /$ transaction Id /$ region /$ start Address .. $ finish Address " Ċ } Ċ