SippoClient

This section explains how to create a SippoGroupChat and use chat actions

First step

Chat session has to be started

// Set delegate before to receive incoming events, if delegate is set after start session some events could be lost
let delegate = ChatsDelegateExample()
let chats = try? SippoClient.client.chats.get()
chats?.delegate = delegate

chats?.startSession {
    // Chats actions are available now
}

Create a new SippoGroupChat

try? SippoClient.client.chats.get()
    .createGroupChat(named: "aGroupChat", participants: ["participant@domain"]) { groupChat in
        print("New group chat: \(groupChat)")
    }

Receive new group chats

Implement a new ChatsDelegate

class ChatsDelegateExample: ChatsDelegate {    
    func chats(_ chats: Chats, didReceiveGroupChat groupChat: SippoGroupChat) {
        print("New groupChat: \(groupChat)")
    }
}

And set it to Chats

let delegate = ChatsDelegateExample()
try? SippoClient.client.chats.get().delegate = delegate

Send messages

Implement a SippoGroupChatDelegate

class GroupChatDelegateExample: SippoGroupChatDelegate {

    func chat(_ groupChat: SippoGroupChat, didReceiveMessage message: ChatMessage) {

    }

    func chat(_ groupChat: SippoGroupChat, didReceiveMesssageFromArchive message: ChatMessage) {

    }

    func chat(_ groupChat: SippoGroupChat, didReceiveMessageStatusUpdate message: ChatStatusMessage) {

    }

    func chat(_ groupChat: SippoGroupChat, didReceiveEvent: SippoChatParticipant.Action, from participant: SippoChatParticipant) {

    }

    func chat(_ groupChat: SippoGroupChat, didUpdateSubject: String) {

    }

    func chat(_ groupChat: SippoGroupChat, didReceiveParticipantAction: ChatMessage.ParticipantAction, from participant: SippoChatParticipant) {

    }
}

Send a file or text message

var aChat: SippoGroupChat!
let delegate = GroupChatDelegateExample()
aChat.delegate = delegate

// Text message
let textMessage = aChat.send(message: "This is a message")
// Message status can be checked from: 
// func chat(_ groupChat: SippoGroupChat, didReceiveMessageStatusUpdate message: ChatStatusMessage)
print("Trying to send: \(textMessage)")

// File message
let fileMessage = aChat.send(file: Data(), named: "photo.png")
// This callback will be call everytime the upload changes (bytes sent, status...)
fileMessage.fileUploadUpdates { update in
    print("Update progress: \(update?.bytesSent)")
}

Mark a message

var aChat: SippoGroupChat!
var receivedMessage: ChatMessage

aChat.mark(message: receivedMessage, as: .displayed)

Send participant action

var aChat: SippoOneToOneChat!

aChat.sendParticipantActionInChat(.typing)

Receive messages

Stored messages

var aChat: SippoGroupChat!
let delegate = GroupChatDelegateExample()
aChat.delegate = delegate

// Use search to fetch message from history
aChat.fetchMessagesFromStore(messageSearch: ChatMessageSearch(limitTo: 20))

// Receive them from:
// func chat(_ groupChat: SippoGroupChat, didReceiveMesssageFromArchive message: ChatMessage) delegate function

Messages from other participant

var aChat: SippoGroupChat!
let delegate = GroupChatDelegateExample()
aChat.delegate = delegate

// Receive text or file messages from:
// func chat(_ groupChat: SippoGroupChat, didReceiveMessage message: ChatMessage) delegate function

// Receive status messages from:
// func chat(_ groupChat: SippoGroupChat, didReceiveMessageStatusUpdate message: ChatStatusMessage)

// Receive participant actions (typing, active) from:
// func chat(_ groupChat: SippoGroupChat, didReceiveParticipantAction: ChatMessage.ParticipantAction, from participant: SippoChatParticipant)

// Receive chat actions (leave, add...) from:
// func chat(_ groupChat: SippoGroupChat, didReceiveEvent: SippoChatParticipant.Action, from participant: SippoChatParticipant)