OpendTect  6.6
netreqconnection.h
Go to the documentation of this file.
1 #pragma once
2 
3 /*+
4 ________________________________________________________________________
5 
6  (C) dGB Beheer B.V.; (LICENSE) http://opendtect.org/OpendTect_license.txt
7  Author: K. Tingdahl
8  Date: August 2014
9  RCS: $Id$
10 ________________________________________________________________________
11 
12 -*/
13 
14 #include "networkcommon.h"
15 
16 class QEventLoop;
17 
18 namespace Network
19 {
20 
21 class Server;
22 class Socket;
23 class RequestPacket;
24 struct PacketSendData;
25 
26 
27 /*\brief
28  Manages RequestPackets by sending/receiveing them using a Tcp Connection.
29 
30  To send a packet, make the RequestPacket and use sendPacket().
31 
32  To receive, you want only packets for your request ID. If you set a timeout
33  the connection will wait for a packet with your ID if there wasn't already
34  one present. On success, the returned packet is yours.
35 
36  If the other side can also send requests to us, then you need to periodically
37  fetch your packets until getNextExternalPacket() returns null.
38 
39  */
40 
41 
44 public:
46  bool multithreaded=true,
47  int connectiontimeout=-1);
54 
55  bool isOK() const;
56  bool stillTrying() const;
58  PortNr_Type port() const;
59  int ID() const { return id_; }
60 
62  bool waitforfinish=false);
67  RefMan<RequestPacket> pickupPacket(od_int32 reqid,int timeout /* in ms */,
68  int* errorcode=nullptr);
74 
75  static int cInvalidRequest() { return 1; }
76  static int cTimeout() { return 2; }
77  static int cDisconnected() { return 3; }
78 
79  bool isMultiThreaded() { return socketthread_; }
80  Socket* socket() { return socket_; }
81 
84 
85  uiString errMsg() const { return errmsg_; }
86 
87 private:
88 
89  mutable uiString errmsg_;
90 
93 
95  Socket* socket_;
96  int timeout_;
98 
99  int id_;
100 
101  Authority* authority_ = nullptr;
102 
103  Threads::Thread* socketthread_ = nullptr;
104  QEventLoop* eventloop_ = nullptr;
105  Threads::ConditionVar* eventlooplock_ = nullptr;
106 
109  //Called from socketthread
110 
112  void connectToHost( bool witheventloop );
116 
118  bool waitforfinish);
119 
122 
125 
126  friend struct PacketSendData;
127  friend class RequestConnectionSender;
128 };
129 
130 
131 
138 public:
139 
140  RequestServer(const char* servernm);
144 
145  bool isOK() const;
146  Server* server() { return server_; }
148  //Just what is needed for a connection
149 
153 
154  uiString errMsg() const { return errmsg_; }
155 
156 private:
157 
159 
161 
163 
166 
169 
170 };
171 
172 
173 }; //Namespace
174 
175 
Network::RequestConnection::timeout_
int timeout_
Definition: netreqconnection.h:96
Network::RequestConnection::readFromSocket
bool readFromSocket()
Network::RequestConnection::socketThreadFunc
void socketThreadFunc(CallBacker *)
Network::RequestPacket
Definition: netreqpacket.h:53
Network::RequestConnection::connCloseCB
void connCloseCB(CallBacker *)
ObjectSet
Set of pointers to objects.
Definition: commontypes.h:31
Network::RequestConnection::pickupPacket
RefMan< RequestPacket > pickupPacket(od_int32 reqid, int timeout, int *errorcode=nullptr)
Network::RequestServer::LocalErrMsg
uiString LocalErrMsg() const
Network::RequestServer::getAuthority
Authority getAuthority() const
Network::RequestConnection::packetArrived
CNotifier< RequestConnection, od_int32 > packetArrived
Definition: netreqconnection.h:82
mExpClass
#define mExpClass(module)
Definition: commondefs.h:177
Network::RequestConnection::socket_
Socket * socket_
Definition: netreqconnection.h:95
Network
Definition: jobcommunic.h:22
Network::Authority
Definition: networkcommon.h:56
Network::RequestServer::RequestServer
RequestServer(PortNr_Type, SpecAddr=Any)
Network::RequestConnection::id_
int id_
Definition: netreqconnection.h:99
Network::RequestConnection::writeToSocket
bool writeToSocket()
sKey::Server
FixedString Server()
Definition: keystrs.h:137
CallBacker
Inherit from this class to be able to send and/or receive CallBacks.
Definition: callback.h:185
Network::RequestConnection::errMsg
uiString errMsg() const
Definition: netreqconnection.h:85
Network::RequestConnection::requestEnded
void requestEnded(od_int32)
Network::RequestServer::TCPErrMsg
uiString TCPErrMsg() const
Network::RequestConnection::RequestConnection
RequestConnection(const Authority &, bool multithreaded=true, int connectiontimeout=-1)
Initiates communications.
Network::RequestConnection
Definition: netreqconnection.h:43
Network::RequestServer::newConnection
Notifier< RequestServer > newConnection
Definition: netreqconnection.h:150
Network::RequestConnection::connectToHost
void connectToHost(bool witheventloop)
Network::RequestServer::isOK
bool isOK() const
Network::RequestServer::errmsg_
uiString errmsg_
Definition: netreqconnection.h:160
Network::RequestServer::newConnectionCB
void newConnectionCB(CallBacker *)
Network::RequestConnection::getNextExternalPacket
RefMan< RequestPacket > getNextExternalPacket()
Network::RequestConnection::isMultiThreaded
bool isMultiThreaded()
Definition: netreqconnection.h:79
Network::RequestConnection::newConnectionCB
void newConnectionCB(CallBacker *)
Network::RequestConnection::errmsg_
uiString errmsg_
Definition: netreqconnection.h:89
Network::RequestServer::mODTextTranslationClass
mODTextTranslationClass(RequestServer)
Network::RequestConnection::server
BufferString server() const
Network::RequestConnection::RequestConnection
RequestConnection(Socket *)
Network::RequestConnection::cInvalidRequest
static int cInvalidRequest()
Definition: netreqconnection.h:75
Network::RequestServer::RequestServer
RequestServer(const Authority &)
Threads::ConditionVar
Is an object that faciliates many threads to wait for something to happen.
Definition: thread.h:110
Network::SpecAddr
SpecAddr
Definition: networkcommon.h:33
Notifier
Class to help setup a callback handling.
Definition: notify.h:126
Network::RequestConnection::mODTextTranslationClass
mODTextTranslationClass(RequestConnection)
Network::RequestConnection::sendqueue_
ObjectSet< PacketSendData > sendqueue_
Definition: netreqconnection.h:107
Network::RequestConnection::ourrequestids_
TypeSet< od_int32 > ourrequestids_
Definition: netreqconnection.h:91
Network::Any
@ Any
Definition: networkcommon.h:33
Network::RequestConnection::lock_
Threads::ConditionVar lock_
Definition: netreqconnection.h:94
Network::RequestConnection::connectionClosed
Notifier< RequestConnection > connectionClosed
Definition: netreqconnection.h:83
Network::RequestServer::pendingconns_
ObjectSet< RequestConnection > pendingconns_
Definition: netreqconnection.h:162
BufferString
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size.
Definition: bufstring.h:40
Network::RequestConnection::~RequestConnection
~RequestConnection()
Network::RequestConnection::sendQueueCB
void sendQueueCB(CallBacker *)
networkcommon.h
Network::RequestServer::RequestServer
RequestServer(const char *servernm)
Network::RequestServer::server
Server * server()
Definition: netreqconnection.h:146
Network::RequestServer
Definition: netreqconnection.h:137
Network::RequestConnection::sendPacket
bool sendPacket(const RequestPacket &, bool waitforfinish=false)
uiString
String that is able to hold international (UTF-8) strings for the user interface.
Definition: uistring.h:121
Network::RequestConnection::doSendPacket
bool doSendPacket(const RequestPacket &, bool waitforfinish)
od_int32
#define od_int32
Definition: plftypes.h:30
Threads::Thread
Is the base class for all threads. Start it by creating it and give it the function or CallBack to ex...
Definition: thread.h:282
Network::RequestConnection::cDisconnected
static int cDisconnected()
Definition: netreqconnection.h:77
Network::RequestConnection::ID
int ID() const
Definition: netreqconnection.h:59
MPE::errmsg_
BufferString errmsg_
Definition: horizontracker.h:118
Network::RequestConnection::getNextAlreadyRead
RefMan< RequestPacket > getNextAlreadyRead(int)
Network::RequestConnection::receivedpackets_
ObjectSet< RequestPacket > receivedpackets_
Definition: netreqconnection.h:92
Network::RequestServer::lock_
Threads::Lock lock_
Definition: netreqconnection.h:164
Network::RequestConnection::cTimeout
static int cTimeout()
Definition: netreqconnection.h:76
Network::RequestServer::pickupNewConnection
RequestConnection * pickupNewConnection()
Network::RequestServer::~RequestServer
~RequestServer()
Network::RequestServer::server_
Server * server_
Definition: netreqconnection.h:165
Network::RequestConnection::isOK
bool isOK() const
is the conn usable?
Network::RequestConnection::socket
Socket * socket()
Definition: netreqconnection.h:80
Network::RequestConnection::stillTrying
bool stillTrying() const
if not OK, may it become?
Network::RequestConnection::dataArrivedCB
void dataArrivedCB(CallBacker *)
Network::RequestConnection::ownssocket_
bool ownssocket_
Definition: netreqconnection.h:97
Network::RequestConnection::port
PortNr_Type port() const
Threads::Lock
A lock of a type that (hopefully) suits your needs. To use it, you need the Locker class.
Definition: threadlock.h:53
PortNr_Type
unsigned short PortNr_Type
Definition: commontypes.h:37
CNotifier
Notifier with automatic capsule creation.
Definition: notify.h:171
Network::RequestServer::errMsg
uiString errMsg() const
Becomes yours.
Definition: netreqconnection.h:154
TypeSet< od_int32 >
RefMan
Definition: ptrman.h:206

Generated at for the OpendTect seismic interpretation project. Copyright (C): dGB Beheer B.V. 1995-2021