123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- #import <Foundation/Foundation.h>
- @class HTTPMessage;
- @class GCDAsyncSocket;
- #define WebSocketDidDieNotification @"WebSocketDidDie"
- @interface WebSocket : NSObject
- {
- dispatch_queue_t websocketQueue;
-
- HTTPMessage *request;
- GCDAsyncSocket *asyncSocket;
-
- NSData *term;
-
- BOOL isStarted;
- BOOL isOpen;
- BOOL isVersion76;
-
- id __unsafe_unretained delegate;
- }
- + (BOOL)isWebSocketRequest:(HTTPMessage *)request;
- - (id)initWithRequest:(HTTPMessage *)request socket:(GCDAsyncSocket *)socket;
- /**
- * Delegate option.
- *
- * In most cases it will be easier to subclass WebSocket,
- * but some circumstances may lead one to prefer standard delegate callbacks instead.
- **/
- @property (/* atomic */ unsafe_unretained) id delegate;
- /**
- * The WebSocket class is thread-safe, generally via it's GCD queue.
- * All public API methods are thread-safe,
- * and the subclass API methods are thread-safe as they are all invoked on the same GCD queue.
- **/
- @property (nonatomic, readonly) dispatch_queue_t websocketQueue;
- /**
- * Public API
- *
- * These methods are automatically called by the HTTPServer.
- * You may invoke the stop method yourself to close the WebSocket manually.
- **/
- - (void)start;
- - (void)stop;
- /**
- * Public API
- *
- * Sends a message over the WebSocket.
- * This method is thread-safe.
- **/
- - (void)sendMessage:(NSString *)msg;
- /**
- * Public API
- *
- * Sends a message over the WebSocket.
- * This method is thread-safe.
- **/
- - (void)sendData:(NSData *)msg;
- /**
- * Subclass API
- *
- * These methods are designed to be overriden by subclasses.
- **/
- - (void)didOpen;
- - (void)didReceiveMessage:(NSString *)msg;
- - (void)didClose;
- @end
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- #pragma mark -
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- /**
- * There are two ways to create your own custom WebSocket:
- *
- * - Subclass it and override the methods you're interested in.
- * - Use traditional delegate paradigm along with your own custom class.
- *
- * They both exist to allow for maximum flexibility.
- * In most cases it will be easier to subclass WebSocket.
- * However some circumstances may lead one to prefer standard delegate callbacks instead.
- * One such example, you're already subclassing another class, so subclassing WebSocket isn't an option.
- **/
- @protocol WebSocketDelegate
- @optional
- - (void)webSocketDidOpen:(WebSocket *)ws;
- - (void)webSocket:(WebSocket *)ws didReceiveMessage:(NSString *)msg;
- - (void)webSocketDidClose:(WebSocket *)ws;
- @end
|