      - parameter tag:  The tag identifying the data in the callback delegate method.
      - parameter maxLength: Ignored since `GCDAsyncSocket` does not support this. The max length of data to scan for the pattern.
      - warning: This should only be called after the last read is finished, i.e., `delegate?.didReadData()` is called.
-     - warning: Not implemented yet.
      */
     func readDataToData(data: NSData, withTag tag: Int, maxLength: Int) {
-
+        readTag = tag
+        scanner = StreamScanner(pattern: data, maximumLength: maxLength)
+        checkStatus()
     }
 
     private func queueCall(block: ()->()) {

     The socket will disconnect elegantly after any queued writing data are successfully sent.
     */
    func disconnect() {
        self.closeAfterWriting = true
        self.checkStatus()
    }

    /**
     Disconnect the socket immediately.
     */
    func forceDisconnect() {
        self.tsSocket.close()
    }

    /**

     - warning: This should only be called after the last read is finished, i.e., `delegate?.didReadData()` is called.
     */
    func readDataWithTag(tag: Int) {
        readTag = tag
        checkReadData()
    }

    /**
