package Ġorg . sk ellig . test step . processor . tcp Ċ Ċ import Ġorg . sk ellig . task . async . AsyncTask Utils . Companion . run Tasks Async And Wait Ċ import Ġorg . sk ellig . test step . processing . converter . Test Step Result Converter Ċ import Ġorg . sk ellig . test step . processing . processor . Base Test Step Processor Ċ import Ġorg . sk ellig . test step . processing . processor . Test Step Processor Ċ import Ġorg . sk ellig . test step . processing . state . Test Scenario State Ċ import Ġorg . sk ellig . test step . processing . validation . Test Step Result Validator Ċ import Ġorg . sk ellig . test step . processor . tcp . model . Tcp Test Step Ċ Ċ open Ġclass ĠTcp Test Step Processor ( private Ġval Ġtcp Channels : ĠMap < String , ĠTcp Channel >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Scenario State : ĠTest Scenario State ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalidator : ĠTest Step Result Validator ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Step Result Converter : ĠTest Step Result Converter ?) ĊĠĠĠ Ġ: ĠBaseTest Step Processor < Tcp Test Step >( test Scenario State !! , Ġvalidator !! , Ġtest Step Result Converter ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġprocess Test Step ( test Step : ĠTcp Test Step ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresponse : ĠAny ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġsend To Ġ= Ġtest Step . send To ĊĠĠĠĠĠĠĠ Ġval Ġread From Ġ= Ġtest Step . read From ĊĠĠĠĠĠĠĠ Ġval Ġrespond To Ġ= Ġtest Step . respond To ĊĊĠĠĠĠĠĠĠ Ġsend To ?. let Ġ{ Ġsend ( test Step . testData , Ġit ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġread From ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġread ( test Step , Ġread From ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrespond To ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isValid ( test Step , Ġresponse )) Ġsend ( test Step . testData , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresponse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread ( test Step : ĠTcp Test Step , Ġchannels : ĠSet < String ?> ): ĠMap < *, ĠAny ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtasks Ġ= Ġchannels ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġto Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= Ġtcp Channels [ it ] Ġ?: Ġerror ( getChannel NotExist ErrorMessage ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . read ( test Step . timeout , Ġtest Step . read BufferSize ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toMap () ĊĠĠĠĠĠĠĠ Ġreturn Ġrun Tasks Async And Wait ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtasks , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠisValid ( test Step , Ġit ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Step . delay , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Step . attempts , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Step . timeout ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend ( testData : ĠAny ?, Ġchannels : ĠSet < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtasks Ġ= Ġchannels ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġto Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= Ġtcp Channels [ it ] Ġ?: Ġerror ( getChannel NotExist ErrorMessage ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . send ( testData ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" sent " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toMap () ĊĠĠĠĠĠĠĠ Ġrun Tasks Async And Wait ( tasks ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Test Step Class (): ĠClass < Tcp Test Step > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTcp Test Step :: class . java ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġtcp Channels . values . forEach Ġ{ Ġit . close () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Channel NotExist ErrorMessage ( channelId : ĠString ?) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Channel Ġ'$ channelId ' Ġwas Ġnot Ġregistered Ġin ĠTCP ĠTest ĠStep ĠProcessor " ĊĊĠĠĠ Ġclass ĠBuilder Ġ: ĠBase Tcp Processor Builder < Tcp Test Step >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbuild (): ĠTest Step Processor < Tcp Test Step > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTcp Test Step Processor ( tcp Channels , Ġtest Scenario State , Ġvalidator , Ġtest Step Result Converter ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }