Entries
All the data sent by someone to an Inbox is called an Entry. In Threads and Stores, a user must be assigned to the container to send data. In Inboxes, however, anyone who has Inbox ID can send a reply (assuming they have the Bridge URL and Solution ID).
Info
Entry's publicMeta
and privateMeta
fields support any kind of data formats encoded to byte arrays. Examples in this section use kotlinx-serialization-json-jvm
dependency for Kotlin and com.google.code.gson:gson
for Java to serialize object to JSON format.
Sending Entries using Public API
Public submissions require using platformConnectPublic
function, provided by the Connection
class, to establish a public connection to the Platform.
After connecting, create an InboxApi
instance, which allows to operate on Inboxes.
val connection = Connection.platformConnectPublic(
"<SOLUTION_ID>",
"<PLATFORM_URL>",
)
val inboxApi = InboxApi(connection)
Assuming you need some kind of structure in entries, define a data struct InboxPublicEntryData
, and its instance:
Define structure of data sending to Inbox entry:
@Serializable
data class InboxPublicEntryData(
val name: String,
val surname: String,
val email: String,
val comment : String
)
Now, having established public connection and inboxApi
, you can send data to the Inbox:
val inboxID = "<INBOX_ID>"
val inboxPublicEntryData = InboxPublicEntryData(
"<NAME>",
"<SURNAME>",
"<EMAIL>",
"<COMMENT>"
)
inboxApi.prepareEntry(
inboxID,
Json.encodeToString(inboxPublicEntryData).encodeToByteArray()
).let {
inboxApi.sendEntry(it)
}
Getting Entries
Created entries can be listed by non-public connections created using PrivmxEndpoint
class.
Fetching the most recent Entries in given Inbox:
val inboxID = "INBOX_ID"
val startIndex = 0L
val pageSize = 100L
val inboxApi = connection.inboxApi
val entriesPagingList = inboxApi.listEntries(
inboxID,
startIndex,
pageSize,
SortOrder.DESC
)
val entries = entriesPagingList.readItems.map {
EntryItem(
it,
Json.decodeFromString(it.data.decodeToString())
)
}
Reading Entries Files
Files from Entries can be read by non-public connections created using PrivmxEndpoint
class.
val entryID = "<ENTRY_ID>"
val inboxApi = connection.inboxApi
val inboxEntry = inboxApi.readEntry(entryID)
val files: List<File> = inboxEntry.files
val filesContent: List<ByteArray> = files.map { file ->
inboxApi.openFile(file.info.fileId).let { fileHandle ->
var content = ByteArray(0)
do {
val chunk = inboxApi.readFromFile(fileHandle,StoreFileStream.OPTIMAL_SEND_SIZE)
content += chunk
} while (chunk.size.toLong() == StoreFileStream.OPTIMAL_SEND_SIZE)
inboxApi.closeFile(fileHandle)
content
}
}