我想在我的项目中使用SignalR,我对swift中使用signalR一无所知,我安装了SwiftR pod,但我不知道如何调用webService方法,将参数传递给webService从webService获取JSON结果,我有简单的代码连接到webService并开始连接,但一切都是错误的,连接不成功。 这是网址:http://s.ne *** y.ir/ 这是应该调用的方法: Authentication_Code_Request(字符串Mobile,byte方法) 方法是10或20 我应该得到这样的答复: 信息 Method Code Sender
有我的代码:
var autHub: Hub!
var connection: SignalR!
//var name: String!
@IBAction func sendRequest(_ sender: Any) {
connection = SignalR("http://s.ne***y.ir/")
connection.signalRVersion = .v2_2_0
print(connection.baseUrl)
var methodString: String?
methodString = "10"
chatHub = Hub("autHub")
chatHub.on("Authentication_Code_Request") { [weak self] args in
if let mobile = args?[0] as? String, let method = args?[1] as? String, let mobiletext = self?.chatTextView.text, let mehodText = methodString {
print(method)
print(mobiletext)
print(mehodText)
print(mobile)
}
}
connection.addHub(chatHub)
connection.starting = { [weak self] in
self?.button.tintColor = #colorLiteral(red: 0.2745098174, green: 0.4862745106, blue: 0.1411764771, alpha: 1)
}
}
答案 0 :(得分:2)
这是使用Bridging-Header
在Swift中使用的SignalR目标C.首先,安装Pods
pod' SignalR-ObjC'
=============================================== ======
添加Objective C类名称SignalRClassViewController.h和SignalRClassViewController.m
=============================================== ======== SignalRClassViewController.h
#import <UIKit/UIKit.h>
#import <SignalR_ObjC/SRClientTransportInterface.h>
#import <SignalR_ObjC/SRHubProxy.h>
#import <SignalR_ObjC/SRHubConnection.h>
#import <SignalR_ObjC/SRConnection.h>
#import <SignalR_ObjC/SRHubConnectionInterface.h>
@interface SignalRClassViewController : UIViewController<SRConnectionDelegate, SRHubConnectionInterface, SRClientTransportInterface>
// This method is used to have Single Instance. In the whole app, Life cycle makes sure you are using only one Instance of SignalR Class because of it one to one connection so we need listeners which continue to listen each time.
+(SignalRClassViewController *)getInstance;
-(void)SignalRConnection;
-(void)SignalRStopCoonection;
// Write your Own Methods
-(void)assignUser;
-(void)GetWebActiveClients;
@end
=============================================== ======== SignalRClassViewController.m
#import "SignalRClassViewController.h"
@interface SignalRClassViewController ()
{
NSMutableArray *array ;
}
@end
static SRHubProxy *chat = nil;
static SRHubConnection *hubConnection = nil;
@implementation SignalRClassViewController
static SignalRClassViewController *instance = nil;
+(SignalRClassViewController *)getInstance
{
@synchronized(self)
{
if(instance==nil)
{
instance= [SignalRClassViewController new];
[instance iniHUB];
}else{
[instance iniHUB];
}
}
return instance;
}
-(void) iniHUB{
if(hubConnection == nil){
NSDictionary *parameters;
parameters = @{ @"UserId": @"121",
@"UserToken": @"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJNeUhhc2giOiIyYzg5ODVmZC1jZDkyLTRjNzItOWNmYi01MWIyMWY1Y2FjZGQiLCIyYzg5ODVmZC1jZDkyLTRjNzItOWNmYi01MWIyMWY1Y2FjZGQiOjEyMX0.bDnuuroAmXvh-kifWN5jpJaSJVnMipuMD4QXon2lB-w"
};
hubConnection = [SRHubConnection connectionWithURLString:@"http://web.abc.......xyz.it" queryString:parameters];
// parameters if you want to authenticate connection
else use hubConnection = [SRHubConnection connectionWithURLString:@"http://web.abc.......xyz.it"];
[hubConnection setDelegate:self];
chat = [hubConnection createHubProxy:@"yourHubName"];
// Add event for which you want to active your listener when server trigger it
[chat on:@"ResponseAssignUserDevice" perform:self selector:@selector(responseAssignUserDevice:)];
[chat on:@"GetWebActiveClients" perform:self selector:@selector(ResponseGetWebActiveClients:)];
[hubConnection start];
// Start Connection
}
}
- (void)viewDidLoad {
[super viewDidLoad];
}
#pragma mark SRConnection Delegate
- (void)SRConnectionDidClose:(id<SRConnectionInterface>)connection{
NSLog(@"Connection close");
[self removeChatObserver];
[self iniHUB];
}
-(void) removeChatObserver{
if(chat!=nil){
chat=nil;
hubConnection=nil;
}
}
- (void)SRConnectionDidSlow:(id<SRConnectionInterface>)connection{
NSLog(@"Reconnect Slow");
}
- (void)SRConnectionWillReconnect:(id<SRConnectionInterface>)connection{
NSLog(@"Reconnected");
}
-(void)SignalRStopCoonection{
// Start the connection
if(hubConnection!= nil){
[hubConnection stop];
[self removeChatObserver];
}
}
-(void)SRConnectionDidOpen:(SRHubConnection*)connection{
NSLog(@"SR Conection open");
// When Connection is open call AssignUser
[self assignUser];
}
-(void)assignUser{
NSDictionary *parameters;
parameters = @{ @"UserId": @"121",
@"DeviceType": @"Mobile",
@"WebToken" : @"NA",
@"DeviceOS" : @"iPhone",
@"BrowserName" : @"NA"
};
array = [[NSMutableArray alloc]init];
[array addObject:parameters];
[chat invoke:@"AssignUserDevice" withArgs:array];
// This will invoke AssignUserDevice which is on server and you have added it selector when server will reponse on this name responseAssignUserDevice
}
- (void)responseAssignUserDevice:(NSString *)message {
// Print the message when it comes in
NSLog(@"SR msg %@",message);
}
-(void)GetWebActiveClients{
array = [[NSMutableArray alloc]init];
[array addObject:[NSString stringWithFormat:@"121"]];
[chat invoke:@"GetWebActiveClients" withArgs:array];
}
- (void)ResponseGetWebActiveClients:(NSString *)message
{
// Print the message when it comes in
NSLog(@"SR msg responseGetArticleByDate %@",message);
}
@end
=============================================== ======
ViewController.Swift
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
@IBAction func assignUser(_ sender: Any) {
SignalRClassViewController.getInstance().assignUser()
}
@IBAction func GetWebActiveClients(_ sender: Any) {
SignalRClassViewController.getInstance().getWebActiveClients()
}
}
请检查code here