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. ...

Get Prefactoring now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.