FairMQ  1.2.1
C++ Message Passing Framework
FairMQSocketNN.h
1 /********************************************************************************
2  * Copyright (C) 2014-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *
3  * *
4  * This software is distributed under the terms of the *
5  * GNU Lesser General Public Licence (LGPL) version 3, *
6  * copied verbatim in the file "LICENSE" *
7  ********************************************************************************/
8 
9 #ifndef FAIRMQSOCKETNN_H_
10 #define FAIRMQSOCKETNN_H_
11 
12 #include <vector>
13 #include <atomic>
14 
15 #include "FairMQSocket.h"
16 #include "FairMQMessage.h"
17 
19 {
20  public:
21  FairMQSocketNN(const std::string& type, const std::string& name, const std::string& id = "");
22  FairMQSocketNN(const FairMQSocketNN&) = delete;
23  FairMQSocketNN operator=(const FairMQSocketNN&) = delete;
24 
25  std::string GetId() override;
26 
27  bool Bind(const std::string& address) override;
28  void Connect(const std::string& address) override;
29 
30  int Send(FairMQMessagePtr& msg, const int timeout = 0) override;
31  int Receive(FairMQMessagePtr& msg, const int timeout = 0) override;
32  int64_t Send(std::vector<std::unique_ptr<FairMQMessage>>& msgVec, const int timeout = 0) override;
33  int64_t Receive(std::vector<std::unique_ptr<FairMQMessage>>& msgVec, const int timeout = 0) override;
34 
35  int TrySend(FairMQMessagePtr& msg) override;
36  int TryReceive(FairMQMessagePtr& msg) override;
37  int64_t TrySend(std::vector<std::unique_ptr<FairMQMessage>>& msgVec) override;
38  int64_t TryReceive(std::vector<std::unique_ptr<FairMQMessage>>& msgVec) override;
39 
40  void* GetSocket() const override;
41  int GetSocket(int nothing) const override;
42 
43  void Close() override;
44 
45  static void Interrupt();
46  static void Resume();
47 
48  void SetOption(const std::string& option, const void* value, size_t valueSize) override;
49  void GetOption(const std::string& option, void* value, size_t* valueSize) override;
50 
51  unsigned long GetBytesTx() const override;
52  unsigned long GetBytesRx() const override;
53  unsigned long GetMessagesTx() const override;
54  unsigned long GetMessagesRx() const override;
55 
56  bool SetSendTimeout(const int timeout, const std::string& address, const std::string& method) override;
57  int GetSendTimeout() const override;
58  bool SetReceiveTimeout(const int timeout, const std::string& address, const std::string& method) override;
59  int GetReceiveTimeout() const override;
60 
61  static int GetConstant(const std::string& constant);
62 
63  ~FairMQSocketNN() override;
64 
65  private:
66  int fSocket;
67  std::string fId;
68  std::atomic<unsigned long> fBytesTx;
69  std::atomic<unsigned long> fBytesRx;
70  std::atomic<unsigned long> fMessagesTx;
71  std::atomic<unsigned long> fMessagesRx;
72 
73  static std::atomic<bool> fInterrupted;
74 
75  int fSndTimeout;
76  int fRcvTimeout;
77 
78  int SendImpl(FairMQMessagePtr& msg, const int flags, const int timeout);
79  int ReceiveImpl(FairMQMessagePtr& msg, const int flags, const int timeout);
80  int64_t SendImpl(std::vector<std::unique_ptr<FairMQMessage>>& msgVec, const int flags, const int timeout);
81  int64_t ReceiveImpl(std::vector<std::unique_ptr<FairMQMessage>>& msgVec, const int flags, const int timeout);
82 };
83 
84 #endif /* FAIRMQSOCKETNN_H_ */
Definition: FairMQSocket.h:18
Definition: FairMQSocketNN.h:18