tcpcarrier.h

来自「一个语言识别引擎」· C头文件 代码 · 共 78 行

H
78
字号
// -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-

/*
 * Copyright (C) 2006 Paul Fitzpatrick
 * CopyPolicy: Released under the terms of the GNU GPL v2.0.
 *
 */

#ifndef _YARP2_TCPCARRIER_
#define _YARP2_TCPCARRIER_

#include <yarp/AbstractCarrier.h>

#include <ace/OS_NS_stdio.h>

namespace yarp {
    class TcpCarrier;
}

/**
 * Communicating between two ports via TCP.
 */
class yarp::TcpCarrier : public AbstractCarrier {
public:

    TcpCarrier() {
        requireAckFlag = true;
    }

    virtual Carrier *create() {
        return new TcpCarrier();
    }

    virtual String getName() {
        return "tcp";
    }

    int getSpecifierCode() {
        return 3;
    }

    virtual bool checkHeader(const Bytes& header) {
        return getSpecifier(header)%16 == getSpecifierCode();
    }

    virtual void getHeader(const Bytes& header) {
        createStandardHeader(getSpecifierCode()+(requireAckFlag?128:0), header);
    }

    virtual void setParameters(const Bytes& header) {
        int specifier = getSpecifier(header);
        requireAckFlag = (specifier&128)!=0;
    }

    virtual bool requireAck() {
        return requireAckFlag;
    }

    virtual bool isConnectionless() {
        return false;
    }

    virtual void respondToHeader(Protocol& proto) {
        int cport = proto.getStreams().getLocalAddress().getPort();
        proto.writeYarpInt(cport);
    }

    virtual void expectReplyToHeader(Protocol& proto) {
        proto.readYarpInt(); // ignore result
    }

private:
    bool requireAckFlag;
};

#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?