         self.socket.readData(to: self.separator, withTimeout: -1, tag: 0)
     }
 
-    public func socket(_ sock: GCDAsyncSocket, didReadPartialDataOfLength partialLength: UInt, tag: Int) {
+    @objc public func socket(_ sock: GCDAsyncSocket, didReadPartialDataOfLength partialLength: UInt, tag: Int) {
         debugPrint("SOCKET: Got something")
     }
 
-    public func socket(_ sock: GCDAsyncSocket, didConnectToHost host: String, port: UInt16) {
+    @objc public func socket(_ sock: GCDAsyncSocket, didConnectToHost host: String, port: UInt16) {
         debugPrint("SOCKET: Cool, I'm connected! That was easy.");
 
         self.delegate?.socketDidConnect(client: self)
     }
 
-    public func socket(_ sock: GCDAsyncSocket, didConnectTo url: URL) {
+    @objc public func socket(_ sock: GCDAsyncSocket, didConnectTo url: URL) {
         debugPrint("SOCKET: Cool, I'm connected! That was easy.");
     }
 
-    public func socketDidDisconnect(_ sock: GCDAsyncSocket, withError err: Error?) {
+    @objc public func socketDidDisconnect(_ sock: GCDAsyncSocket, withError err: Error?) {
         debugPrint("SOCKET: Disconnected me: \(String(describing: err?.localizedDescription))");
 
         self.parseManager.reset()


    // MARK: CocaAsyncSocket Callbacks

    public func socket(_ sock: GCDAsyncSocket, didRead data: Data, withTag tag: Int) {
        guard let line: String = String(data: data, encoding: .utf8) else {
            return
        }


    // MARK: Redis functions

    @objc public func exec(command: String, completion: CompletionBlock?) {
        let components = command.components(separatedBy: [" "])

        self.exec(args: components, completion: completion)
    }

    @objc public func exec(args: Array<String>, completion: CompletionBlock?) {
        var commandArray = Array<String>()

        commandArray.append("*\(args.count)\r\n")
