SupportedMessages.cpp

Go to the documentation of this file.
00001 /*
00002 
00003 Copyright (C) 2007 by Peter Dimov.
00004 
00005 This file is part of Calitko (http://www.calitko.org).
00006 
00007 Calitko is free software; you can redistribute it and/or modify
00008 it under the terms of the GNU General Public License as published by
00009 the Free Software Foundation; either version 2 of the License, or
00010 (at your option) any later version.
00011 
00012 Calitko is distributed in the hope that it will be useful,
00013 but WITHOUT ANY WARRANTY; without even the implied warranty of
00014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015 GNU General Public License for more details.
00016 
00017 You should have received a copy of the GNU General Public License
00018 along with Calitko; if not, write to the Free Software
00019 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
00020 
00021 */
00022 
00023 #include "Qt.h"
00024 #include "SupportedMessages.h"
00025 #include "Imports.cpp"
00026 
00030 SupportedMessages::SupportedMessages()
00031     : VendorMessage (OpenVendorDescriptor, QByteArray (4, '\0'), 0, 0)
00032 {
00033 }
00034 
00039 SupportedMessages::SupportedMessages (const QByteArray &rawHeader,
00040                                       const QByteArray &rawPayload)
00041     : VendorMessage (rawHeader, rawPayload)
00042 {
00043     parse();
00044     Q_ASSERT (vendorCode().toBytes() == QByteArray (4, '\0'));
00045     Q_ASSERT (messageType() == 0);
00046     Q_ASSERT (versionNumber() == 0);
00047 }
00048 
00052 SupportedMessages::~SupportedMessages()
00053 {
00054 }
00055 
00057 bool SupportedMessages::prepareReadPayload (const QByteArray &rawPayload)
00058 {
00059     return (rawPayload.length() - 2) % 8 == 0;
00060 }
00061 
00063 void SupportedMessages::readPayload (QDataStream &stream)
00064 {
00065     VendorMessage::readPayload (stream);
00066     quint16 count;
00067     stream >> count;
00068     for (int i = 0; i < count; i++) {
00069         Message message;
00070         stream >> message.vendorCode;
00071         stream >> message.messageType;
00072         stream >> message.versionNumber;
00073         p.messages.append (message);
00074     }
00075 }
00076 
00078 int SupportedMessages::prepareWritePayload() const
00079 {
00080     return VendorMessage::prepareWritePayload() + 2 + p.messages.size() * 8;
00081 }
00082 
00084 void SupportedMessages::writePayload(QDataStream &stream) const
00085 {
00086     VendorMessage::writePayload (stream);
00087     stream << static_cast <quint16> (p.messages.size());
00088     foreach (Message message, p.messages) {
00089         stream << message.vendorCode;
00090         stream << message.messageType;
00091         stream << message.versionNumber;
00092     }
00093 }
00094 
00095 void SupportedMessages::addMessage (const VendorCode &vendorCode,
00096                                     quint16 messageType, quint16 versionNumber)
00097 {
00098     Message message;
00099     message.vendorCode = vendorCode;
00100     message.messageType = messageType;
00101     message.versionNumber = versionNumber;
00102     p.messages.append (message);
00103 }