Esempio n. 1
0
void AbstractProtocol::sendMessage(const AbstractMessage &message)
{
    QByteArray totalData;
    QByteArray messageData;
    MessageHeader header;

    static int nextSeq = 0;
    nextSeq++;
    message.serialize(&messageData);
    header.data.size = messageData.size();
    header.data.type = message.getType();
    header.data.seqNum = nextSeq;
    header.serialize(&totalData);
    totalData.append(messageData);
    qDebug() << "Sending Total size: " << totalData.size();

    int written = 0;
    int totalSize = totalData.size();
    while (written < totalSize) {
        int ret = socket->write(totalData.data() + written, totalSize - written);
        if (ret == -1) {
            qDebug() << "write error";
            return;
        }
        written+=ret;
    }
}
Esempio n. 2
0
					void Client::main(std::string args[])
					{
						//创建具体的实现对象
						MessageImplementor *impl = new MessageSMS();

						//创建一个普通消息对象
						AbstractMessage *m = new CommonMessage(impl);
						m->sendMessage("请喝一杯茶", "小李");

						//创建一个紧急消息对象
						m = new UrgencyMessage(impl);
						m->sendMessage("请喝一杯茶", "小李");

						//创建一个特急消息对象
						m = new SpecialUrgencyMessage(impl);
						m->sendMessage("请喝一杯茶", "小李");

						//把实现方式切换成手机短消息,然后再实现一遍
						impl = new MessageMobile();

						m = new CommonMessage(impl);
						m->sendMessage("请喝一杯茶", "小李");

						m = new UrgencyMessage(impl);
						m->sendMessage("请喝一杯茶", "小李");

						m = new SpecialUrgencyMessage(impl);
						m->sendMessage("请喝一杯茶", "小李");
					}
Esempio n. 3
0
void AbstractProtocol::sendMessage(const AbstractMessage &message)
{
    QByteArray totalData;
    QByteArray messageData;
    MessageHeader header;

    static int nextSeq = 0;
    nextSeq++;
    message.serialize(&messageData);
    header.data.size = messageData.size();
    header.data.type = message.getType();
    header.data.seqNum = nextSeq;
    header.serialize(&totalData);
    totalData.append(messageData);
    qDebug() << "Sending Total size 2: " << totalData.size();
    qDebug() << "Bytes to write: " << socket->bytesToWrite();

    int ret = socket->write(totalData);
    if (ret != totalData.size()) {
        qDebug() << "Error!! Ret = " << ret;
        qDebug() << socket->errorString();
    }
    socket->flush();
}