Improve MessageQueueDelegate.
authorRobert Sesek <rsesek@bluestatic.org>
Thu, 20 Jun 2013 02:24:51 +0000 (22:24 -0400)
committerRobert Sesek <rsesek@bluestatic.org>
Thu, 20 Jun 2013 02:24:51 +0000 (22:24 -0400)
Source/MessageQueue.h
Source/MessageQueue.m
Source/ProtocolClient.m

index 2e4f968c4809f97493db409b1a83e17f1c0d37d7..2e622889dc7a46b83fea7b7df24b2cb54bbbd389 100644 (file)
 
 // Delegate ////////////////////////////////////////////////////////////////////
 
-// The delegate for the message queue. These methods may be called on any thread.
+// The delegate for the message queue. These methods are called from the thread
+// on which the MessageQueue was initialized.
 @protocol MessageQueueDelegate <NSObject>
 // Callback for any errors that the MessageQueue encounters.
-- (void)messageQueueError:(NSError*)error;
+- (void)messageQueue:(MessageQueue*)queue error:(NSError*)error;
 
 // Called when the listening socket has accepted a child socket.
-- (void)clientDidConnect:(MessageQueue*)queue;
+- (void)messageQueueDidConnect:(MessageQueue*)queue;
 
 // Called when the child socket has been disconnected.
-- (void)clientDidDisconnect:(MessageQueue*)queue;
-
-// If the write stream is ready, the delegate controls whether or not the next
-// pending message should be sent via the result of this method.
-- (BOOL)shouldSendMessage;
+- (void)messageQueueDidDisconnect:(MessageQueue*)queue;
 
 // Callback for when a message has been sent.
-- (void)didSendMessage:(NSString*)message;
+- (void)messageQueue:(MessageQueue*)queue didSendMessage:(NSString*)message;
 
 // Callback with the message content when one has been receieved.
-- (void)didReceiveMessage:(NSString*)message;
+- (void)messageQueue:(MessageQueue*)queue didReceiveMessage:(NSString*)message;
 @end
index c7c4ff0446c1b2978cbd45e89ccf36ab16c68009..8ada0007bf2c02721664ac08a435cfc7c6000d5d 100644 (file)
@@ -213,7 +213,7 @@ static void MessageQueueWriteEvent(CFWriteStreamRef stream,
   }
 
   _connected = NO;
-  [_delegate clientDidDisconnect:self];
+  [_delegate messageQueueDidDisconnect:self];
 }
 
 - (void)stopRunLoop {
@@ -230,9 +230,6 @@ static void MessageQueueWriteEvent(CFWriteStreamRef stream,
   if (![_queue count])
     return;
 
-  if (![(id<MessageQueueDelegate>)_delegate.object shouldSendMessage])
-    return;
-
   if (!CFWriteStreamCanAcceptBytes(_writeStream))
     return;
 
@@ -278,7 +275,7 @@ static void MessageQueueWriteEvent(CFWriteStreamRef stream,
     totalWritten += bytesWritten;
   }
 
-  [_delegate didSendMessage:message];
+  [_delegate messageQueue:self didSendMessage:message];
 
   free(buffer);
 }
@@ -322,7 +319,7 @@ static void MessageQueueWriteEvent(CFWriteStreamRef stream,
 
     // If this read finished the packet, handle it and reset.
     if (_messageSize >= _totalMessageSize) {
-      [_delegate didReceiveMessage:[_message autorelease]];
+      [_delegate messageQueue:self didReceiveMessage:[_message autorelease]];
       _message = nil;
 
       // Process any outgoing messages.
@@ -384,7 +381,7 @@ static void MessageQueueWriteEvent(CFWriteStreamRef stream,
   }
 
   _connected = YES;
-  [_delegate clientDidConnect:self];
+  [_delegate messageQueueDidConnect:self];
 
   CFSocketInvalidate(_socket);
   CFRelease(_socket);
index 931a9d11ac8420bebf5f0a6680c4b7a025586fa6..4ae18924f4af8d36fde619ada29ddca858fb7304 100644 (file)
 
 #import "ProtocolClient.h"
 
-@interface ProtocolClient (Private)
-- (void)postReceivedMessage:(NSXMLDocument*)message;
-@end
-
 @implementation ProtocolClient
 
 - (id)initWithDelegate:(NSObject<ProtocolClientDelegate>*)delegate {
 
 // MessageQueueDelegate ////////////////////////////////////////////////////////
 
-- (void)messageQueueError:(NSError*)error {
+- (void)messageQueue:(MessageQueue*)queue error:(NSError*)error {
   NSLog(@"error = %@", error);
 }
 
-- (void)clientDidConnect:(MessageQueue*)queue {
+- (void)messageQueueDidConnect:(MessageQueue*)queue {
   [_lock lock];
   _nextID = 0;
   _lastReadID = 0;
   _lastWrittenID = 0;
   [_lock unlock];
 
-  [_delegate performSelector:@selector(debuggerEngineConnected:)
-                    onThread:_delegateThread
-                  withObject:self
-               waitUntilDone:NO];
+  [_delegate debuggerEngineConnected:self];
 }
 
-- (void)clientDidDisconnect:(MessageQueue*)queue {
-  [_delegate performSelector:@selector(debuggerEngineDisconnected:)
-                    onThread:_delegateThread
-                  withObject:self
-               waitUntilDone:NO];
+- (void)messageQueueDidDisconnect:(MessageQueue*)queue {
   [_messageQueue release];
   _messageQueue = nil;
+  [_delegate debuggerEngineDisconnected:self];
 }
 
 // If the write stream is ready, the delegate controls whether or not the next
 }
 
 // Callback for when a message has been sent.
-- (void)didSendMessage:(NSString*)message {
+- (void)messageQueue:(MessageQueue*)queue didSendMessage:(NSString*)message {
   NSInteger tag = [self transactionIDFromCommand:message];
   [_lock lock];
   _lastWrittenID = tag;
 }
 
 // Callback with the message content when one has been receieved.
-- (void)didReceiveMessage:(NSString*)message {
+- (void)messageQueue:(MessageQueue*)queue didReceiveMessage:(NSString*)message {
   // Test if we can convert it into an NSXMLDocument.
   NSError* error = nil;
   NSXMLDocument* xml = [[NSXMLDocument alloc] initWithXMLString:message
                                                         options:NSXMLDocumentTidyXML
                                                           error:&error];
   if (error) {
-    [self messageQueueError:error];
+    [self messageQueue:queue error:error];
     return;
   }
 
 
   _lastReadID = transaction;
 
-  [self performSelector:@selector(postReceivedMessage:)
-               onThread:_delegateThread
-             withObject:xml
-          waitUntilDone:NO
-                  modes:@[ NSDefaultRunLoopMode ]];
-}
-
-// Private /////////////////////////////////////////////////////////////////////
-
-- (void)postReceivedMessage:(NSXMLDocument*)message {
-  [_delegate debuggerEngine:self receivedMessage:message];
+  [_delegate debuggerEngine:self receivedMessage:xml];
 }
 
 @end