Skip to content

Commit

Permalink
Kitura/Kitura#33 Add support to build binary and text messages from f…
Browse files Browse the repository at this point in the history
…rames, echoed back for now.
  • Loading branch information
shmuelk committed Nov 2, 2016
1 parent c24b926 commit 568a877
Showing 1 changed file with 48 additions and 3 deletions.
51 changes: 48 additions & 3 deletions Sources/KituraWebSocket/WebSocketClient.swift
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,14 @@ public class WebSocketClient {

private var writeLock = DispatchSemaphore(value: 1)

private let message = NSMutableData()

enum MessageStates {
case binary, text, unknown
}

private var messageState: MessageStates = .unknown

init() {
buffer = NSMutableData(capacity: WebSocketClient.bufferSize) ?? NSMutableData()
}
Expand All @@ -41,13 +49,38 @@ public class WebSocketClient {

switch frame.opCode {
case .binary:
break
guard messageState == .unknown else {
// Need error handling: send close
return
}

if frame.finalFrame {
sendMessage(withOpCode: .binary, payload: frame.payload)
}
else {
messageState = .binary
message.length = 0
message.append(frame.payload.bytes, length: frame.payload.length)
}

case .close:
break

case .continuation:
break
guard messageState != .unknown else {
// Need error handling: send close
return
}

message.append(frame.payload.bytes, length: frame.payload.length)

if frame.finalFrame {
if messageState == .binary {
sendMessage(withOpCode: .binary, payload: message)
} else {
sendMessage(withOpCode: .text, payload: message)
}
}

case .ping:
sendMessage(withOpCode: .pong, payload: frame.payload)
Expand All @@ -56,7 +89,19 @@ public class WebSocketClient {
break

case .text:
break
guard messageState == .unknown else {
// Need error handling: send close
return
}

if frame.finalFrame {
sendMessage(withOpCode: .text, payload: frame.payload)
}
else {
messageState = .text
message.length = 0
message.append(frame.payload.bytes, length: frame.payload.length)
}

case .unknown:
break
Expand Down

0 comments on commit 568a877

Please sign in to comment.