1.SocketIOHandler.h
#import <Foundation/Foundation.h>
@interface SocketIOHandler : NSObject
+(SocketIOHandler*)shareInstance;
- (void)connect;
- (void)disconnect;
- (NSUUID * _Nonnull)on:(NSString * _Nonnull)event callback:(void (^ _Nonnull)(NSArray * _Nonnull data))callback;
- (void)emitWithAck:(NSString * _Nonnull)event with:(NSArray * _Nonnull)items callback:(void (^ _Nonnull)(NSArray * _Nonnull data))callback;
- (void)removeAllHandlers;
@property(nonatomic,assign)BOOL isNotConnected;
@property(nonatomic,assign)BOOL isDisConnected;
@end
2.SocketIOHandler.m
#import "SocketIOHandler.h"
#import "Bitasset-Swift.h"
@interface SocketIOHandler()
{
SocketIOClient* socket;//socket
}
@end
@implementation SocketIOHandler
+ (SocketIOHandler *)shareInstance{
static SocketIOHandler * userModel = nil ;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
if (userModel == nil) {
NSURL *url = [[NSURL alloc]initWithString:@"https://tws.bitasset.cc:7004"];
userModel = [[SocketIOHandler alloc]initWithSocketURL:url config:@{@"log":@"YES"}];
}
});
return userModel;
}
- (nonnull instancetype)initWithSocketURL:(NSURL * _Nonnull)socketURL config:(NSDictionary * _Nullable)config{
self = [super init];
if (self) {
socket = [[SocketIOClient alloc] initWithSocketURL:socketURL config:config];
}
return self;
}
/**
Connect to the server.
*/
- (void)connect{
[socket connect];
}
/**
Disconnects the socket.
*/
- (void)disconnect{
[socket disconnect];
}
- (NSUUID * _Nonnull)on:(NSString * _Nonnull)event callback:(void (^)(NSArray * data))callback{
return [socket on:event callback:^(NSArray* data , SocketAckEmitter* ack) {
callback(data);
}];
}
- (void)emitWithAck:(NSString * _Nonnull)event with:(NSArray * _Nonnull)items callback:(void (^ _Nonnull)(NSArray * _Nonnull data))callback{
[[socket emitWithAck:event with:items] timingOutAfter:0 callback:callback];
}
- (void)removeAllHandlers{
[socket removeAllHandlers];
}
- (void)dealloc{
[socket removeAllHandlers];
[socket disconnect];
socket = nil;
}
- (BOOL)isDisConnected{
return socket.status == SocketIOClientStatusDisconnected;
}
- (BOOL)isNotConnected{
return socket.status == SocketIOClientStatusNotConnected;
}
@end
3.Bitasset-Bridging-Header.h 桥接文件
//
// Use this file to import your target‘s public headers that you would like to expose to Swift.
//
4.使用
-(void)getSocketData
{
self.socketHandler = [SocketIOHandler shareInstance];
[self.socketHandler on:@"connect" callback:^(id _Nonnull data) {
NSLog(@"----connected----");
NSString *symbol = [NSString stringWithFormat:@"%ld",(long)self.contractId];
[self.socketHandler emitWithAck:@"addQuery" with:@[@{@"symbol":symbol, @"depth":@"1", @"num":@"20"}] callback:^(NSArray * _Nonnull data) {
}];
}];
[self.socketHandler on:@"querySnapshot" callback:^(NSArray * _Nonnull data) {
NSDictionary *dict = data.firstObject[@"result"];
self.rightArray = [dict objectForKey:@"asks"];
self.leftArray = [dict objectForKey:@"bids"];
[self.tableView reloadData];
}];
[self.socketHandler connect];
}
5.socket.io-client-swift下载Github
6.参考解释说明——使用socketIO实现长连接
---------------------
作者:英雄有梦
来源:CSDN
原文:https://blog.csdn.net/wzc10101415/article/details/82180324
版权声明:本文为博主原创文章,转载请附上博文链接!
原文:https://www.cnblogs.com/fakeCoder/p/10505234.html