짧은 데이터 전송
LINE Planet은 통신 중에 피어에게 제한된 크기의 데이터("짧은 데이터")를 보낼 수 있는 API를 제공합니다. 이 페이지에서는 통화 중에 짧은 데이터를 보내고 받는 방법을 설명합니다.
| 지원 통화 유형 | 지원 SDK 버전 |
|---|---|
| 1대1 통화, 그룹 통화(컨퍼런스) | 모든 버전 |
공통 사항
통화 유형에 관계없이 짧은 데이터 전송에는 다음 사항이 적용됩니다.
크기 제한
짧은 데이터를 보내는 메서드는 데이터 자체와 함께 데이터 유형을 인자로 받습니다. 데이터 유형 및 데이터의 최대 크기는 다음과 같습니다.
- 데이터 유형: 100바이트(null 종료 문자 포함)
- 데이터: 800바이트
처리율 제한
초당 1회의 전송만 허용됩니다.
짧은 데이터 전송 결과 얻기
LINE Planet에서 여러 번 재시도한 후에도 데이터 전송이 실패하는 경우가 있습니다. 결과 핸들러 콜백을 사용하면 비동기적으로 데이터 전송 결과를 확인할 수 있습니다.
1대1 통화
1대1 통화에서는 다음과 같이 짧은 데이터를 보내고 받을 수 있습니다.
짧은 데이터 전송하기
통화 상대방에게 짧은 데이터를 전송하려면 PlanetKitCall::SendShortData()를 사용하세요.
void SendShortDataExample(PlanetKit::PlanetKitCallPtr pCall, const std::wstring& wstrType, const std::string& strData)
{
pCall->SendShortData(wstrType.c_str(), (void*)strData.c_str(), (unsigned int)strData.size(), nullptr, [](void*, bool bSuccess, PlanetKit::ESendShortDataFailReason eReason) {
if (bSuccess) {
std::wcout << L"SendShortData succeeded" << std::endl;
} else {
std::wcout << L"SendShortData failed: " << (int)eReason << std::endl;
}
});
}
수신한 짧은 데이터 처리하기
상대방은 ICallEvent::OnReceivedShortData를 통해 짧은 데이터를 수신할 수 있습니다.
class CallEventListener : public PlanetKit::ICallEvent {
public:
...
void OnReceivedShortData(PlanetKit::PlanetKitCallPtr pPlanetKitCall, PlanetKit::ShortDataParamPtr pShortDataParam) override {
// This is called when short data is received from the peer.
const wchar_t* pType = pShortDataParam->GetType();
const void* pData = pShortDataParam->GetData();
unsigned int nSize = pShortDataParam->GetSize();
std::string receivedData((const char*)pData, nSize);
std::wcout << L"Received short data: type=" << pType << L", data=";
std::cout << receivedData.c_str() << std::endl;
// Write your own code here to handle the received data.
}
}
그룹 통화
그룹 통화에서는 특정 피어 또는 모든 피어에게 짧은 데이터를 보낼 수 있습니다.
특정 피어에게 짧은 데이터 전송하기
특정 피어에게 짧은 데이터를 전송하려면 PlanetKitConference::SendShortData()를 사용하세요.
void SendShortDataToSpecificPeerExample(PlanetKit::PlanetKitConferencePtr pConference, PlanetKit::UserIdPtr pPeerId, const std::wstring& wstrType, const std::string& strData)
{
pConference->SendShortData(wstrType.c_str(), (void*)strData.c_str(), (unsigned int)strData.size(), pPeerId, nullptr, [](void*, bool bSuccess, PlanetKit::ESendShortDataFailReason eReason) {
if (bSuccess) {
std::wcout << L"SendShortData to specific peer succeeded" << std::endl;
} else {
std::wcout << L"SendShortData failed: " << (int)eReason << std::endl;
}
});
}
모든 피어에게 짧은 데이터 전송하기
모든 피어에게 짧은 데이터를 전송하려면 PlanetKitConference::SendShortDataToAllPeers()를 사용하세요.
void SendShortDataToAllPeersExample(PlanetKit::PlanetKitConferencePtr pConference, const std::wstring& wstrType, const std::string& strData)
{
pConference->SendShortDataToAllPeers(wstrType.c_str(), (void*)strData.c_str(), (unsigned int)strData.size(), nullptr, [](void*, bool bSuccess, PlanetKit::ESendShortDataFailReason eReason) {
if (bSuccess) {
std::wcout << L"SendShortData to all peers succeeded" << std::endl;
} else {
std::wcout << L"SendShortData failed: " << (int)eReason << std::endl;
}
});
}
수신한 짧은 데이터 처리하기
피어는 IConferenceEvent::OnReceivedShortData를 통해 짧은 데이터를 수신할 수 있습니다.
class ConferenceEventListener : public PlanetKit::IConferenceEvent {
public:
...
void OnReceivedShortData(PlanetKit::PlanetKitConferencePtr pPlanetKitConference, PlanetKit::ShortDataParamPtr pParam) override {
// This is called when short data is received from a peer in the conference.
PlanetKit::UserIdPtr pSenderId = pParam->GetPeerID();
const wchar_t* pType = pParam->GetType();
const void* pData = pParam->GetData();
unsigned int nSize = pParam->GetSize();
std::string receivedData((const char*)pData, nSize);
std::wcout << L"Received short data from peer: type=" << pType << L", data=";
std::cout << receivedData.c_str() << std::endl;
// Write your own code here to handle the received data.
}
}
짧은 데이터 전송 실패 이유
결과 핸들러 콜백으로 전달되는 ESendShortDataFailReason 열거형을 통해 짧은 데이터 전송 결과와 실패 이유를 확인할 수 있습니다. 가능한 실패 이유는 다음과 같습니다.
| 값 | 설명 |
|---|---|
PLNK_SEND_SHORT_DATA_FAIL_REASON_NONE | 짧은 데이터가 성공적으로 전송되었습니다. |
PLNK_SEND_SHORT_DATA_FAIL_REASON_INVALID_PARAMETER | 하나 이상의 입력 파라미터가 유효하지 않습니다(예: 데이터 크기가 0이거나 데이터 포인터가 NULL). |
PLNK_SEND_SHORT_DATA_FAIL_REASON_TOO_LONG_DATA_TYPE | 데이터 타입이 허용된 최대 길이를 초과합니다(null 종료 문자 포함 100바이트 초과). |
PLNK_SEND_SHORT_DATA_FAIL_REASON_TOO_LONG_DATA | 데이터 페이로드가 허용된 최대 크기를 초과합니다(800바이트 초과). |
PLNK_SEND_SHORT_DATA_FAIL_REASON_TOO_FREQUENT | 짧은 데이터가 허용된 것보다 더 자주 전송되었습니다(처리율 제한 초과). 초당 1회의 전송만 허용됩니다. |
PLNK_SEND_SHORT_DATA_FAIL_REASON_TIMEOUT | 타임아웃으로 인해 전송이 실패했습니다. |
관련 API
짧은 데이터 전송과 관련된 API는 다음과 같습니다.