summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Schleifer <js@heap.zone>2018-12-17 22:04:49 +0100
committerJonathan Schleifer <js@heap.zone>2018-12-17 22:04:49 +0100
commit221de5bafdfd2f813bedb5b1213f9b399de2b117 (patch)
treeb227a0cd5c911799bdb20c5f3c70a45517220c02
parentf91e3364c5cd088746e8db767793e000a85aa609 (diff)
Adjust to ObjFW changes
-rw-r--r--src/IRCConnection.h5
-rw-r--r--src/IRCConnection.m82
-rw-r--r--tests/tests.m9
3 files changed, 46 insertions, 50 deletions
diff --git a/src/IRCConnection.h b/src/IRCConnection.h
index 1d0e2c8..12d94bc 100644
--- a/src/IRCConnection.h
+++ b/src/IRCConnection.h
@@ -37,6 +37,8 @@ OF_ASSUME_NONNULL_BEGIN
- (void)connection: (IRCConnection *)connection
didSendLine: (OFString *)line;
- (void)connectionWasEstablished: (IRCConnection *)connection;
+- (void)connection: (IRCConnection *)connection
+ didFailToConnectWithException: (id)exception;
- (void)connection: (IRCConnection *)connection
didSeeUser: (IRCUser *)user
joinChannel: (OFString *)channel;
@@ -88,6 +90,7 @@ OF_ASSUME_NONNULL_BEGIN
of_time_interval_t _pingInterval, _pingTimeout;
OFString *_Nullable _pingData;
OFTimer *_Nullable _pingTimer;
+ bool _fallbackEncodingUsed;
}
@property (readonly, nonatomic) Class socketClass;
@@ -120,8 +123,6 @@ OF_ASSUME_NONNULL_BEGIN
channel: (OFString *)channel
reason: (nullable OFString *)reason;
- (void)changeNicknameTo: (OFString *)nickname;
-- (void)processLine: (OFString *)line;
-- (void)handleConnection;
- (nullable OFSet OF_GENERIC(OFString *) *)usersInChannel: (OFString *)channel;
@end
diff --git a/src/IRCConnection.m b/src/IRCConnection.m
index 293519f..9cc125d 100644
--- a/src/IRCConnection.m
+++ b/src/IRCConnection.m
@@ -37,6 +37,9 @@
#import "IRCConnection.h"
#import "IRCUser.h"
+@interface IRCConnection () <OFTCPSocketDelegate>
+@end
+
@implementation IRCConnection
@synthesize socketClass = _socketClass;
@synthesize server = _server, port = _port;
@@ -91,18 +94,36 @@
@throw [OFAlreadyConnectedException exception];
_socket = [[_socketClass alloc] init];
+ [_socket setDelegate: self];
+ [_socket asyncConnectToHost: _server
+ port: _port];
+
+ objc_autoreleasePoolPop(pool);
+}
+
+- (void)socket: (OF_KINDOF(OFTCPSocket *))socket
+ didConnectToHost: (OFString *)host
+ port: (uint16_t)port
+ exception: (id)exception
+{
+ if (exception != nil) {
+ if ([_delegate respondsToSelector:
+ @selector(connection:didFailToConnectWithException:)])
+ [_delegate connection: self
+ didFailToConnectWithException: exception];
+
+ return;
+ }
+
if ([_delegate respondsToSelector:
@selector(connection:didCreateSocket:)])
[_delegate connection: self
didCreateSocket: _socket];
- [_socket connectToHost: _server
- port: _port];
-
[self sendLineWithFormat: @"NICK %@", _nickname];
[self sendLineWithFormat: @"USER %@ * 0 :%@", _username, _realname];
- objc_autoreleasePoolPop(pool);
+ [socket asyncReadLine];
}
- (void)disconnect
@@ -575,50 +596,25 @@
_socket = nil;
}
-- (void)processLine: (OFString *)line
-{
- void *pool = objc_autoreleasePoolPush();
-
- [self irc_processLine: line];
-
- objc_autoreleasePoolPop(pool);
-}
-
-- (bool)irc_socket: (OFTCPSocket *)socket
- didReceiveWronglyEncodedLine: (OFString *)line
- context: (id)context
- exception: (OFException *)exception
+- (bool)stream: (OF_KINDOF(OFStream *))stream
+ didReadLine: (OFString *)line
+ exception: (OFException *)exception
{
if (line != nil) {
[self irc_processLine: line];
- [socket asyncReadLineWithTarget: self
- selector: @selector(irc_socket:
- didReceiveLine:context:
- exception:)
- context: nil];
- }
- return false;
-}
+ if (_fallbackEncodingUsed) {
+ _fallbackEncodingUsed = false;
+ [stream asyncReadLine];
+ return false;
+ }
-- (bool)irc_socket: (OFTCPSocket *)socket
- didReceiveLine: (OFString *)line
- context: (id)context
- exception: (OFException *)exception
-{
- if (line != nil) {
- [self irc_processLine: line];
return true;
}
if ([exception isKindOfClass: [OFInvalidEncodingException class]]) {
- [socket
- asyncReadLineWithEncoding: _fallbackEncoding
- target: self
- selector: @selector(irc_socket:
- didReceiveWronglyEncodedLine:
- context:exception:)
- context: nil];
+ _fallbackEncodingUsed = true;
+ [stream asyncReadLineWithEncoding: _fallbackEncoding];
return false;
}
@@ -635,14 +631,6 @@
return false;
}
-- (void)handleConnection
-{
- [_socket asyncReadLineWithTarget: self
- selector: @selector(irc_socket:didReceiveLine:
- context:exception:)
- context: nil];
-}
-
- (OFSet OF_GENERIC(OFString *) *)usersInChannel: (OFString *)channel
{
return [[[_channels objectForKey: channel] copy] autorelease];
diff --git a/tests/tests.m b/tests/tests.m
index 51a2ee4..4e855fa 100644
--- a/tests/tests.m
+++ b/tests/tests.m
@@ -44,7 +44,6 @@ OF_APPLICATION_DELEGATE(TestApp)
[connection setDelegate: self];
[connection connect];
- [connection handleConnection];
}
- (void)connection: (IRCConnection*)connection
@@ -64,6 +63,14 @@ OF_APPLICATION_DELEGATE(TestApp)
[connection joinChannel: @"#objfw"];
}
+- (void)connection: (IRCConnection *)connection
+ didFailToConnectWithException: (id)exception
+{
+ [of_stderr writeFormat: @"Failed to connect: %@\n", exception];
+
+ [OFApplication terminateWithStatus: 1];
+}
+
- (void)connection: (IRCConnection*)connection
didSeeUser: (IRCUser*)user
joinChannel: (OFString*)channel