在 Swift (SwiftR) 中调用 SignalR 方法

Call SignalR method in Swift (SwiftR)

我想在我的项目中使用 SignalR,我对在 swift 中使用 signalR 一无所知,我正在安装 SwiftR pod,但我不知道如何调用 webService 方法,传递参数到 webService 并从 webService 获得 JSON 结果,有我的简单代码用于连接到 webService 并开始连接,但一切都错了,连接不成功。 这是 url : ✿http://s.ne***y.ir/ 这是应该调用的方法: Authentication_Code_Request(string Mobile, byte 方法) 方法是 10 或 20 我应该得到这样的回应: 信息 方法 代码 发件人

这是我的代码:

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)
        }

    }

这是 SignalR objective C 在 Swift 中使用 Bridging-Header

首先,安装Pods

连播 '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