gpt4 book ai didi

ios - 在 Swift 中调用 SignalR 方法 (SwiftR)

转载 作者:搜寻专家 更新时间:2023-11-01 07:16:47 24 4
gpt4 key购买 nike

我想在我的项目中使用 SignalR,我对在 swift 中使用 signalR 一无所知,我正在安装 SwiftR pod,但我不知道如何调用 webService 方法,将参数传递给 webService 并获取 JSON 结果来自 webService,有我的简单代码用于连接到 webService 并开始连接,但一切都错了,连接不成功。这是网址:✿ http://s.ne ***y.ir/这是应该调用的方法: Authentication_Code_Request(string Mobile, byte Method)方法是 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,使用 Bridging-Header 在 Swift 中使用

首先,安装Pod

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

关于ios - 在 Swift 中调用 SignalR 方法 (SwiftR),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41759732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com