> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# PartyLocalEndpoint::SendMessage

> 네트워크의 다른 엔드포인트에 메시지를 보냅니다.

네트워크의 다른 엔드포인트에 메시지를 보냅니다.

## Syntax

```cpp theme={null}
PartyError SendMessage(  
    uint32_t targetEndpointCount,  
    PartyEndpointArray targetEndpoints,  
    PartySendMessageOptions options,  
    const PartySendMessageQueuingConfiguration* queuingConfiguration,  
    uint32_t dataBufferCount,  
    const PartyDataBuffer* dataBuffers,  
    void* messageIdentifier  
)  
```

### Parameters

**`targetEndpointCount`**   uint32\_t

`targetEndpoints` 배열의 대상 엔드포인트 수입니다. 네트워크의 모든 원격 엔드포인트에 브로드캐스트하려면 0일 수 있습니다. 브로드캐스트 메시지를 수신하는 디바이스는 [PartyEndpointMessageReceivedStateChange](/services/playfab/multiplayer/networking/reference/structs/partyendpointmessagereceivedstatechange)의 대상 엔드포인트 필드가 해당 디바이스의 모든 로컬 엔드포인트로 채워집니다.

**`targetEndpoints`**   [PartyEndpointArray](/services/playfab/multiplayer/networking/reference/typedefs)\
*크기가 `targetEndpointCount`인 입력 배열*

메시지를 보내야 하는 대상 PartyEndpoint 객체 포인터로 구성된 `targetEndpointCount` 항목 배열입니다. `targetEndpointCount`가 0인 경우 이 항목은 무시됩니다.

**`options`**   [PartySendMessageOptions](/services/playfab/multiplayer/networking/reference/enums/partysendmessageoptions)

메시지 전송 방법을 설명하는 0개 이상의 옵션 플래그입니다.

**`queuingConfiguration`**   [PartySendMessageQueuingConfiguration\*](/services/playfab/multiplayer/networking/reference/structs/partysendmessagequeuingconfiguration)\
*선택 사항*

메시지가 로컬로 큐에 저장되고 전송 기회를 기다리는 동안의 동작 방식을 설명하는 선택적 구조체입니다. 기본 큐 동작을 사용하려면 nullptr일 수 있습니다.

**`dataBufferCount`**   uint32\_t

`dataBuffers` 배열에 제공된 버퍼 구조체의 수입니다. 0보다 커야 합니다.

**`dataBuffers`**   [PartyDataBuffer\*](/services/playfab/multiplayer/networking/reference/structs/partydatabuffer)\
*크기가 `dataBufferCount`인 입력 배열*

보낼 메시지 페이로드를 설명하는 PartyDataBuffer 구조체의 `dataBufferCount` 항목 배열입니다.

**`messageIdentifier`**   void\*\
*선택 사항*

이 메시지를 참조하는 모든 상태 변경에 Party 라이브러리가 포함할 불투명한 호출자 관련 컨텍스트 포인터입니다. 이는 해석되거나 원격으로 전송되지 않습니다. 메시지 식별 컨텍스트가 필요하지 않은 경우 nullptr일 수 있습니다.

### Return value

PartyError

전송을 위해 메시지를 큐에 넣는 것이 성공한 경우 `c_partyErrorSuccess`, 그렇지 않으면 오류 코드입니다. 이 메서드가 실패하면 관련 상태 변경이 생성되지 않습니다. 오류 코드의 사람이 읽을 수 있는 형식은 [PartyManager::GetErrorMessage()](/services/playfab/multiplayer/networking/reference/classes/PartyManager/methods/partymanager_geterrormessage)를 통해 검색할 수 있습니다.

## Remarks

로컬 엔드포인트로 메시지를 보내는 것은 현재 지원되지 않습니다. 대상 엔드포인트 배열에 로컬 대상이 포함되어 있으면 이 호출은 동기적으로 실패합니다. <br /><br /> 지정된 디바이스의 대상이 되는 모든 엔드포인트에는 단일 [PartyEndpointMessageReceivedStateChange](/services/playfab/multiplayer/networking/reference/structs/partyendpointmessagereceivedstatechange)가 제공되며, 모든 대상 로컬 엔드포인트가 PartyEndpointMessageReceivedStateChange의 *receiverEndpoints* 배열에 제공됩니다.   <br /><br /> 대상 엔드포인트 배열이 0개 항목으로 지정되면 메시지가 현재 네트워크에 있는 모든 원격 엔드포인트에 브로드캐스트됩니다.   <br /><br /> 호출자는 `dataBuffers` 배열에 1개 이상의 PartyDataBuffer 구조체를 제공합니다. 구조체가 참조하는 메모리는 연속적일 필요가 없으므로, 예를 들어 고정 헤더 버퍼 뒤에 가변 페이로드가 오도록 하기가 쉽습니다. 버퍼는 순서대로 조립되어 전송되며, PartyEndpointMessageReceivedStateChange에서 하나의 연속된 데이터 블록으로 대상 엔드포인트에 전달됩니다. Party 라이브러리는 원래 PartyDataBuffer 분할을 설명하는 메타데이터를 전송하는 데 대역폭을 사용하지 않습니다.   <br /><br /> 기본적으로 호출자의 `dataBuffers` 배열에 설명된 버퍼는 SendMessage()가 반환되기 전에 할당된 버퍼에 복사됩니다. [PartySendMessageOptions::DontCopyDataBuffers](/services/playfab/multiplayer/networking/reference/enums/partysendmessageoptions)를 지정하면 이 추가 복사 단계를 피할 수 있지만, 대신 [PartyDataBuffersReturnedStateChange](/services/playfab/multiplayer/networking/reference/structs/partydatabuffersreturnedstatechange)가 메모리 소유권을 호출자에게 반환할 때까지 각 버퍼에 지정된 메모리를 유효하고 수정되지 않은 상태로 유지해야 합니다. PartyDataBuffer 구조체 자체는 SendMessage() 호출이 반환된 후에도 유효 상태로 유지될 필요가 없으며, 참조하는 메모리만 유지되어야 합니다.   <br /><br /> PartySendMessageOptions::DontCopyDataBuffers를 사용하는 호출자는 호출자별 `messageIdentifier` 컨텍스트를 제공할 수 있습니다. 이 포인터 크기의 값은 모든 PartyDataBuffersReturnedStateChange에 포함되므로 호출자가 자신의 프라이빗 메시지 추적 정보에 쉽게 액세스할 수 있습니다. 실제 값은 불투명하게 처리되며 Party 라이브러리에 의해 해석되지 않고 원격으로 전송되지도 않습니다. `messageIdentifier`가 나타낼 수 있는 호출자 자신의 메모리가 메시지 및 연결된 `messageIdentifier`와 관련된 최종 요청 상태 변경이 처리되어 [PartyManager::FinishProcessingStateChanges()](/services/playfab/multiplayer/networking/reference/classes/PartyManager/methods/partymanager_finishprocessingstatechanges)를 통해 반환될 때까지 유효한 상태로 유지되도록 보장하는 것은 호출자의 책임입니다.   <br /><br /> 연결 품질 및 수신자 응답성과 같은 요인에 따라 메시지가 대상 엔드포인트로 즉시 전송되지 않을 수 있습니다. 엔드포인트에 대한 연결이 현재 지원할 수 있다고 추정되는 속도보다 빠르게 보내면 로컬 전송 큐가 커집니다. 이는 메모리 사용량을 증가시키고 인지되는 메시지 지연 시간을 증가시킬 수 있으므로, 호출자는 로컬 전송 큐를 모니터링하고 관리하는 것이 강력히 권장됩니다. [PartyLocalEndpoint::GetEndpointStatistics()](/services/playfab/multiplayer/networking/reference/classes/PartyLocalEndpoint/methods/partylocalendpoint_getendpointstatistics)를 사용하여 전송 큐에 대한 정보를 검색할 수 있습니다. 전송 크기 및/또는 빈도를 줄이거나, `queuingConfiguration` 선택적 설정을 사용하여 너무 오래 큐에 있는 메시지를 자동으로 만료시키는 타임아웃을 구성하거나, PartyLocalEndpoint::CancelMessages()를 사용하여 큐에 있는 일부 또는 모든 메시지를 명시적으로 제거하여 전송 큐를 관리할 수 있습니다.   <br /><br /> 이 메서드가 성공을 반환하면 메시지가 전송을 시작했거나 향후 전송을 위해 성공적으로 큐에 들어간 것입니다. 특히, 이 메서드에서 성공적으로 반환되었다고 해서 메시지가 어떤 수신자에게 성공적으로 전달되었음을 의미하지는 않습니다. Party API는 현재 개별 메시지의 전달 및 처리를 추적하는 방법을 제공하지 않습니다. [PartyNetwork::GetNetworkStatistics()](/services/playfab/multiplayer/networking/reference/classes/PartyNetwork/methods/partynetwork_getnetworkstatistics) 및 GetEndpointStatistics() 메서드를 사용하여 각각 네트워크 전체 또는 개별 로컬 엔드포인트에 대한 집계 통계를 쿼리할 수 있습니다.   <br /><br /> `options`에 [PartySendMessageOptions::GuaranteedDelivery](/services/playfab/multiplayer/networking/reference/enums/partysendmessageoptions)가 포함되어 있고 대상 엔드포인트로의 전달을 위해 투명 클라우드 릴레이 서버로 메시지가 성공적으로 전달되지 못한 경우 [PartyNetworkDestroyedStateChange](/services/playfab/multiplayer/networking/reference/structs/partynetworkdestroyedstatechange)가 생성됩니다. 다시 말해, 보장된 전달 요구 사항이 있는 메시지는 전달되거나, 그렇지 않으면 보내는 클라이언트가 네트워크에서 연결 해제됩니다. 투명 클라우드 릴레이 서버가 보장된 전달 메시지를 하나 이상의 대상 엔드포인트를 포함하는 각 원격 디바이스로 전달할 때, 메시지를 전달할 수 없으면 원격 디바이스도 마찬가지로 네트워크에서 연결 해제되며 PartyNetworkDestroyedStateChange로 표시됩니다. 다시 말해, 보장된 전달 요구 사항이 있는 메시지를 수신하지 못한 디바이스는 네트워크에서 연결 해제됩니다.   <br /><br /> Party 라이브러리는 환경에서 지원하는 최대 크기를 초과하는 큰 메시지를 자동으로 조각화하고 재조립하므로 호출자가 이를 관리할 필요가 없습니다. 그러나 조각화와 관련된 약간의 오버헤드가 있습니다. 더 작은 메시지를 보낼 수 있거나 큰 상태 페이로드를 효율적으로 자연스럽게 나눌 수 있는 호출자는 그렇게 하는 것을 원할 수 있습니다.   <br /><br /> 네트워크에 첫 번째 사용자를 성공적으로 인증하기 전에 SendMessage()가 항목이 0인 대상 엔드포인트 배열로 호출된 경우, [PartyEndpointCreatedStateChange](/services/playfab/multiplayer/networking/reference/structs/partyendpointcreatedstatechange) 상태 변경을 통해 원격 엔드포인트가 보고되지 않았더라도(따라서 네트워크에 존재한다고 알려지지 않았더라도) 메시지가 큐에 저장됩니다. 첫 번째 사용자가 성공적으로 인증되고 이 보내는 로컬 엔드포인트가 성공적으로 만들어지면, 큐에 저장된 메시지는 이후 시점에 네트워크에 존재하는 모든 원격 엔드포인트를 대상으로 지정합니다. 이 경우 SendMessage() 시점에 네트워크의 미래 상태와 최종적으로 수신하는 엔드포인트의 집합을 알 수 없으므로, 타이틀은 그러한 지연된 브로드캐스트 메시지에 배치되는 콘텐츠에 주의를 기울이거나, 이 로컬 디바이스와 엔드포인트가 네트워크에 완전히 참여할 때까지 아예 제출을 삼가야 합니다.

## Requirements

**Header:** Party.h

## See also

[PartyLocalEndpoint](/services/playfab/multiplayer/networking/reference/classes/PartyLocalEndpoint/partylocalendpoint)\
[PartySendMessageOptions](/services/playfab/multiplayer/networking/reference/enums/partysendmessageoptions)\
[PartySendMessageQueuingConfiguration](/services/playfab/multiplayer/networking/reference/structs/partysendmessagequeuingconfiguration)\
[PartyDataBuffersReturnedStateChange](/services/playfab/multiplayer/networking/reference/structs/partydatabuffersreturnedstatechange)\
[PartyEndpointMessageReceivedStateChange](/services/playfab/multiplayer/networking/reference/structs/partyendpointmessagereceivedstatechange)\
[PartyNetwork::GetNetworkStatistics](/services/playfab/multiplayer/networking/reference/classes/PartyNetwork/methods/partynetwork_getnetworkstatistics)\
[PartyLocalEndpoint::GetEndpointStatistics](/services/playfab/multiplayer/networking/reference/classes/PartyLocalEndpoint/methods/partylocalendpoint_getendpointstatistics)\
[PartyLocalEndpoint::FlushMessages](/services/playfab/multiplayer/networking/reference/classes/PartyLocalEndpoint/methods/partylocalendpoint_flushmessages)


## Related topics

- [PartyLocalEndpoint::FlushMessages](/ko/services/playfab/multiplayer/networking/reference/classes/PartyLocalEndpoint/methods/partylocalendpoint_flushmessages.md)
- [PartySendMessageOptions](/ko/services/playfab/multiplayer/networking/reference/enums/partysendmessageoptions.md)
- [PartyEndpointStatistic](/ko/services/playfab/multiplayer/networking/reference/enums/partyendpointstatistic.md)
- [PartySendMessageQueuingConfiguration](/ko/services/playfab/multiplayer/networking/reference/structs/partysendmessagequeuingconfiguration.md)
- [PartyEndpointMessageReceivedStateChange](/ko/services/playfab/multiplayer/networking/reference/structs/partyendpointmessagereceivedstatechange.md)
