@startuml Messages sturcture and hierarchy class PackedServerMessage { From string Payload string Signature string } class ServerMessage { Type string } class PackedForwardMessage { NextServerKey string Url string Payload string } class PackedUserMessage { DestinationKey Payload Signature } class UserMessage { LocalUuid Destination From Type Data Sent NextKey } class InternalMessage { With SentByMe UserMessageData ServerUuid Received Processed TransferPath } class ConversationRequest { Destination string LastUuidOK string PublishIp bool } class PollRequest { Destinations []ConversationRequest Time time.Time } class ConversationResponse { MessageUuids []string SourceIpAddress string } class PollResponse { Conversations map[string]ConversationResponse } class MessageBodies { Messages []Message } PackedServerMessage *-- ServerMessage ServerMessage <|--PackedForwardMessage ServerMessage <|--PollRequest PollRequest *-- ConversationRequest PollResponse *--ConversationResponse ServerMessage <|--PollResponse ServerMessage <|-- MessageBodies PackedUserMessage *-- UserMessage InternalMessage *-- UserMessage PackedForwardMessage *-- ServerMessage PackedForwardMessage *-- PackedForwardMessage MessageBodies *-- PackedUserMessage @enduml