asio 0.3.8rc3 | Home | Reference | Tutorial | Examples | Design

Examples |

# chat/chat_message.hpp

    //
    // chat_message.hpp
    // ~~~~~~~~~~~~~~~~
    //
    // Copyright (c) 2003-2007 Christopher M. Kohlhoff (chris at kohlhoff dot com)
    //
    // Distributed under the Boost Software License, Version 1.0. (See accompanying
    // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
    //

    #ifndef CHAT_MESSAGE_HPP
    #define CHAT_MESSAGE_HPP

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>

    class chat_message
    {
    public:
      enum { header_length = 4 };
      enum { max_body_length = 512 };

      chat_message()
        : body_length_(0)
      {
      }

      const char* data() const
      {
        return data_;
      }

      char* data()
      {
        return data_;
      }

      size_t length() const
      {
        return header_length + body_length_;
      }

      const char* body() const
      {
        return data_ + header_length;
      }

      char* body()
      {
        return data_ + header_length;
      }

      size_t body_length() const
      {
        return body_length_;
      }

      void body_length(size_t length)
      {
        body_length_ = length;
        if (body_length_ > max_body_length)
          body_length_ = max_body_length;
      }

      bool decode_header()
      {
        using namespace std; // For strncat and atoi.
        char header[header_length + 1] = "";
        strncat(header, data_, header_length);
        body_length_ = atoi(header);
        if (body_length_ > max_body_length)
        {
          body_length_ = 0;
          return false;
        }
        return true;
      }

      void encode_header()
      {
        using namespace std; // For sprintf and memcpy.
        char header[header_length + 1] = "";
        sprintf(header, "%4d", body_length_);
        memcpy(data_, header, header_length);
      }

    private:
      char data_[header_length + max_body_length];
      size_t body_length_;
    };

    #endif // CHAT_MESSAGE_HPP

asio 0.3.8rc3 | Home | Reference | Tutorial | Examples | Design