XRootD
Loading...
Searching...
No Matches
XrdSsiEvent.hh
Go to the documentation of this file.
1
#ifndef __XRDSSIEVENT_HH__
2
#define __XRDSSIEVENT_HH__
3
/******************************************************************************/
4
/* */
5
/* X r d S s i E v e n t . h h */
6
/* */
7
/* (c) 2015 by the Board of Trustees of the Leland Stanford, Jr., University */
8
/* Produced by Andrew Hanushevsky for Stanford University under contract */
9
/* DE-AC02-76-SFO0515 with the Department of Energy */
10
/* */
11
/* This file is part of the XRootD software suite. */
12
/* */
13
/* XRootD is free software: you can redistribute it and/or modify it under */
14
/* the terms of the GNU Lesser General Public License as published by the */
15
/* Free Software Foundation, either version 3 of the License, or (at your */
16
/* option) any later version. */
17
/* */
18
/* XRootD is distributed in the hope that it will be useful, but WITHOUT */
19
/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
20
/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
21
/* License for more details. */
22
/* */
23
/* You should have received a copy of the GNU Lesser General Public License */
24
/* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
25
/* COPYING (GPL license). If not, see <http://www.gnu.org/licenses/>. */
26
/* */
27
/* The copyright holder's institutional names and contributor's names may not */
28
/* be used to endorse or promote products derived from this software without */
29
/* specific prior written permission of the institution or contributor. */
30
/******************************************************************************/
31
32
#include "
Xrd/XrdJob.hh
"
33
#include "
XrdCl/XrdClXRootDResponses.hh
"
34
#include "
XrdSsi/XrdSsiAtomics.hh
"
35
36
class
XrdSsiEvent
:
public
XrdJob
,
public
XrdCl::ResponseHandler
37
{
38
public
:
39
40
void
AddEvent
(
XrdCl::XRootDStatus
*st,
XrdCl::AnyObject
*resp);
41
42
void
ClrEvent
() {evMutex.Lock();
ClrEvent
(&thisEvent);evMutex.UnLock();}
43
44
virtual
void
DoIt
();
45
46
virtual
void
HandleResponse
(
XrdCl::XRootDStatus
*status,
47
XrdCl::AnyObject
*response)
48
{
AddEvent
(status, response);}
49
50
virtual
int
XeqEvent
(
XrdCl::XRootDStatus
*st,
XrdCl::AnyObject
**resp) = 0;
51
52
virtual
void
XeqEvFin
() = 0;
53
54
XrdSsiEvent
() :
XrdJob
(
tident
), lastEvent(0),
55
running(false), isClear(true)
56
{*
tident
= 0;}
57
58
~XrdSsiEvent
() {
if
(!isClear)
ClrEvent
(&thisEvent);}
59
60
protected
:
61
62
char
tident
[24];
//"c %u#%u" with %u max 10 digits
63
64
private
:
65
struct
EventData
66
{
XrdCl::XRootDStatus
*status;
67
XrdCl::AnyObject
*response;
68
EventData *next;
69
70
void
Move2(EventData &dest) {dest.status = status; status = 0;
71
dest.response = response; response = 0;
72
dest.next = next; next = 0;
73
}
74
75
EventData(
XrdCl::XRootDStatus
*st=0,
XrdCl::AnyObject
*resp=0)
76
: status(st), response(resp), next(0) {}
77
~EventData() {}
78
};
79
80
void
ClrEvent
(EventData *fdP);
81
82
XrdSsiMutex
evMutex;
83
EventData thisEvent;
84
EventData *lastEvent;
85
bool
running;
86
bool
isClear;
87
static
88
EventData *freeEvent;
89
};
90
#endif
XrdClXRootDResponses.hh
XrdJob.hh
XrdSsiAtomics.hh
XrdCl::AnyObject
Definition
XrdClAnyObject.hh:33
XrdCl::ResponseHandler
Handle an async response.
Definition
XrdClXRootDResponses.hh:1127
XrdCl::XRootDStatus
Request status.
Definition
XrdClXRootDResponses.hh:219
XrdJob::XrdJob
XrdJob(const char *desc="")
Definition
XrdJob.hh:51
XrdSsiEvent::~XrdSsiEvent
~XrdSsiEvent()
Definition
XrdSsiEvent.hh:58
XrdSsiEvent::DoIt
virtual void DoIt()
Definition
XrdSsiEvent.cc:148
XrdSsiEvent::XeqEvFin
virtual void XeqEvFin()=0
XrdSsiEvent::ClrEvent
void ClrEvent()
Definition
XrdSsiEvent.hh:42
XrdSsiEvent::AddEvent
void AddEvent(XrdCl::XRootDStatus *st, XrdCl::AnyObject *resp)
Definition
XrdSsiEvent.cc:56
XrdSsiEvent::HandleResponse
virtual void HandleResponse(XrdCl::XRootDStatus *status, XrdCl::AnyObject *response)
Definition
XrdSsiEvent.hh:46
XrdSsiEvent::XeqEvent
virtual int XeqEvent(XrdCl::XRootDStatus *st, XrdCl::AnyObject **resp)=0
XrdSsiEvent::XrdSsiEvent
XrdSsiEvent()
Definition
XrdSsiEvent.hh:54
XrdSsiEvent::tident
char tident[24]
Definition
XrdSsiEvent.hh:62
XrdSsiMutex
Definition
XrdSsiAtomics.hh:110
XrdSsi
XrdSsiEvent.hh
Generated by
1.13.1