Differences From Artifact [36076d4479]:
- File src/OFKernelEventObserver.h — part of check-in [96e20b8093] at 2014-01-28 22:50:37 on branch trunk — Rename OFStreamObserver -> OFKernelEventObserver (user: js, size: 5896) [annotate] [blame] [check-ins using]
To Artifact [2129421b71]:
- File
src/OFKernelEventObserver.h
— part of check-in
[c694569d86]
at
2014-01-29 15:54:59
on branch trunk
— Generalize OFKernelEventObserver
It is no longer limited to streams now. (user: js, size: 6549) [annotate] [blame] [check-ins using]
︙ | ︙ | |||
14 15 16 17 18 19 20 | * file. */ #import "OFObject.h" #import "socket.h" | < | | | | | | | > | | | > > > > > > > > > > > | > > | > < > > | > | > > > > > > < > > < > | | | | | 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | * file. */ #import "OFObject.h" #import "socket.h" @class OFMutableArray; @class OFMutableDictionary; @class OFDataArray; #ifdef OF_HAVE_THREADS @class OFMutex; #endif @class OFDate; /*! * @brief A protocol that needs to be implemented by delegates for * OFKernelEventObserver. */ @protocol OFKernelEventObserverDelegate <OFObject> #ifdef OF_HAVE_OPTIONAL_PROTOCOLS @optional #endif /*! * @brief This callback is called when an object did get ready for reading. * * @note If the object is a subclass of @ref OFStream and * @ref OFStream::tryReadLine or @ref OFStream::tryReadTillDelimiter: has * been called on the stream, this callback will not be called again * until new data has been received, even though there is still data in * the cache. The reason for this is to prevent spinning in a loop when * there is an incomplete string in the cache. Once the string has been * completed, the callback will be called again as long there is data in * the cache. * * @param object The object which did become ready for reading */ - (void)objectIsReadyForReading: (id)object; /*! * @brief This callback is called when an object did get ready for writing. * * @param object The object which did become ready for writing */ - (void)objectIsReadyForWriting: (id)object; @end /*! * @brief This protocol is implemented by classes which can be observed for * readiness for reading by OFKernelEventObserver. */ @protocol OFReadyForReadingObserving <OFObject> /*! * @brief Returns the file descriptor for reading that should be checked by the * OFKernelEventObserver. * * @return The file descriptor for reading that should be checked by the * OFKernelEventObserver */ - (int)fileDescriptorForReading; @end /*! * @brief This protocol is implemented by classes which can be observed for * readiness for writing by OFKernelEventObserver. */ @protocol OFReadyForWritingObserving <OFObject> /*! * @brief Returns the file descriptor for writing that should be checked by the * OFKernelEventObserver. * * @return The file descriptor for writing that should be checked by the * OFKernelEventObserver */ - (int)fileDescriptorForWriting; @end /*! * @brief A class that can observe multiple kernel events (e.g. streams being * ready to read) at once. * * @note Currently, Win32 can only observe TCP sockets! */ @interface OFKernelEventObserver: OFObject { OFMutableArray *_readObjects; OFMutableArray *_writeObjects; __unsafe_unretained id *_FDToObject; size_t _maxFD; OFMutableArray *_queue; OFDataArray *_queueInfo, *_queueFDs; id <OFKernelEventObserverDelegate> _delegate; int _cancelFD[2]; #ifndef OF_HAVE_PIPE struct sockaddr_in _cancelAddr; |
︙ | ︙ | |||
111 112 113 114 115 116 117 | * @brief Sets the delegate for the OFKernelEventObserver. * * @param delegate The delegate for the OFKernelEventObserver */ - (void)setDelegate: (id <OFKernelEventObserverDelegate>)delegate; /*! | | | < < | | | | < < | | > < | | | | | | | | | | | | | | 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 | * @brief Sets the delegate for the OFKernelEventObserver. * * @param delegate The delegate for the OFKernelEventObserver */ - (void)setDelegate: (id <OFKernelEventObserverDelegate>)delegate; /*! * @brief Adds an object to observe for reading. * * This is also used to observe a listening socket for incoming connections, * which then triggers a read event for the observed object. * * If there is an @ref observe call blocking, it will be canceled. The reason * for this is to prevent blocking even though the newly added object is ready. * * @param object The object to observe for reading */ - (void)addObjectForReading: (id <OFReadyForReadingObserving>)object; /*! * @brief Adds an object to observe for writing. * * If there is an @ref observe call blocking, it will be canceled. The reason * for this is to prevent blocking even though the newly added object is ready. * * @param object The object to observe for writing */ - (void)addObjectForWriting: (id <OFReadyForWritingObserving>)object; /*! * @brief Removes an object to observe for reading. * * If there is an @ref observe call blocking, it will be canceled. The reason * for this is to prevent the removed object from still being observed. * * @param object The object to remove from observing for reading */ - (void)removeObjectForReading: (id <OFReadyForReadingObserving>)object; /*! * @brief Removes an object to observe for writing. * * If there is an @ref observe call blocking, it will be canceled. The reason * for this is to prevent the removed object from still being observed. * * @param object The object to remove from observing for writing */ - (void)removeObjectForWriting: (id <OFReadyForWritingObserving>)object; /*! * @brief Observes all objects and blocks until an event happens on an object. */ - (void)observe; /*! * @brief Observes all objects until an event happens on an object or the * timeout is reached. * * @param timeInterval The time to wait for an event, in seconds * @return A boolean whether events occurred during the timeinterval */ - (bool)observeForTimeInterval: (of_time_interval_t)timeInterval; /*! * @brief Observes all objects until an event happens on an object or the * specified date is reached. * * @param date The until which to observe * @return A boolean whether events occurred until the specified date */ - (bool)observeUntilDate: (OFDate*)date; /*! * @brief Cancels the currently blocking observe call. * * This is automatically done when a new object is added or removed by another * thread, but in some circumstances, it might be desirable for a thread to * manually stop the observe running in another thread. */ - (void)cancel; @end @interface OFObject (OFKernelEventObserverDelegate) <OFKernelEventObserverDelegate> @end |