implemented cnm::close_connection() + general code cleaning + added TODOS
This commit is contained in:
		@@ -47,6 +47,18 @@ namespace chat
 | 
			
		||||
                      });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        void close_connection()
 | 
			
		||||
        {
 | 
			
		||||
            _ios.post([this]
 | 
			
		||||
                      {
 | 
			
		||||
                          _os << chat_message(message::BYE);
 | 
			
		||||
                          asio::write(_socket, _osb);
 | 
			
		||||
                          // TODO: handle last server message
 | 
			
		||||
                          _socket.close();
 | 
			
		||||
                          _ios.stop();
 | 
			
		||||
                      });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /* internal methods */
 | 
			
		||||
    private:
 | 
			
		||||
@@ -71,53 +83,57 @@ namespace chat
 | 
			
		||||
        {
 | 
			
		||||
            throw_if_error(ec);
 | 
			
		||||
 | 
			
		||||
            std::cout << receive_message_sync() << '\n';
 | 
			
		||||
 | 
			
		||||
            _os << chat_message(message::HELLO);
 | 
			
		||||
            _os << chat_message(message::NEPTUN, _login);
 | 
			
		||||
            std::reverse(_login.begin(), _login.end());
 | 
			
		||||
            _os << chat_message(message::PASSW, _login);
 | 
			
		||||
            asio::write(_socket, _osb);
 | 
			
		||||
            asio::write(_socket, _osb);     // handshake is handled synchronously
 | 
			
		||||
 | 
			
		||||
            // TODO: do something with these couts (decide whether to display this or not)
 | 
			
		||||
            std::cout << receive_message_sync() << '\n';
 | 
			
		||||
            std::cout << receive_message_sync() << '\n';
 | 
			
		||||
            std::cout << receive_message_sync() << '\n';
 | 
			
		||||
            std::cout << receive_message_sync() << '\n';
 | 
			
		||||
 | 
			
		||||
            receive();
 | 
			
		||||
            receive();                      // then flow goes to receive-loop
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        std::string receive_message_sync()
 | 
			
		||||
        {
 | 
			
		||||
            boost::system::error_code ec;
 | 
			
		||||
 | 
			
		||||
            std::string data;
 | 
			
		||||
            asio::read_until(_socket, _isb, byte(message::TERM));
 | 
			
		||||
            asio::read_until(_socket, _isb, byte(message::TERM), ec);
 | 
			
		||||
            std::getline(_is, data, byte(message::TERM));
 | 
			
		||||
 | 
			
		||||
            throw_if_error(ec);
 | 
			
		||||
            return data;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        void receive()
 | 
			
		||||
        {
 | 
			
		||||
            asio::async_read_until(_socket, _isb, byte(message::TERM),
 | 
			
		||||
                                   [this](boost::system::error_code ec, size_t)
 | 
			
		||||
                                   {
 | 
			
		||||
                                       throw_if_error(ec);
 | 
			
		||||
            asio::async_read_until
 | 
			
		||||
                    (_socket, _isb, byte(message::TERM),
 | 
			
		||||
                     [this](boost::system::error_code ec, size_t)
 | 
			
		||||
                     {
 | 
			
		||||
                         throw_if_error(ec);
 | 
			
		||||
 | 
			
		||||
                                       std::string data;
 | 
			
		||||
                                       std::getline(_is, data, byte(message::TERM));
 | 
			
		||||
                         std::string data;
 | 
			
		||||
                         std::getline(_is, data, byte(message::TERM));
 | 
			
		||||
 | 
			
		||||
                                       switch (data[0])
 | 
			
		||||
                                       {
 | 
			
		||||
                                           // TODO: handle stuff
 | 
			
		||||
                                           case byte(message::LOGIN):
 | 
			
		||||
                                               std::cout << "login\n";
 | 
			
		||||
                                               break;
 | 
			
		||||
                                           case byte(message::PING):
 | 
			
		||||
                                               std::cout << "ping\n";
 | 
			
		||||
                                               break;
 | 
			
		||||
                                       }
 | 
			
		||||
                         switch (data[0])
 | 
			
		||||
                         {
 | 
			
		||||
                             // TODO: handle stuff
 | 
			
		||||
                             case byte(message::PING):
 | 
			
		||||
                                 send(chat_message(message::PONG));
 | 
			
		||||
                                 break;
 | 
			
		||||
                             case byte(message::MESSAGE):
 | 
			
		||||
                                 std::cout << data << '\n';
 | 
			
		||||
                                 break;
 | 
			
		||||
                         }
 | 
			
		||||
 | 
			
		||||
                                       receive();
 | 
			
		||||
                                   });
 | 
			
		||||
                         receive();
 | 
			
		||||
                     });
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user