Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Sources/AblyChat/DefaultMessages.swift
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ internal final class DefaultMessages: Messages {
logger.log(message: "Subscribing to messages", level: .debug)
// (CHA-M4c) When a realtime message with name set to message.created is received, it is translated into a message event, which contains a type field with the event type as well as a message field containing the Message Struct. This event is then broadcast to all subscribers.
// (CHA-M4d) If a realtime message with an unknown name is received, the SDK shall silently discard the message, though it may log at DEBUG or TRACE level.
// (CHA-M5k) Incoming realtime events that are malformed (unknown field should be ignored) shall not be emitted to subscribers.
// (CHA-M4k) Incoming realtime events that are malformed (unknown field should be ignored) shall not be emitted to subscribers.
let eventListener = channel.subscribe(RealtimeMessageName.chatMessage.rawValue) { [logger] message in
guard let action = MessageAction.fromRealtimeAction(message.action) else {
logger.log(message: "Received incoming message with unsupported action: \(message.action)", level: .info) // CHA-M4m5
Expand Down
35 changes: 5 additions & 30 deletions Sources/AblyChat/DefaultPresence.swift
Original file line number Diff line number Diff line change
Expand Up @@ -171,10 +171,8 @@ internal final class DefaultPresence: Presence {
throw error
}

let dto = PresenceDataDTO(userCustomData: data)

do {
try await channel.presence.enterClient(clientID, data: dto.toJSONValue)
try await channel.presence.enterClient(clientID, data: data)
} catch {
logger.log(message: "Error entering presence: \(error)", level: .error)
throw error
Expand Down Expand Up @@ -205,10 +203,8 @@ internal final class DefaultPresence: Presence {
throw error
}

let dto = PresenceDataDTO(userCustomData: data)

do {
try await channel.presence.update(dto.toJSONValue)
try await channel.presence.update(data)
} catch {
logger.log(message: "Error updating presence: \(error)", level: .error)
throw error
Expand Down Expand Up @@ -239,10 +235,8 @@ internal final class DefaultPresence: Presence {
throw error
}

let dto = PresenceDataDTO(userCustomData: data)

do {
try await channel.presence.leave(dto.toJSONValue)
try await channel.presence.leave(data)
} catch {
logger.log(message: "Error leaving presence: \(error)", level: .error)
throw error
Expand Down Expand Up @@ -310,25 +304,8 @@ internal final class DefaultPresence: Presence {
}
}

private func decodePresenceDataDTO(from presenceData: JSONValue?) throws(InternalError) -> PresenceDataDTO {
guard let presenceData else {
let error = ARTErrorInfo.create(withCode: 50000, status: 500, message: "Received incoming message without data")
logger.log(message: error.message, level: .error)
throw error.toInternalError()
}

do {
return try PresenceDataDTO(jsonValue: presenceData)
} catch {
logger.log(message: "Failed to decode presence data DTO from \(presenceData), error \(error)", level: .error)
throw error
}
}

private func processPresenceGet(members: [PresenceMessage]) throws(InternalError) -> [PresenceMember] {
let presenceMembers = try members.map { member throws(InternalError) in
let presenceDataDTO = try decodePresenceDataDTO(from: member.data)

guard let clientID = member.clientId else {
let error = ARTErrorInfo.create(withCode: 50000, status: 500, message: "Received incoming message without clientId")
logger.log(message: error.message, level: .error)
Expand All @@ -343,7 +320,7 @@ internal final class DefaultPresence: Presence {

let presenceMember = PresenceMember(
clientID: clientID,
data: presenceDataDTO.userCustomData,
data: member.data,
extras: member.extras,
updatedAt: timestamp
)
Expand All @@ -367,11 +344,9 @@ internal final class DefaultPresence: Presence {
throw error
}

let presenceDataDTO = try decodePresenceDataDTO(from: message.data)

let member = PresenceMember(
clientID: clientID,
data: presenceDataDTO.userCustomData,
data: message.data,
extras: message.extras,
updatedAt: timestamp
)
Expand Down
26 changes: 0 additions & 26 deletions Sources/AblyChat/PresenceDataDTO.swift

This file was deleted.

8 changes: 4 additions & 4 deletions Tests/AblyChatTests/DefaultPresenceTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ struct DefaultPresenceTests {
// Then
#expect(channel.presence.callRecorder.hasRecord(
matching: "enterClient(_:data:)",
arguments: ["name": "client1", "data": JSONValue.object(["userCustomData": ["status": "Online"]])]
arguments: ["name": "client1", "data": JSONValue.object(["status": "Online"])]
)
)
}
Expand Down Expand Up @@ -150,7 +150,7 @@ struct DefaultPresenceTests {
// Then
#expect(channel.presence.callRecorder.hasRecord(
matching: "update(_:)",
arguments: ["data": JSONValue.object(["userCustomData": ["status": "Online"]])]
arguments: ["data": JSONValue.object(["status": "Online"])]
)
)
}
Expand Down Expand Up @@ -268,12 +268,12 @@ struct DefaultPresenceTests {
)

// When
try await defaultPresence.leave()
try await defaultPresence.leave(data: ["status": "Online"])

// Then
#expect(channel.presence.callRecorder.hasRecord(
matching: "leave(_:)",
arguments: ["data": JSONValue.object([:])]
arguments: ["data": JSONValue.object(["status": "Online"])]
)
)
}
Expand Down
2 changes: 1 addition & 1 deletion Tests/AblyChatTests/Helpers/Helpers.swift
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,6 @@ private extension [MockMethodCallRecorder.MethodArgument] {
extension [String: Any] {
func toAblyCocoaData() -> Any {
// Probaly there is a better way of doing this
PresenceDataDTO(userCustomData: JSONValue(ablyCocoaData: self)).toJSONValue.toAblyCocoaData
JSONValue(ablyCocoaData: self).toAblyCocoaData
}
}
44 changes: 0 additions & 44 deletions Tests/AblyChatTests/PresenceDataDTOTests.swift

This file was deleted.