WebSocket reconnect. Casting issues.

pull/1/head
Frederic Jacobs 11 years ago
parent 1e3dd3d946
commit bf9084a7c8

@ -45,7 +45,6 @@ typedef void(^ABReloadRequestCompletionBlock)(NSArray *contacts);
- (NSArray*)textSecureContacts; - (NSArray*)textSecureContacts;
- (BOOL)isContactRegisteredWithRedPhone:(Contact*)contact; - (BOOL)isContactRegisteredWithRedPhone:(Contact*)contact;
- (BOOL)isContactRegisteredWithTextSecure:(Contact*)contact;
-(void)doAfterEnvironmentInitSetup; -(void)doAfterEnvironmentInitSetup;

@ -29,5 +29,8 @@
return self.attachements?(self.attachements.count>0):false; return self.attachements?(self.attachements.count>0):false;
} }
- (NSString *)description{
return self.body;
}
@end @end

@ -91,7 +91,7 @@
@synchronized(self){ @synchronized(self){
TSStorageManager *storageManager = [TSStorageManager sharedManager]; TSStorageManager *storageManager = [TSStorageManager sharedManager];
NSString *recipientId = secureMessage.source; NSString *recipientId = secureMessage.source;
int deviceId = secureMessage.sourceDevice; int deviceId = (int) secureMessage.sourceDevice;
if (![storageManager containsSession:recipientId deviceId:deviceId]) { if (![storageManager containsSession:recipientId deviceId:deviceId]) {
// Deal with failure // Deal with failure
@ -127,7 +127,7 @@
@synchronized(self){ @synchronized(self){
TSStorageManager *storageManager = [TSStorageManager sharedManager]; TSStorageManager *storageManager = [TSStorageManager sharedManager];
NSString *recipientId = preKeyMessage.source; NSString *recipientId = preKeyMessage.source;
int deviceId = preKeyMessage.sourceDevice; int deviceId = (int)preKeyMessage.sourceDevice;
PushMessageContent *content; PushMessageContent *content;

@ -20,13 +20,16 @@
#import "IncomingPushMessageSignal.pb.h" #import "IncomingPushMessageSignal.pb.h"
#define kWebSocketHeartBeat 15 #define kWebSocketHeartBeat 15
#define kWebSocketReconnectTry 5
NSString * const SocketOpenedNotification = @"SocketOpenedNotification"; NSString * const SocketOpenedNotification = @"SocketOpenedNotification";
NSString * const SocketClosedNotification = @"SocketClosedNotification"; NSString * const SocketClosedNotification = @"SocketClosedNotification";
NSString * const SocketConnectingNotification = @"SocketConnectingNotification"; NSString * const SocketConnectingNotification = @"SocketConnectingNotification";
@interface TSSocketManager () @interface TSSocketManager ()
@property (nonatomic, retain) NSTimer *timer; @property (nonatomic, retain) NSTimer *pingTimer;
@property (nonatomic, retain) NSTimer *reconnectTimer;
@property (nonatomic, retain) SRWebSocket *websocket; @property (nonatomic, retain) SRWebSocket *websocket;
@property (nonatomic) NSUInteger status; @property (nonatomic) NSUInteger status;
@end @end
@ -94,14 +97,18 @@ NSString * const SocketConnectingNotification = @"SocketConnectingNotification";
#pragma mark - Delegate methods #pragma mark - Delegate methods
- (void) webSocketDidOpen:(SRWebSocket *)webSocket { - (void) webSocketDidOpen:(SRWebSocket *)webSocket {
self.timer = [NSTimer scheduledTimerWithTimeInterval:kWebSocketHeartBeat target:self selector:@selector(webSocketHeartBeat) userInfo:nil repeats:YES]; self.pingTimer = [NSTimer scheduledTimerWithTimeInterval:kWebSocketHeartBeat target:self selector:@selector(webSocketHeartBeat) userInfo:nil repeats:YES];
self.status = kSocketStatusOpen; self.status = kSocketStatusOpen;
[self.reconnectTimer invalidate];
self.reconnectTimer = nil;
} }
- (void) webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error { - (void) webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error {
DDLogError(@"Error connecting to socket %@", error); DDLogError(@"Error connecting to socket %@", error);
[self.timer invalidate]; [self.pingTimer invalidate];
self.status = kSocketStatusClosed; self.status = kSocketStatusClosed;
[self scheduleRetry];
} }
- (void) webSocket:(SRWebSocket *)webSocket didReceiveMessage:(NSData*)data { - (void) webSocket:(SRWebSocket *)webSocket didReceiveMessage:(NSData*)data {
@ -161,8 +168,9 @@ NSString * const SocketConnectingNotification = @"SocketConnectingNotification";
- (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean { - (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean {
DDLogVerbose(@"WebSocket did close"); DDLogVerbose(@"WebSocket did close");
[self.timer invalidate]; [self.pingTimer invalidate];
self.status = kSocketStatusClosed; self.status = kSocketStatusClosed;
[self scheduleRetry];
} }
- (void)webSocketHeartBeat { - (void)webSocketHeartBeat {
@ -173,6 +181,12 @@ NSString * const SocketConnectingNotification = @"SocketConnectingNotification";
return [NSString stringWithFormat:@"?login=%@&password=%@", [[TSAccountManager registeredNumber] stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"],[TSStorageManager serverAuthToken]]; return [NSString stringWithFormat:@"?login=%@&password=%@", [[TSAccountManager registeredNumber] stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"],[TSStorageManager serverAuthToken]];
} }
- (void)scheduleRetry{
if (!self.reconnectTimer || ![self.reconnectTimer isValid]) {
self.reconnectTimer = [NSTimer scheduledTimerWithTimeInterval:kWebSocketReconnectTry target:[self class] selector:@selector(becomeActive) userInfo:nil repeats:YES];
}
}
#pragma mark UI Delegates #pragma mark UI Delegates
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {

@ -12,7 +12,7 @@
@implementation NSDate (millisecondTimeStamp) @implementation NSDate (millisecondTimeStamp)
+ (uint64_t)ows_millisecondTimeStamp{ + (uint64_t)ows_millisecondTimeStamp{
uint64_t milliseconds = std::chrono::system_clock::now().time_since_epoch()/std::chrono::milliseconds(1); uint64_t milliseconds = (uint64_t) (std::chrono::system_clock::now().time_since_epoch()/std::chrono::milliseconds(1));
return milliseconds; return milliseconds;
} }

@ -172,12 +172,12 @@ typedef enum : NSUInteger {
- (id<JSQMessageData>)collectionView:(JSQMessagesCollectionView *)collectionView messageDataForItemAtIndexPath:(NSIndexPath *)indexPath - (id<JSQMessageData>)collectionView:(JSQMessagesCollectionView *)collectionView messageDataForItemAtIndexPath:(NSIndexPath *)indexPath
{ {
return [TSMessageAdapter messageViewDataWithInteraction:[self messageAtIndexPath:indexPath] inThread:_thread]; return [self messageAtIndexPath:indexPath];
} }
- (id<JSQMessageBubbleImageDataSource>)collectionView:(JSQMessagesCollectionView *)collectionView messageBubbleImageDataForItemAtIndexPath:(NSIndexPath *)indexPath - (id<JSQMessageBubbleImageDataSource>)collectionView:(JSQMessagesCollectionView *)collectionView messageBubbleImageDataForItemAtIndexPath:(NSIndexPath *)indexPath
{ {
id<JSQMessageData> message = [TSMessageAdapter messageViewDataWithInteraction:[self messageAtIndexPath:indexPath] inThread:_thread]; id<JSQMessageData> message = [self messageAtIndexPath:indexPath];
if ([message.senderId isEqualToString:self.senderId]) { if ([message.senderId isEqualToString:self.senderId]) {
return self.outgoingBubbleImageData; return self.outgoingBubbleImageData;
@ -198,7 +198,7 @@ typedef enum : NSUInteger {
/** /**
* Override point for customizing cells * Override point for customizing cells
*/ */
id<JSQMessageData> msg = [TSMessageAdapter messageViewDataWithInteraction:[self messageAtIndexPath:indexPath] inThread:_thread]; id<JSQMessageData> msg = [self messageAtIndexPath:indexPath];
JSQMessagesCollectionViewCell *cell = (JSQMessagesCollectionViewCell *)[super collectionView:collectionView cellForItemAtIndexPath:indexPath]; JSQMessagesCollectionViewCell *cell = (JSQMessagesCollectionViewCell *)[super collectionView:collectionView cellForItemAtIndexPath:indexPath];
@ -247,8 +247,8 @@ typedef enum : NSUInteger {
showDate = YES; showDate = YES;
} }
else { else {
TSInteraction *currentMessage = [self messageAtIndexPath:indexPath]; TSMessageAdapter *currentMessage = [self messageAtIndexPath:indexPath];
TSInteraction *previousMessage = [self messageAtIndexPath:[NSIndexPath indexPathForItem:indexPath.row-1 inSection:indexPath.section]]; TSMessageAdapter *previousMessage = [self messageAtIndexPath:[NSIndexPath indexPathForItem:indexPath.row-1 inSection:indexPath.section]];
NSTimeInterval timeDifference = [currentMessage.date timeIntervalSinceDate:previousMessage.date]; NSTimeInterval timeDifference = [currentMessage.date timeIntervalSinceDate:previousMessage.date];
if (timeDifference > kTSMessageSentDateShowTimeInterval) { if (timeDifference > kTSMessageSentDateShowTimeInterval) {
@ -433,7 +433,7 @@ typedef enum : NSUInteger {
return numberOfMessages; return numberOfMessages;
} }
- (TSInteraction*)messageAtIndexPath:(NSIndexPath *)indexPath - (TSMessageAdapter*)messageAtIndexPath:(NSIndexPath *)indexPath
{ {
__block TSInteraction *message = nil; __block TSInteraction *message = nil;
[self.uiDatabaseConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) { [self.uiDatabaseConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
@ -450,7 +450,7 @@ typedef enum : NSUInteger {
message = [viewTransaction objectAtRow:row inSection:section withMappings:self.messageMappings]; message = [viewTransaction objectAtRow:row inSection:section withMappings:self.messageMappings];
NSParameterAssert(message != nil); NSParameterAssert(message != nil);
}]; }];
return message; return [TSMessageAdapter messageViewDataWithInteraction:message inThread:self.thread];
} }
#pragma mark Accessory View #pragma mark Accessory View

@ -10,4 +10,6 @@
@interface SettingsTableViewController : UITableViewController @interface SettingsTableViewController : UITableViewController
@property IBOutlet UILabel *registeredNumber;
@end @end

@ -10,6 +10,8 @@
#import "DJWActionSheet.h" #import "DJWActionSheet.h"
#import "SettingsTableViewCell.h" #import "SettingsTableViewCell.h"
#import "TSAccountManager.h"
#define kProfileCellHeight 87.0f #define kProfileCellHeight 87.0f
#define kStandardCellHeight 60.0f #define kStandardCellHeight 60.0f
@ -38,7 +40,7 @@ typedef enum {
- (void)viewDidLoad { - (void)viewDidLoad {
[super viewDidLoad]; [super viewDidLoad];
self.tableView.tableFooterView = [[UIView alloc]initWithFrame:CGRectZero]; self.registeredNumber.text = [TSAccountManager registeredNumber];
} }
- (void)didReceiveMemoryWarning { - (void)didReceiveMemoryWarning {

Loading…
Cancel
Save