Skip to content
Snippets Groups Projects
WANZmq.h 1.59 KiB
Newer Older
/*
 * Distributed under the OSI-approved Apache License, Version 2.0.  See
 * accompanying file Copyright.txt for details.
 *
 * WANZmq.h
 *
 *  Created on: May 26, 2017
 *      Author: Jason Wang wangr1@ornl.gov
 */

#ifndef ADIOS2_TOOLKIT_TRANSPORT_WAN_WANZMQ_H_
#define ADIOS2_TOOLKIT_TRANSPORT_WAN_WANZMQ_H_

#include "adios2/toolkit/transport/Transport.h"

namespace adios2
{
namespace transport
{

class WANZmq : public Transport
{

public:
    /**
     *
     * @param ipAddress
     * @param port
     * @param mpiComm
     * @param debugMode
     */
    WANZmq(const std::string ipAddress, const std::string port,
           MPI_Comm mpiComm, const bool debugMode);

    ~WANZmq();

    void Open(const std::string &name, const Mode openMode) final;

    void SetBuffer(char *buffer, size_t size) final;

    void Write(const char *buffer, size_t size, size_t start = MaxSizeT) final;
    void IWrite(const char *buffer, size_t size, Status &status,
                size_t start = MaxSizeT) final;

    void Read(char *buffer, size_t size, size_t start = MaxSizeT) final;
    void IRead(char *buffer, size_t size, Status &status,
               size_t start = MaxSizeT) final;

    void Flush() final;

    void Close() final;

    void SetAddress(const std::string address);

private:
    const std::string m_IPAddress;
    std::string m_Port;

    /** context handler created by zmq, thread safe */
Wang, Ruonan's avatar
Wang, Ruonan committed
    void *m_Context = nullptr;
Wang, Ruonan's avatar
Wang, Ruonan committed
    void *m_Socket = nullptr;
};

} // end namespace transport
} // end namespace adios

#endif /* ADIOS2_TOOLKIT_TRANSPORT_WAN_WANZMQ_H_ */