1#import <Foundation/NSObject.h> 2#import <Foundation/NSString.h> 3 4typedef enum { 5 MVChatConnectionDisconnectedStatus = 'disC', 6 MVChatConnectionServerDisconnectedStatus = 'sdsC', 7 MVChatConnectionConnectingStatus = 'conG', 8 MVChatConnectionConnectedStatus = 'conD', 9 MVChatConnectionSuspendedStatus = 'susP' 10} MVChatConnectionStatus; 11 12typedef enum { 13 MVChatConnectionNoProxy = 'nonE', 14 MVChatConnectionHTTPProxy = 'httP', 15 MVChatConnectionHTTPSProxy = 'htpS', 16 MVChatConnectionSOCKSProxy = 'sokS' 17} MVChatConnectionProxy; 18 19typedef enum { 20 MVChatRoomNoModes = 0x0, 21 MVChatRoomPrivateMode = 0x1, 22 MVChatRoomSecretMode = 0x2, 23 MVChatRoomInviteOnlyMode = 0x4, 24 MVChatRoomModeratedMode = 0x8, 25 MVChatRoomSetTopicOperatorOnlyMode = 0x10, 26 MVChatRoomNoOutsideMessagesMode = 0x20, 27 MVChatRoomPasswordRequiredMode = 0x40, 28 MVChatRoomMemberLimitMode = 0x80 29} MVChatRoomMode; 30 31typedef enum { 32 MVChatMemberNoModes = 0x0, 33 MVChatMemberOperatorMode = 0x1, 34 MVChatMemberHalfOperatorMode = 0x2, 35 MVChatMemberVoiceMode = 0x4 36} MVChatMemberMode; 37 38typedef enum { 39 MVChatNoError, 40 MVChatConnectingError, 41 MVChatNoMatchError, 42 MVChatPacketError, 43 MVChatBadUserPasswordError, 44 MVChatSequenceError, 45 MVChatFrameTypeError, 46 MVChatPacketSizeError, 47 MVChatServerError, 48 MVChatUnknownError, 49 MVChatBlockedError, 50 MVChatWiredPacketError, 51 MVChatCallbackNumberError, 52 MVChatBadTargetError, 53 MVChatNotFoundError, 54 MVChatDisconnectError, 55 MVChatSocketError, 56 MVChatDNSError, 57 MVChatVersionError, 58 MVChatUserUnavailableError, 59 MVChatUserInfoUnavailableError, 60 MVChatTooFastError, 61 MVChatRoomUnavailableError, 62 MVChatIncomingError, 63 MVChatUserDisconnectError, 64 MVChatInvalidFormatError, 65 MVChatIdleFastError, 66 MVChatBadRoomError, 67 MVChatBadMessageError, 68 MVChatBadPrototypeError, 69 MVChatNotConnectedError, 70 MVChatBadConnectionError, 71 MVChatNoPermissionsError, 72 MVChatNoChangePasswordError, 73 MVChatDuplicateUserError, 74 MVChatDuplicateRoomError, 75 MVChatIOError, 76 MVChatBadHandleError, 77 MVChatTimeoutError, 78 MVChatNotDoneError 79} MVChatError; 80 81@class NSTimer; 82@class NSString; 83@class NSArray; 84@class NSMutableArray; 85@class NSMutableDictionary; 86@class NSDictionary; 87@class NSAttributedString; 88@class MVUploadFileTransfer; 89@class NSAttributedString; 90@class NSMutableDictionary; 91@class NSDate; 92@class MVUploadFileTransfer; 93 94extern NSString *MVChatConnectionGotRawMessageNotification; 95 96extern NSString *MVChatConnectionWillConnectNotification; 97extern NSString *MVChatConnectionDidConnectNotification; 98extern NSString *MVChatConnectionDidNotConnectNotification; 99extern NSString *MVChatConnectionWillDisconnectNotification; 100extern NSString *MVChatConnectionDidDisconnectNotification; 101extern NSString *MVChatConnectionErrorNotification; 102 103extern NSString *MVChatConnectionNeedNicknamePasswordNotification; 104 105extern NSString *MVChatConnectionGotPrivateMessageNotification; 106 107extern NSString *MVChatConnectionBuddyIsOnlineNotification; 108extern NSString *MVChatConnectionBuddyIsOfflineNotification; 109extern NSString *MVChatConnectionBuddyIsAwayNotification; 110extern NSString *MVChatConnectionBuddyIsUnawayNotification; 111extern NSString *MVChatConnectionBuddyIsIdleNotification; 112 113extern NSString *MVChatConnectionSelfAwayStatusNotification; 114 115extern NSString *MVChatConnectionGotUserWhoisNotification; 116extern NSString *MVChatConnectionGotUserServerNotification; 117extern NSString *MVChatConnectionGotUserChannelsNotification; 118extern NSString *MVChatConnectionGotUserOperatorNotification; 119extern NSString *MVChatConnectionGotUserIdleNotification; 120extern NSString *MVChatConnectionGotUserWhoisCompleteNotification; 121 122extern NSString *MVChatConnectionGotRoomInfoNotification; 123 124extern NSString *MVChatConnectionGotJoinWhoListNotification; 125extern NSString *MVChatConnectionRoomExistingMemberListNotification; 126extern NSString *MVChatConnectionJoinedRoomNotification; 127extern NSString *MVChatConnectionLeftRoomNotification; 128extern NSString *MVChatConnectionUserJoinedRoomNotification; 129extern NSString *MVChatConnectionUserLeftRoomNotification; 130extern NSString *MVChatConnectionUserQuitNotification; 131extern NSString *MVChatConnectionUserNicknameChangedNotification; 132extern NSString *MVChatConnectionUserKickedFromRoomNotification; 133extern NSString *MVChatConnectionUserAwayStatusNotification; 134extern NSString *MVChatConnectionGotMemberModeNotification; 135extern NSString *MVChatConnectionGotRoomModeNotification; 136extern NSString *MVChatConnectionGotRoomMessageNotification; 137extern NSString *MVChatConnectionGotRoomTopicNotification; 138 139extern NSString *MVChatConnectionNewBanNotification; 140extern NSString *MVChatConnectionRemovedBanNotification; 141extern NSString *MVChatConnectionBanlistReceivedNotification; 142 143extern NSString *MVChatConnectionKickedFromRoomNotification; 144extern NSString *MVChatConnectionInvitedToRoomNotification; 145 146extern NSString *MVChatConnectionNicknameAcceptedNotification; 147extern NSString *MVChatConnectionNicknameRejectedNotification; 148 149extern NSString *MVChatConnectionSubcodeRequestNotification; 150extern NSString *MVChatConnectionSubcodeReplyNotification; 151 152#pragma mark - 153 154@interface MVChatConnection : NSObject { 155@private 156 NSTimer *_reconnectTimer; 157 NSString *_npassword; 158 NSString *_proxyUsername; 159 NSString *_proxyPassword; 160 MVChatConnectionStatus _status; 161 MVChatConnectionProxy _proxy; 162 NSStringEncoding _encoding; 163 164 void *_chatConnection /* SERVER_REC */; 165 void *_chatConnectionSettings /* SERVER_CONNECT_REC */; 166 NSMutableDictionary *_roomsCache; 167 NSDate *_lastConnectAttempt; 168 NSDate *_cachedDate; 169 NSAttributedString *_awayMessage; 170 NSArray *_alternateNicks; 171 172 BOOL _nickIdentified; 173 unsigned int _nextAltNickIndex; 174 unsigned int _sleepNotifier; /* io_object_t */ 175 unsigned int _powerConnection; /* io_connect_t */ 176} 177- (id) initWithURL:(NSURL *) url; 178- (id) initWithServer:(NSString *) server port:(unsigned short) port user:(NSString *) nickname; 179 180- (void) connect; 181- (void) connectToServer:(NSString *) server onPort:(unsigned short) port asUser:(NSString *) nickname; 182- (void) disconnect; 183- (void) disconnectWithReason:(NSAttributedString *) reason; 184 185#pragma mark - 186 187- (NSURL *) url; 188 189#pragma mark - 190 191- (void) setEncoding:(NSStringEncoding) encoding; 192- (NSStringEncoding) encoding; 193- (NSString *) stringWithEncodedBytes:(const char *) bytes; 194- (const char *) encodedBytesWithString:(NSString *) string; 195 196#pragma mark - 197 198- (void) setRealName:(NSString *) name; 199- (NSString *) realName; 200 201- (void) setNickname:(NSString *) nickname; 202- (NSString *) nickname; 203- (NSString *) preferredNickname; 204 205- (void) setAlternateNicknames:(NSArray *) nicknames; 206- (NSArray *) alternateNicknames; 207- (NSString *) nextAlternateNickname; 208 209- (void) setNicknamePassword:(NSString *) password; 210- (NSString *) nicknamePassword; 211 212- (void) setPassword:(NSString *) password; 213- (NSString *) password; 214 215- (void) setUsername:(NSString *) username; 216- (NSString *) username; 217 218- (void) setServer:(NSString *) server; 219- (NSString *) server; 220 221- (void) setServerPort:(unsigned short) port; 222- (unsigned short) serverPort; 223 224- (void) setProxyUsername:(NSString *) username; 225- (NSString *) proxyUsername; 226 227- (void) setProxyPassword:(NSString *) password; 228- (NSString *) proxyPassword; 229 230- (void) setSecure:(BOOL) ssl; 231- (BOOL) isSecure; 232 233#pragma mark - 234 235- (void) setProxyType:(MVChatConnectionProxy) type; 236- (MVChatConnectionProxy) proxyType; 237 238- (void) setProxyServer:(NSString *) address; 239- (NSString *) proxyServer; 240 241- (void) setProxyServerPort:(unsigned short) port; 242- (unsigned short) proxyServerPort; 243 244#pragma mark - 245 246- (void) sendMessage:(NSAttributedString *) message withEncoding:(NSStringEncoding) encoding toUser:(NSString *) user asAction:(BOOL) action; 247- (void) sendMessage:(NSAttributedString *) message withEncoding:(NSStringEncoding) encoding toChatRoom:(NSString *) room asAction:(BOOL) action; 248 249- (void) sendRawMessage:(NSString *) raw; 250- (void) sendRawMessage:(NSString *) raw immediately:(BOOL) now; 251- (void) sendRawMessageWithFormat:(NSString *) format, ...; 252 253- (MVUploadFileTransfer *) sendFile:(NSString *) path toUser:(NSString *) user; 254- (MVUploadFileTransfer *) sendFile:(NSString *) path toUser:(NSString *) user passively:(BOOL) passive; 255 256#pragma mark - 257 258- (void) sendSubcodeRequest:(NSString *) command toUser:(NSString *) user withArguments:(NSString *) arguments; 259- (void) sendSubcodeReply:(NSString *) command toUser:(NSString *) user withArguments:(NSString *) arguments; 260 261#pragma mark - 262 263- (void) joinChatRooms:(NSArray *) rooms; 264- (void) joinChatRoom:(NSString *) room; 265- (void) partChatRoom:(NSString *) room; 266 267#pragma mark - 268 269- (void) setTopic:(NSAttributedString *) topic withEncoding:(NSStringEncoding) encoding forRoom:(NSString *) room; 270 271- (void) promoteMember:(NSString *) member inRoom:(NSString *) room; 272- (void) demoteMember:(NSString *) member inRoom:(NSString *) room; 273- (void) halfopMember:(NSString *) member inRoom:(NSString *) room; 274- (void) dehalfopMember:(NSString *) member inRoom:(NSString *) room; 275- (void) voiceMember:(NSString *) member inRoom:(NSString *) room; 276- (void) devoiceMember:(NSString *) member inRoom:(NSString *) room; 277- (void) kickMember:(NSString *) member inRoom:(NSString *) room forReason:(NSString *) reason; 278- (void) banMember:(NSString *) member inRoom:(NSString *) room; 279- (void) unbanMember:(NSString *) member inRoom:(NSString *) room; 280 281#pragma mark - 282 283- (void) addUserToNotificationList:(NSString *) user; 284- (void) removeUserFromNotificationList:(NSString *) user; 285 286- (void) fetchInformationForUser:(NSString *) user withPriority:(BOOL) priority fromLocalServer:(BOOL) localOnly; 287 288#pragma mark - 289 290- (void) fetchRoomList; 291- (void) fetchRoomListWithRooms:(NSArray *) rooms; 292- (void) stopFetchingRoomList; 293- (NSMutableDictionary *) roomListResults; 294 295#pragma mark - 296 297- (NSAttributedString *) awayStatusMessage; 298- (void) setAwayStatusWithMessage:(NSAttributedString *) message; 299- (void) clearAwayStatus; 300 301#pragma mark - 302 303- (BOOL) isConnected; 304- (MVChatConnectionStatus) status; 305- (BOOL) waitingToReconnect; 306- (unsigned int) lag; 307@end 308 309#pragma mark - 310 311@interface MVChatConnection (MVChatConnectionScripting) 312- (NSNumber *) uniqueIdentifier; 313@end 314 315#pragma mark - 316 317@interface NSObject (MVChatPluginConnectionSupport) 318- (BOOL) processSubcodeRequest:(NSString *) command withArguments:(NSString *) arguments fromUser:(NSString *) user forConnection:(MVChatConnection *) connection; 319- (BOOL) processSubcodeReply:(NSString *) command withArguments:(NSString *) arguments fromUser:(NSString *) user forConnection:(MVChatConnection *) connection; 320 321- (void) connected:(MVChatConnection *) connection; 322- (void) disconnecting:(MVChatConnection *) connection; 323@end