Skip to main content

Streaming messages

Streaming messages are generated by the server and delivered incrementally to the client SDK. The client receives a streaming message notification, then pulls the full content in chunks.

NCStreamMessage properties

PropertyTypeDescription
contentNSStringStreaming message content
typeNSStringText format
isCompleteBOOLWhether content generation is complete
completeReasonNSIntegerAbnormal termination reason (from app server)
stopReasonNSIntegerTermination reason (from IM server, 0 = normal)
syncBOOLWhether the client has finished pulling
referenceInfoNCStreamReferenceInfo *Reference information for the streaming message
tip
  • The SDK cannot send streaming messages — they are server-initiated only.
  • After receiving a streaming message, call requestStreamMessage (Objective-C: requestStreamMessageWithCompletion:) to pull the full content.

Receive streaming messages

Register an NCMessageHandler and implement onMessageReceived: to detect incoming streaming messages:

swift
import NexconnChatSDK
final class MyMessageHandler: NSObject, MessageHandler {
func onMessageReceived(_ event: MessageReceivedEvent) {
guard let message = event.message else { return }
if let streamContent = message.content as? StreamMessage, !streamContent.sync {
// Streaming message received — start pulling content
pullStreamingContent(message)
}
}
}

let handler = MyMessageHandler()
NCEngine.addMessageHandler(identifier: "YourKey", handler: handler)

Pull streaming message content

Implement streaming event callbacks

The NCMessageHandler protocol provides three methods for streaming events:

swift
import NexconnChatSDK
func onStreamMessageRequestInit(_ event: StreamMessageRequestInitEvent) {
// event.messageId: the server message ID — pull initialized
}

func onStreamMessageRequestDelta(_ event: StreamMessageDeltaEvent) {
// event.message: the message with the latest aggregated content
// event.chunkInfo.content: the delta (incremental text for this event)
}

func onStreamMessageRequestComplete(_ event: StreamMessageRequestCompleteEvent) {
if let error = event.error {
print("Stream error: \(error.localizedDescription)")
} else {
// event.messageId: pull complete — message is fully received
}
}

Start pulling

Call requestStreamMessageWithCompletion: on the received NCMessage instance. The method uses the server message ID (message.messageId) internally:

swift
import NexconnChatSDK
func pullStreamingContent(_ message: Message) {
message.requestStreamMessage { error in
if error == nil {
// Pull request sent — await streaming callbacks
}
}
}

Streaming message summary

After the server finishes generating content, it may send a summary via message metadata. The metadata key is business-defined by your server implementation. Listen for metadata updates via NCMessageHandler:

swift
import NexconnChatSDK
func onMessageMetadataUpdated(_ event: MessageMetadataUpdatedEvent) {
guard let message = event.message,
message.content is StreamMessage else { return }
let summary = event.metadata["summary"]
if let summary {
// Update UI with summary
}
}