Swiftpack.co - Package - WrathChaos/StompClientLib

StompClientLib

License platform Cocoapods

Swift 5.0 Swift 4.2 Swift 3.0 Pod Version Issues

Introduction

StompClientLib is a stomp client in Swift. It uses Facebook's SocketRocket as a websocket dependency. SocketRocket is written in Objective-C but StompClientLib's STOMP part is written in Swift and its usage is Swift. You can use this library in your Swift 5+, 4+ and 3+ projects.

This is original a fork from AKStompClient (This library is not working right now)

Example

To run the example project, clone the repo, and run pod install from the Example directory first.

Requirements

  • iOS 8.0+
  • XCode 8.1, 8.2, 8.3
  • XCode 9.0+
  • XCode 10.0 +
  • XCode 12.1 +
  • Swift 3.0, 3.1, 3.2
  • Swift 4.0, Swift 4.1, Swift 4.2, Swift 5.0

Installation

StompClientLib is available through CocoaPods. To install it, simply add the following line to your Podfile:

Cocoapods

pod "StompClientLib"

Carthage

github "WrathChaos/StompClientLib"

Usage

import StompClientLib

Once imported, you can open a connection to your WebSocket server.

var socketClient = StompClientLib()
let url = NSURL(string: "your-socket-url-is-here")!
socketClient.openSocketWithURLRequest(request: NSURLRequest(url: url as URL) , delegate: self)

After you are connected, there are some delegate methods that you need to implement.

StompClientLibDelegate

stompClientDidConnect

func stompClientDidConnect(client: StompClientLib!) {
print("Socket is connected")
// Stomp subscribe will be here!
socketClient.subscribe(destination: topic)
// Note : topic needs to be a String object
}

stompClientDidDisconnect

func stompClientDidDisconnect(client: StompClientLib!) {
print("Socket is Disconnected")
}

didReceiveMessageWithJSONBody ( Message Received via STOMP )

Your json message will be converted to JSON Body as AnyObject and you will receive your message in this function

func stompClient(client: StompClientLib!, didReceiveMessageWithJSONBody jsonBody: AnyObject?, akaStringBody stringBody: String?, withHeader header: [String : String]?, withDestination destination: String) {
print("Destination : \(destination)")
print("JSON Body : \(String(describing: jsonBody))")
print("String Body : \(stringBody ?? "nil")")
}

didReceiveMessageWithJSONBody ( Message Received via STOMP as String )

Your json message will be converted to JSON Body as AnyObject and you will receive your message in this function

func stompClientJSONBody(client: StompClientLib!, didReceiveMessageWithJSONBody jsonBody: String?, withHeader header: [String : String]?, withDestination destination: String) {
print("DESTIONATION : \(destination)")
print("String JSON BODY : \(String(describing: jsonBody))")
}

serverDidSendReceipt

If you will use STOMP for in-app purchase, you might need to use this function to get receipt

func serverDidSendReceipt(client: StompClientLib!, withReceiptId receiptId: String) {
print("Receipt : \(receiptId)")
}

serverDidSendError

Your error message will be received in this function

func serverDidSendError(client: StompClientLib!, withErrorMessage description: String, detailedErrorMessage message: String?) {
print("Error Send : \(String(describing: message))")
}

serverDidSendPing

If you need to control your server's ping, here is your part

func serverDidSendPing() {
print("Server ping")
}

How to subscribe and unsubscribe

There are functions for subscribing and unsubscribing. Note : You should handle your subscribe and unsubscibe methods ! Suggestion : Subscribe to your topic in "stompClientDidConnect" function and unsubcribe to your topic in stompClientWillDisconnect method.

Subscribe

socketClient.subscribe(destination: topic)
// Note : topic needs to be a String object

Unsubscribe

socketClient.unsubscribe(destination: topic)

Important : You have to send your destination for both subscribe or unsubscribe!

Unsubsribe with header

let destination = "/topic/your_topic"
let ack = destination
let id = destination
let header = ["destination": destination, "ack": ack, "id": id]

// subscribe
socketClient?.subscribeWithHeader(destination: destination, withHeader: header)

// unsubscribe
socketClient?.unsubscribe(destination: subsId)

Auto Reconnect with a given time

You can use this feature if you need to auto reconnect with a spesific time or it will just try to reconnect every second.

// Reconnect after 4 sec
socketClient.reconnect(request: NSURLRequest(url: url as URL) , delegate: self as StompClientLibDelegate, time: 4.0)

Auto Disconnect with a given time

// Auto Disconnect after 3 sec
socketClient.autoDisconnect(time: 3)

Future Enhancements

  • [x] Complete a working Example
  • [x] Add Carthage installation option
  • [ ] Add Swift Package Manager installation option
  • [x] XCode 9 compatibility
  • [x] Swift 4 compatibility and tests
  • [ ] Add Quick Testing
  • [ ] Re-write websocket full swift version instead of Facebook's SocketRocket lib

Change Log

1.3.6 (2019-08-06)

Full Changelog

Fixed bugs:

  • v1.3.4 replaced my custom header in open socket? #58

Closed issues:

  • Json error: The data couldn’t be read because it isn’t in the correct format. #60

Merged pull requests:

  • Fixed ACK id header and added new ACK type #62 (rodmytro)

1.3.5 (2019-07-25)

Full Changelog

Fixed bugs:

  • StompClientDidConnect not called on a fresh project #51

Closed issues:

  • SendJSONForDict error #57
  • Can't connect to websocket with authorization header #39

Merged pull requests:

  • #58 fix open socket with custom header issue #59 (marain87)

1.3.4 (2019-07-19)

Full Changelog

1.3.3 (2019-07-18)

Full Changelog

Closed issues:

  • Missing merge #55
  • Data garbled problem,help #41

Merged pull requests:

  • String body parameter and ':'-in-header-value fix #56 (Erhannis)

1.3.2 (2019-07-10)

Full Changelog

Implemented enhancements:

  • stompClientWillDisconnect missing #44

Merged pull requests:

  • Added 'akaStringBody' parameter to stompClient didReceiveMessage... #49 (Erhannis)

1.3.1 (2019-06-14)

Full Changelog

Closed issues:

  • Can I subscribe to multiple topics with one stomp client? #47
  • After subscribing to a topic, how to handle messages from server side? #46
  • socket?.readyState is .OPEN and it never goes to my own "stompClientDidDisconnect" method #45
  • Didconnect function cannot be callback after successful connection #43
  • Login, passcode #42
  • App goes in background lock the kepad the socket disconnected #40
  • stompClientDidConnect not called with Spring boot #35
  • Delegate StompClientDidConnect not called after connect->disconnect->connect #15

1.3.0 (2019-04-30)

Full Changelog

Implemented enhancements:

  • invalidate reconnect #36

Closed issues:

  • Should add Carthage #33
  • Invalid Sec-WebSocket-Accept response #32
  • Socket is disconnected with 1007 code as soon as it connected #31
  • enable Assert (self.readyState != SR_CONNECTING) #24

1.2.7 (2018-10-23)

Full Changelog

1.2.6 (2018-10-23)

Full Changelog

Fixed bugs:

  • Error when connected to socket #23

Closed issues:

  • Auto disconnects #11

1.2.5 (2018-10-22)

Full Changelog

Closed issues:

  • Value for "message-id" is always "1" #22
  • Multiple subscription to topics #20
  • I think there is a memory leak for the delegate #19
  • Getting error when framwork is installed in Objective c project #9

1.2.4 (2018-10-17)

Full Changelog

Closed issues:

  • didCloseWithCode 1000, reason: nil #21

1.2.3 (2018-10-17)

Full Changelog

Implemented enhancements:

  • How to receive heartbeat? #18

Closed issues:

  • Socket is not getting connected #30
  • didCloseWithCode 1002 #29
  • No response #27
  • didCloseWithCode 1001, reason: "Stream end encountered" #26
  • Stream end encountered #17
  • unsubscribe socketclient #14
  • It not able to connect web socket. #13
  • One of the delegate method is not being called. #12
  • StompClient Disconnection. #10
  • Unable to find a specification for 'StompClientLib' #8

1.2.2 (2017-11-03)

Full Changelog

1.2.1 (2017-10-31)

Full Changelog

1.2.0 (2017-10-29)

Full Changelog

Closed issues:

  • Let client decide what to do with stomp frame body #4
  • Send message support #3
  • Error when calling delegate #1

1.1.7 (2017-10-02)

Full Changelog

1.1.6 (2017-08-08)

Full Changelog

0.1.5 (2017-07-10)

Full Changelog

0.1.4 (2017-07-10)

Full Changelog

0.1.3 (2017-07-10)

Full Changelog

0.1.2 (2017-07-08)

Full Changelog

0.1.1 (2017-07-08)

Full Changelog

0.1.0 (2017-07-08)

* This Change Log was automatically generated by github_changelog_generator

CHANGELOG.md

Author

FreakyCoder, kurayogun@gmail.com

License

StompClientLib is available under the MIT license. See the LICENSE file for more info.

Github

link
Stars: 60
Help us keep the lights on

Dependencies

Used By

Total: 0

Releases

1.3.6 - Aug 6, 2019

PR Merged #62: Fixed ACK id header and added new ACK type

1.3.5 - Jul 25, 2019

PR Merged #59: Fix open socket with custom header issue

1.3.4 - Jul 19, 2019

Finally supports for Spring Boot 2.1.x :) (Yes it works this time 🔥)

1.3.3 - Jul 18, 2019

  • PR Merged #56
  • akaStringBody prop is added

1.3.2 - Jul 10, 2019

Newest Generation with new building system