Hallo alle als Titel Erwähnen Ich versuche, Daten von meinem Redis-Server in schneller Sprache zu senden und zu empfangen. Ich habe viel recherchiert und kann keine gute Antwort zu diesem Thema finden. Am nächsten komme ich zu NSStream
oder ein paar Github-Projekte (die meisten davon mit kaputten Code), ich habe versucht, eine Lösung dafür zu erstellen 3 Tage jetzt, bitte jemand helfen.Verbinden mit Redis-Server mit NS Stream in Swift
Verbindung Voraussetzung für Redis Port :
- TCP
- Telnet (My Favorite)
Probleme:
- AppDelegate Crash-Gewinde 1:
EXC_BAD_ACCESS(code=1, address=XXXXXXXX)
MANCHMAL - Keine Daten Rückkehr
Klasse mit Initialisierung (Redis): Die nächstgelegene ich auf ein Niveau bringen konnte, wo ich das Verfahren mit NSStream verstehen, aber auch dies ist nichts, was in meinem Dialog für die Rückkehr gedruckt wird, und ich kann nicht herausfinden, was falsch ist.
class Redis: NSObject, NSStreamDelegate {
//Intilizing Stream & Requirement
var endPoint: CFString?
var onPort: UInt32?
var inputStream: NSInputStream?
var outputStream: NSOutputStream?
Server Connection Funktion:
func serverConnection(endPoint: CFString, onPort: UInt32){
//Streams Init
let Host: CFString = endPoint
let Port: UInt32 = onPort
var readStream: Unmanaged<CFReadStream>?
var writeStream: Unmanaged<CFWriteStream>?
//Bind Streams to Host and Port
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, Host, Port, &readStream, &writeStream)
//Cast CFStream to NSStreams
inputStream = readStream!.takeRetainedValue()
outputStream = writeStream!.takeRetainedValue()
//Assign Delegate
inputStream!.delegate = self
outputStream!.delegate = self
//Schadule Run-loop
inputStream!.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)
outputStream!.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)
//Open Connection
inputStream!.open()
outputStream!.open()
}
Stream: Sobald die App Mittagessen erhalte ich eine App delegieren Fehler MANCHMAL
Gewinde 1: EXC_BAD_ACCESS (code = 1, Adresse = XXXXXXXX)
func stream(aStream: NSStream, handleEvent eventCode: NSStreamEvent) {
if aStream === inputStream {
switch eventCode {
case NSStreamEvent.ErrorOccurred:
//Print Available Errors
print("Error: \(aStream.streamError?.description)")
break
case NSStreamEvent.OpenCompleted:
//Connection Succeed
print("Connection Complete \(aStream.description)")
break
case NSStreamEvent.HasBytesAvailable:
//Server Respond
var buffer = [UInt8](count: 8, repeatedValue: 0)
while inputStream?.hasBytesAvailable != nil {
let result: Int = (inputStream?.read(&buffer, maxLength: buffer.count))!
print(result)
print(buffer)
}
break
default:
break
}
}
if aStream === outputStream {
switch eventCode {
case NSStreamEvent.ErrorOccurred:
//Print Available Errors
print("Error: \(aStream.streamError?.description)")
break
case NSStreamEvent.OpenCompleted:
//Connection Succeed
print("Connection Complete \(aStream.description)")
break
case NSStreamEvent.HasSpaceAvailable:
//Ready to Send more Dat
print("HasSpaceAvailable \(aStream.description)")
break
default:
break
}
}
}
Server-Test mit Ping: die Rückkehr PONG
func Ping(){
let Command: NSString = NSString(format: "Ping /n", String(endPoint))
let data: NSData = NSData(data: Command.dataUsingEncoding(NSUTF8StringEncoding)!)
outputStream!.write(UnsafePointer<UInt8>(data.bytes), maxLength: data.length)
}