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