It not able to connect web socket.
hukusuke1007 opened this issue · 8 comments
I have a problem.
It not able to connect web socket.
■Source code.
let baseURL = "http://alice2.nem.ninja:7890"
print("URL : (baseURL)")
let url = NSURL(string: baseURL)!
StompClientLib().openSocketWithURLRequest(request: NSURLRequest(url: url as URL) , delegate: self)
■Result
URL : http://alice2.nem.ninja:7890
2018-01-19 02:07:04.566143+0900 TestNem[35284:6662686] [MC] Lazy loading NSBundle MobileCoreServices.framework
2018-01-19 02:07:04.568846+0900 TestNem[35284:6662686] [MC] Loaded MobileCoreServices.framework
didFailWithError: Optional(Error Domain=SRWebSocketErrorDomain Code=2132 "received bad response code from server 404" UserInfo={NSLocalizedDescription=received bad response code from server 404, HTTPResponseStatusCode=404})
Error : Optional("received bad response code from server 404")
2018-01-19 02:08:05.167697+0900 TestNem[35284:6666614] [BoringSSL] Function boringssl_session_errorlog: line 2871 [boringssl_session_read] SSL_ERROR_ZERO_RETURN(6): operation failed because the connection was cleanly shut down with a close_notify alert
2018-01-19 02:08:05.168153+0900 TestNem[35284:6666614] [BoringSSL] Function boringssl_session_errorlog: line 2871 [boringssl_session_read] SSL_ERROR_ZERO_RETURN(6): operation failed because the connection was cleanly shut down with a close_notify alert
Is it need to set other parameter??
I want your advice.
Best regards.
Hello @hukusuke1007 ,
Are you sure about your server socket using the stomp??
@WrathChaos
Yes.
I heard that "http://alice2.nem.ninja:7890" is supported STOMP web socket.
→ I changed it to "http://alice2.nem.ninja:7778/w/messages/websocket". It's correct from this material(https://rb2nem.github.io/nem-dev-guide/07-monitoring-blockchain/).
But it not called override method.
・Additional infomation.
I implemented it as follows.
It not occur 404 error. But it not called override method(stompClientDidConnect).
And i tried it in both iOS simulator and real machine.
Is the usage of the your library correct?
import UIKit
import StompClientLib
class ViewController: UIViewController, StompClientLibDelegate {
struct mySecretInfo {
let adress:String = "NCH5JDPEAKA3CKQBSEPE4VIH53FQO4AU55XTVRPY"
}
override func viewDidLoad() {
super.viewDidLoad()
RegisterSocket()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
public func RegisterSocket() {
let baseURL = "http://alice2.nem.ninja:7778/w/messages/websocket"
let completedWSURL = baseURL
print("URL : \(completedWSURL)")
let url = NSURL(string: completedWSURL)!
let socketClient = StompClientLib()
socketClient.openSocketWithURLRequest(request: NSURLRequest(url: url as URL) , delegate: self)
}
// ■ MARK: delegate.
func stompClientDidConnect(client: StompClientLib!) {
let info = mySecretInfo()
// ■ Subscribe.
let topic = "/account/mosaic/owned/" + info.adress
print("Socket is Connected : \(topic)")
client.subscribe(destination: topic)
// ■ Send.
let sendData = "{'account':'\(info.adress)'}"
let sendTopic = "/w/api/account/mosaic/owned"
client.sendJSONForDict(dict: sendData as AnyObject, toDestination: sendTopic)
}
func stompClientDidDisconnect(client: StompClientLib!) {
print("Socket is Disconnected")
}
func stompClientWillDisconnect(client: StompClientLib!, withError error: NSError) {
print("Socket is Disconnected error \(error)")
}
func stompClient(client: StompClientLib!, didReceiveMessageWithJSONBody jsonBody: AnyObject?, withHeader header: [String : String]?, withDestination destination: String) {
print("DESTIONATION : \(destination)")
print("JSON BODY : \(String(describing: jsonBody))")
}
func stompClientJSONBody(client: StompClientLib!, didReceiveMessageWithJSONBody jsonBody: String?, withHeader header: [String : String]?, withDestination destination: String) {
print("DESTIONATION : \(destination)")
print("String JSON BODY : \(String(describing: jsonBody))")
}
func serverDidSendReceipt(client: StompClientLib!, withReceiptId receiptId: String) {
print("Receipt : \(receiptId)")
}
func serverDidSendError(client: StompClientLib!, withErrorMessage description: String, detailedErrorMessage message: String?) {
print("Error : \(String(describing: message))")
}
func serverDidSendPing() {
print("Server Ping")
}
}
■Log.
URL : http://alice2.nem.ninja:7778/w/messages/websocket
2018-01-20 12:34:23.070525+0900 TestNem[6505:815958] [MC] Lazy loading NSBundle MobileCoreServices.framework
2018-01-20 12:34:23.071388+0900 TestNem[6505:815958] [MC] Loaded MobileCoreServices.framework
@hukusuke1007 Okey, I will try to get data from your socket. Do I need any other information to connect your socket url?
@hukusuke1007 Hello again,
I've tried your url on the example and it works perfectly. Please delete
let wsURL = baseURL.prefix(7)
let completedWSURL = "ws://\(wsURL)gateway/websocket"
print("Completed WS URL : \(completedWSURL)")
These lines on the example and try it :)
Give me a feedback please
Have fun !
@WrathChaos I'm sorry for late.
It successful to connect when I implemented a following source code.
But no response when call SEND message(sendJSONForDict(dict: sendData as AnyObject, toDestination: sendTopic).
import UIKit
import StompClientLib
class ViewController: UIViewController, StompClientLibDelegate {
private var socketClient_:StompClientLib!
override func viewDidLoad() {
super.viewDidLoad()
//getXemByJpyFromZaif_()
socketClient_ = StompClientLib()
RegisterSocket()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
public func RegisterSocket() {
let baseURL = "http://alice2.nem.ninja:7778/w/messages/websocket"
let completedWSURL = baseURL
print("URL : \(completedWSURL)")
let url = NSURL(string: completedWSURL)!
socketClient_.openSocketWithURLRequest(request: NSURLRequest(url: url as URL) , delegate: self)
}
// ■ MARK: delegate.
func stompClientDidConnect(client: StompClientLib!) {
let info = mySecretInfo()
// ■ Subscribe.
let topic = "/blocks/new" // OK
let header = ["id":"0"]
print("Subscrib : \(topic)")
client.subscribeWithHeader(destination: topic, withHeader: header)
// ■ Send.
let sendTopic = "/w/api/account/mosaic/owned/"
let sendData = ["account":"NCH5JDPEAKA3CKQBSEPE4VIH53FQO4AU55XTVRPY"]
print("Send topic : \(sendTopic)")
client.sendJSONForDict(dict: sendData as AnyObject, toDestination: sendTopic)
}
func stompClientDidDisconnect(client: StompClientLib!) {
print("Socket is Disconnected")
RegisterSocket()
}
func stompClientWillDisconnect(client: StompClientLib!, withError error: NSError) {
print("Socket is Disconnected error \(error)")
}
func stompClient(client: StompClientLib!, didReceiveMessageWithJSONBody jsonBody: AnyObject?, withHeader header: [String : String]?, withDestination destination: String) {
if let data = header {
data.forEach {print("\($0.0):\($0.1)") }
}
print("DESTIONATION : \(destination)")
print("JSON BODY : \(String(describing: jsonBody))")
}
func stompClientJSONBody(client: StompClientLib!, didReceiveMessageWithJSONBody jsonBody: String?, withHeader header: [String : String]?, withDestination destination: String) {
print("stompClientJSONBody")
//print("DESTIONATION : \(destination)")
//print("String JSON BODY : \(String(describing: jsonBody))")
}
func serverDidSendReceipt(client: StompClientLib!, withReceiptId receiptId: String) {
print("Receipt : \(receiptId)")
}
func serverDidSendError(client: StompClientLib!, withErrorMessage description: String, detailedErrorMessage message: String?) {
print("Error : \(description) \(String(describing: message))")
}
func serverDidSendPing() {
print("Server Ping")
}
}
@hukusuke1007 Sorry for very late response, had a tough week.
I tried to subscribe your topic but it is failed.. Can you please check that your topic string is valid or not.
Have fun :)
@hukusuke1007 Could you solve your issue?
@WrathChaos Sorry for very late response.
OK. I check my topic.
Thank you for your advice.