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; } }
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("请喝一杯茶", "小李"); }
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(); }