mirror of
https://github.com/Govor-team/Govor.git
synced 2026-07-21 19:54:55 +00:00
4.8 KiB
4.8 KiB
icon
| icon |
|---|
| wifi |
ChatHub
Route: hubs/chats
Authorize: Requires authentication (user must be logged in)
Hub Methods
OnConnectedAsync
Description: Automatically invoked when a client establishes a connection to the hub. Adds the user to their personal group for private messages and notifications.
Behavior:
- Retrieves the user's ID from the connection context.
- If the user ID is invalid (
Guid.Empty), logs a warning and aborts the connection. - Adds the user to a group named after their user ID (e.g.,
userId.ToString()). - Logs the connection event with the user ID and connection ID.
Notes:
- Future enhancements may include adding the user to their chat groups (currently a TODO in the code).
OnDisconnectedAsync
Description: Automatically invoked when a client disconnects from the hub. Removes the user from their personal group.
Behavior:
- Retrieves the user's ID from the connection context, suppressing exceptions if the ID is unavailable (e.g., due to an early abort).
- If the user ID is valid, removes the user from their personal group.
- Logs the disconnection event with the user ID and connection ID.
- If an exception occurs, logs it as a warning along with the connection ID.
- If no exception occurs but the user ID is invalid, logs the disconnection with the connection ID.
Notes:
- Future enhancements may include removing the user from their chat groups (currently a TODO in the code).
Send
Description: Allows a client to send a message to a recipient, which can be either a user or a group.
Request:
- Method Name:
Send - Parameters:
-
request: An object of typeMessageRequestwith the following structure:{ "encryptedContent": "string", "replyToMessageId": "Guid", "recipientId": "Guid", "recipientType": "string", // "User" or "Group" "mediaAttachments": [ { "mediaId": "Guid", "encryptedKey": "string", "type": "string", "mimeType": "string" } ] }
-
Responses:
- Success:
- Sends the message to the recipient (user or group) via the
ReceiveMessageevent. - Notifies the sender with a confirmation via the
MessageSentevent. - Logs the successful message send with the message ID, sender ID, recipient ID, and recipient type.
- Sends the message to the recipient (user or group) via the
- Error:
- If the message is empty (no
encryptedContentand nomediaAttachments), logs a warning and throws anArgumentException. - If the message fails to send (e.g., due to an internal error), logs the error and throws a
HubException.
- If the message is empty (no
Client-Side Events:
- ReceiveMessage: Triggered on the recipient's client(s) to deliver the message.
- Payload:
UserMessageResponseobject.
- Payload:
- MessageSent: Triggered on the sender's client to confirm the message was sent.
- Payload:
UserMessageResponseobject.
- Payload:
Notes:
- The message must contain either
encryptedContentormediaAttachments; otherwise, it is invalid. - The recipient is determined by
recipientType:"User": Sends to the recipient’s personal group (e.g.,recipientId.ToString())."Group": Sends to all members of the group (e.g.,group_{recipientId}).
Data Models
MessageRequest
{
"encryptedContent": "string",
"replyToMessageId": "Guid",
"recipientId": "Guid",
"recipientType": "string", // "User" or "Group"
"mediaAttachments": [
{
"mediaId": "Guid",
"encryptedKey": "string",
"type": "string",
"mimeType": "string"
}
]
}
UserMessageResponse
{
"messageId": "Guid",
"senderId": "Guid",
"recipientId": "Guid",
"recipientType": "string",
"encryptedContent": "string",
"sentAt": "DateTime",
"isEdited": "bool",
"mediaAttachments": [
{
"mediaId": "Guid",
"encryptedKey": "string",
"type": "string",
"mimeType": "string"
}
],
"replyToMessageId": "Guid"
}
Error Handling
- Invalid User ID: If the user ID is
Guid.Emptyduring connection, the connection is aborted with a logged warning. - Empty Message: If a message lacks both content and attachments, an
ArgumentExceptionis thrown with a logged warning. - Message Send Failure: If sending fails (e.g., due to a service error), a
HubExceptionis thrown with the error logged.
Logging
- Logs connection events with user ID and connection ID.
- Logs disconnection events, including exceptions if present.
- Logs message send attempts, successes, and failures for monitoring and debugging.