option java_package = "com.afreecatv.mobile.sdk.proto";
option java_outer_classname = "peer";

enum SdkSignalType {
    SDP = 1;
    CANDIDATE = 2;

    // 서로 sdp offer <-> sdp answer 역할을 바꾸기 위한 signal.
    // "방금은 내가 SDP Offer 보냈으니 이번엔 너(remote)가 SDP Offer 보내"라는 의미를 지님
    // 이 패킷은 offer sdp를 가진 애가 answer sdp를 가진 애한테 보냄.
    REVERSE_SDP = 3;

    // answer sdp를 가진 peer가 offer sdp를 가진 peer한테 나 연결 끊겼어! 라고 notify하는 패킷
    // offer sdp가 answer sdp한테 이 패킷을 보낼 일은 없음.
    // 상대방(remote peer)이 이 패킷을 보냈다는 것은 재연결 의향이 있다는 것으로 판단함.
    ANSWER_SDP_PEER_DISCONNECT = 4;

    TEST_MESSAGE = 100;
}

enum SdkSignalSdpType {
    OFFER = 0;
    PRANSWER = 1;
    ANSWER = 2;
    ROLLBACK = 3;
}

message SdkPeerSignalling {
    optional SdkSignalType signal_type = 1;

     // 역방향으로 sdp를 교환하는 경우 이 값은 true.
     // 만약 REVERSE_SDP를 두 번 수행하여 A->B, B->A, A->B로 처음으로 돌아온 경우, 이 값은 다시 false가 됨.
     // 이 값은 SdkSignalType값이 SDP, CANDIDATE일 때 입력되어야 함.
    optional bool reverse = 2;

    // 이 패킷을 받는 사람의 peerId(AbstractPeer.getPeerId() 값)
    // 즉, 패킷 수신자의 peerId.
    optional uint32 local_peer_id = 3;

    // 이 패킷을 보내는 사람의 peerId.
    // 즉, 패킷 발신자의 peerId.
    optional uint32 remote_peer_id = 4;
    required string stream_type = 5;

    optional SdkSignalSdpType sdp_type = 10;
    optional string sdp = 11;

    // RTCIceCandidate.toJSON() 결과값.
    // 즉, RTCIceCandidateInit 객체를 JSON으로 변환한 값.
    optional string candidate = 20;

    // 테스트용 메세지
    optional string message = 100;
}