在 Swift 中调用 SignalR 方法(SwiftR)



我想在我的项目中使用 SignalR,我对在 swift 中使用 signalR 一无所知,我正在安装 SwiftR pod,但我不知道如何调用 webService 方法,将参数传递给 webService 并从 webService 获取 JSON 结果,有我用于连接到 webService 和启动连接的简单代码,但一切都错了,连接不成功。这是网址:http://s.ne***y.ir/这是应该调用的方法: Authentication_Code_Request(字符串移动,字节方法)方法是 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)
        }
    }

这是 Swift 中使用桥接标头的 SignalR 目标 C

首先,安装 Pods

pod 'SignalR-ObjC'

====

==========================================================

添加目标 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()
    }
}

请在此处查看代码

相关内容

最新更新