O'Reilly logo

Prefactoring by Ken Pugh

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

16.3. The ReceivingMailServer

The ReceivingMailServer creates a ConnectionHandler for every SendingMailServer that connects to it. The ConnectionHandler directs the overall flow of the command/response operation. Commands are both used as the event that determines the next state and processed. We separate these actions by having both a state processor and a command processor. The state processor ensures that the commands are presented in a valid order, according to the state table (Figure 16-2). The command processor interprets the command, which for the most part involves updating the MailDTO, to be discussed shortly. The overall view of ConnectionHandler appears in Figure 16-3.

Figure 16-3. ConnectionHandler communication diagram

The ConnectionHandler class looks like this:

    class ConnectionHandler
        Connection connection
        ReceivedMailExaminer received_mail_examiner
        StateProcessor state_processor
        MailDTO mail_dto
        MailReport mail_report
        handle(  )
        send_greeting(  )
        Command receive_command(  )
        write_mail(  )
        process_command(Command command)

The Connection class represents the connection to the SendingMailServer. It looks like this:

    class Connection
        CommonString read_line(  ) throws ConnectionException
        write_line(CommonString line) throws ConnectionException
        drop(  )

Both read_line( ) and write_line( ) throw ConnectionException if an error occurred when sending or receiving characters. ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required