1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017
export default `
//start
// pdu_def.proto

// syntax = "proto3";

option optimize_for = LITE_RUNTIME;
enum RCPduPriority_E {
    DP_TOP = 0;
    DP_HIGH = 1;
    DP_MEDIUM = 2;
    DP_LOW = 3;
}

enum RCPduSegment_E {
    SEG_BEGIN = 0;
    SEG_END = 1;
    SEG_ONCE = 2;
}

enum RCPduTokenStatus_E {
    TS_NOT_IN_USE = 0;
    TS_SELF_GRABBED = 1;
    TS_OTHER_GRABBED = 2;
    TS_SELF_INHIBITED = 3;
    TS_OTHER_INHIBITED = 4;
    TS_SELF_RECIPIENT = 5;
    TS_SELF_GIVING = 6;
    TS_OTHER_GIVING = 7;
}

enum RCPduType_E {
// GCC PDU
    RCPDU_CONNECT_PROVIDER_REQUEST = 0;
    RCPDU_CONNECT_PROVIDER_RESPONSE = 1;
    RCPDU_CONFERENCE_JOIN_REQUEST = 2;
    RCPDU_CONFERENCE_JOIN_RESPONSE = 3;
    RCPDU_CONFERENCE_INVITE_REQUEST = 10;
    RCPDU_CONFERENCE_INVITE_RESPONSE = 11;
    RCPDU_CONFERENCE_LOCK_REQUEST = 20;
    RCPDU_CONFERENCE_LOCK_RESPONSE = 21;
    RCPDU_CONFERENCE_LOCK_INDICATION = 22;
    RCPDU_CONFERENCE_UNLOCK_REQUEST = 30;
    RCPDU_CONFERENCE_UNLOCK_RESPONSE = 31;
    RCPDU_CONFERENCE_UNLOCK_INDICATION = 32;
    RCPDU_CONFERENCE_LEAVE_REQUEST = 39;
    RCPDU_CONFERENCE_TERMINATE_REQUEST = 40;
    RCPDU_CONFERENCE_TERMINATE_RESPONSE = 41;
    RCPDU_CONFERENCE_TERMINATE_INDICATION = 42;
    RCPDU_CONFERENCE_EJECT_USER_REQUEST = 50;
    RCPDU_CONFERENCE_EJECT_USER_RESPONSE = 51;
    RCPDU_CONFERENCE_EJECT_USER_INDICATION = 52;
    RCPDU_ROSTER_UPDATE_INDICATION = 60;
    RCPDU_REGISTRY_UPDATE_REQUEST = 70; // INCLUDE ALL OBJS OPERATION
    RCPDU_REGISTRY_UPDATE_RESPONSE = 71;
    RCPDU_REGISTRY_UPDATE_INDICATION = 72;
    RCPDU_FUNCTION_NOT_SUPPORTED_RESPONSE = 80;

    // MCS PDU
    RCPDU_SESSION_JOIN_REQUEST = 90;
    RCPDU_SESSION_JOIN_RESPONSE = 91;
    RCPDU_CHANNEL_GRAB_REQUEST = 100;
    RCPDU_CHANNEL_GRAB_RESPONSE = 101;
    RCPDU_CHANNEL_GRAB_INDICATION = 102;
    RCPDU_CHANNEL_JOIN_REQUEST = 103;
    RCPDU_CHANNEL_JOIN_RESPONSE = 104;
    RCPDU_CHANNEL_LEAVE_REQUEST = 105;
    RCPDU_CHANNEL_RELEASE_REQUEST = 106;
    RCPDU_CHANNEL_RELEASE_INDICATION = 107;
    RCPDU_SEND_DATA_REQUEST = 120;
    RCPDU_SEND_DATA_INDICATION = 121;
    RCPDU_UNIFORM_SEND_DATA_REQUEST = 125;
    RCPDU_UNIFORM_SEND_DATA_INDICATION = 126;
    RCPDU_TOKEN_GRAB_REQUEST = 130;
    RCPDU_TOKEN_GRAB_CONFIRM = 131;
    RCPDU_TOKEN_INHIBIT_REQUEST = 132;
    RCPDU_TOKEN_INHIBIT_CONFIRM = 133;
    RCPDU_TOKEN_GIVE_REQUEST = 134;
    RCPDU_TOKEN_GIVE_INDICATION = 135;
    RCPDU_TOKEN_GIVE_RESPONSE = 136;
    RCPDU_TOKEN_GIVE_CONFIRM = 137;
    RCPDU_TOKEN_PLEASE_REQUEST = 138;
    RCPDU_TOKEN_PLEASE_INDICATION = 139;
    RCPDU_TOKEN_RELEASE_REQUEST = 140;
    RCPDU_TOKEN_RELEASE_CONFIRM = 141;
    RCPDU_TOKEN_TEST_REQUEST = 142;
    RCPDU_TOKEN_TEST_CONFIRM = 143;

    // Registry PDU
    RCPDU_REG_REGISTER_KEY = 200;
    RCPDU_REG_UNREGISTER_KEY = 201;
    RCPDU_REG_REGISTER_ROSTER = 202;
    RCPDU_REG_REGISTER_TOKEN = 203;
    RCPDU_REG_REGISTER_PARAMETER = 204;
    RCPDU_REG_REGISTER_COUNTER = 205;
    RCPDU_REG_REGISTER_TABLE = 206;
    RCPDU_REG_REGISTER_CACHE = 207;
    RCPDU_REG_REGISTER_OBJ = 208;
    RCPDU_REG_UNREGISTER_OBJ = 209;
    RCPDU_REG_UPDATE_OBJ = 210;
    RCPDU_REG_ADAPTER = 211;
    RCPDU_REG_CLEANUP_NODE = 212;
    RCPDU_REG_REGISTER_QUEUE = 213;

    // Registry Obj update PDU
    RCPDU_REG_TABLE_INSERT_PDU = 230;
    RCPDU_REG_TABLE_DELETE_PDU = 231;
    RCPDU_REG_TABLE_UPDATE_PDU = 232;
    RCPDU_REG_ROSTER_INSERT_PDU = 240;
    RCPDU_REG_ROSTER_DELETE_PDU = 241;
    RCPDU_REG_ROSTER_UPDATE_PDU = 242;
    RCPDU_REG_PARAMETER_UPDATE_PDU = 250;
    RCPDU_REG_QUEUE_INSERT_PDU = 255;
    RCPDU_REG_QUEUE_DELETE_PDU = 256;
    RCPDU_REG_QUEUE_UPDATE_PDU = 257;

    // data
    RCPDU_CONFERENCE_SEND_DATA_REQUEST = 259;
    RCPDU_VIDEO_SEND_DATA_REQUEST = 260;
    RCPDU_AUDIO_SEND_DATA_REQUEST = 261;
    RCPDU_GIFT_SEND_DATA_REQUEST = 262;
    RCPDU_CHAT_SEND_DATA_REQUEST = 263;
    RCPDU_VOTING_POLL_RECORD = 265;
    RCPDU_CONFERENCE_RECORD_REQUEST = 270;

    // Registry resource request or response PDU
    RCPDU_REG_REQUEST_OBJ = 290;
    RCPDU_REG_RESPONSE_OBJ = 291;
    RCPDU_REG_COUNTER_REQUEST_PDU = 292;
    RCPDU_REG_COUNTER_RESPONSE_PDU = 293;

    // Index exchange
    RCPDU_INDEX_ADAPTER = 300;
    RCPDU_INDEX_SERVER_USERS = 301;
    RCPDU_INDEX_CONFERENCE_USER_JOINED = 302;
    RCPDU_INDEX_CONFERENCE_USER_EXITED = 303;
    RCPDU_INDEX_CONFERENCE_USERS = 304;




    //new data
    RCPDU_SEND_CONFERENCE_DATA_REQUEST =500;
    RCPDU_SEND_VIDEO_DATA_REQUEST = 501;
    RCPDU_SEND_AUDIO_DATA_REQUEST = 502;
    RCPDU_SEND_GIFT_DATA_REQUEST = 503;
    RCPDU_SEND_CHAT_DATA_REQUEST = 504;
    RCPDU_THIRD_BROADCAST_DATA_REQUEST = 505;
    RCPDU_SEND_DOC_BROADCAST_DATA_REQUEST = 506;
}

enum RCPduNodeType_E {
    NT_TERMINAL = 0;
    NT_MULTIPORT_TERMINAL = 1;
    NT_MCU = 2;
}

enum RCPduReason_E {
    RSN_USERINITIATED = 0;
    RSN_DISCONNECTED = 1;
    RSN_SUPER_LEFT = 2;
}

enum RCPduResult_E {
    RET_SUCCESS = 0;
    RET_USER_REJECTED = 1;
    RET_INVALID_CONFERENCE = 2;
    RET_INVALID_PASSWORD = 3;
    RET_INVALID_CONVENER_PASSWORD = 4;
    RET_CHALLENGE_RESPONSE_REQUIRED = 5;
    RET_INVALID_CHALLENGE_RESPONSE = 6;
    RET_NO_CONNECTION = 7;
    RET_FULL_CAPACITY = 8;
}

enum RCPduNodeCategory_E {
    NC_CONVENTIONAL = 0;
    NC_COUNTED = 1;
    NC_ANONYMOUS = 2;
}

message RCConferenceDescriptorPdu {
    required uint32 id = 1;
    required string name = 2;
    optional bytes description = 3;
    optional uint32 mode = 4;
    optional string password = 5;
    optional uint32 capacity = 6;
    optional bytes user_data = 7;
}

message RCNodeRecordPdu {
    required uint32 id = 1;
    optional uint32 superior_node = 2;
    required RCPduNodeType_E type = 3;
    required string name = 4;
    required uint32 capability = 5;
    optional string net_address = 6;
    optional RCPduNodeCategory_E category = 7;
}

message RCApplicationRecordPdu {
    required uint32 id = 1; // session id
    required string name = 2;
    required string tag = 3;
    repeated uint32 channel_ids = 4 [packed = true];
    optional uint32 capability = 5;
}

//reg.proto

option optimize_for = LITE_RUNTIME;
message RCRegistryRegisterKeyPdu {
    required RCPduType_E type = 1 [default = RCPDU_REG_REGISTER_KEY];
    required uint32 id = 2;
    required string name = 3;
    required string tag = 4;
    optional bytes user_data = 5;
}

message RCRegistryUnregisterKeyPdu {
    optional RCPduType_E type = 1 [default = RCPDU_REG_UNREGISTER_KEY];
    required uint32 key_id = 2;
}

message RCRegistryRegisterObjPdu {
    optional RCPduType_E type = 1;
    required uint32 obj_id = 2;
    required string name = 3;
    required string tag = 4;
    optional uint32 owner = 5;
    optional bytes user_data = 6;
}

message RCRegistryUnregisterObjPdu {
    optional RCPduType_E type = 1 [default = RCPDU_REG_UNREGISTER_OBJ];
    required uint32 obj_id = 2;
}

message RCRegistryUpdateObjPdu {
    optional RCPduType_E type = 1 [default = RCPDU_REG_UPDATE_OBJ];
    required RCPduType_E sub_type = 2;
    required uint32 obj_id = 3;
    required bytes user_data = 4;
}

message RCAdapterItemPdu {
    required RCPduType_E type = 1;
    required bytes item_data = 2;
}

// adapter pdu that used to package a list of pdu.
message RCAdapterPdu {
    optional RCPduType_E type = 1 [default = RCPDU_REG_ADAPTER];
    repeated RCAdapterItemPdu item = 2;
}

// table operation pdu
message RCRegistryTableItemPdu {
    required uint32 item_idx = 1;
    required uint32 owner = 2;
    required bytes item_data = 3;
    optional uint32 register_obj_id=4;
}

message RCRegistryTableInsertItemPdu {
    optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_INSERT_PDU];
    repeated RCRegistryTableItemPdu items = 2;
}

message RCRegistryTableDeleteItemPdu {
    optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_DELETE_PDU];
    repeated uint32 item_idx = 2;
}

message RCRegistryTableUpdateItemPdu {
    optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_UPDATE_PDU];
    repeated RCRegistryTableItemPdu items = 2;
}

// roster operation pdu
message RCRegistryRosterItemPdu {
    required uint32 node_id = 1;
    required bytes node_data = 2;
}
message RCRegistryWBItemPdu {
    required uint32 node_id = 1;
    required bytes node_data = 2;
}
message RCRegistryRosterInsertItemPdu {
    optional RCPduType_E type = 1 [default = RCPDU_REG_ROSTER_INSERT_PDU];
    repeated RCRegistryRosterItemPdu items = 2;
}

message RCRegistryRosterDeleteItemPdu {
    optional RCPduType_E type = 1 [default = RCPDU_REG_ROSTER_DELETE_PDU];
    required uint32 node_id = 2;
}

message RCRegistryRosterUpdateItemPdu {
    optional RCPduType_E type = 1 [default = RCPDU_REG_ROSTER_UPDATE_PDU];
    repeated RCRegistryRosterItemPdu items = 2;
}

//message RCCleanupNodePdu
//{
//  optional RCPduType_E    type                = 1 [default = RCPDU_REG_CLEANUP_NODE];
//  required uint32         node_id             = 2;
//}

// parameter operation pdu
message RCRegistryParameterUpdatePdu {
    optional RCPduType_E type = 1 [default = RCPDU_REG_PARAMETER_UPDATE_PDU];
    required uint32 value = 2 [default = 0];
    optional uint32 begin_bit = 3 [default = 31];
    optional uint32 end_bit = 4;
}

// queue operation pdu
message RCRegistryQueueItemPdu {
    required uint32 owner = 1;
    required uint32 item_id = 2;
    optional bytes item_data = 3;
    optional uint32 item_idx = 4;
}

message RCRegstryQueueInsertItemPdu {
    optional RCPduType_E type = 1 [default = RCPDU_REG_QUEUE_INSERT_PDU];
    repeated RCRegistryQueueItemPdu items = 2;
}

message RCRegistryQueueDeleteItemPdu {
    optional RCPduType_E type = 1 [default = RCPDU_REG_QUEUE_DELETE_PDU];
    required uint32 item_id = 2;
}

message RCRegistryQueueUpdateItemPdu {
    optional RCPduType_E type = 1 [default = RCPDU_REG_QUEUE_UPDATE_PDU];
    repeated RCRegistryQueueItemPdu items = 2;
}

message RCRegistryRequestObjPdu {
    optional RCPduType_E type = 1 [default = RCPDU_REG_REQUEST_OBJ];
    required RCPduType_E sub_type = 2;
    required uint32 obj_id = 3;
    required bytes user_data = 4;
}

message RCRegistryResponseObjPdu {
    optional RCPduType_E type = 1 [default = RCPDU_REG_RESPONSE_OBJ];
    required RCPduType_E sub_type = 2;
    required uint32 obj_id = 3;
    required bytes user_data = 4;
}

message RCRegistryCounterRequestPdu {
    optional RCPduType_E type = 1 [default = RCPDU_REG_COUNTER_REQUEST_PDU];
    required uint32 count = 2;
}

message RCRegistryCounterResponsePdu {
    optional RCPduType_E type = 1 [default = RCPDU_REG_COUNTER_RESPONSE_PDU];
    required uint32 start = 2;
    required uint32 end = 3;
}

// mcs
option optimize_for = LITE_RUNTIME;

// Session management
message RCSessionJoinRequestPdu {
    required RCPduType_E type = 1 [default = RCPDU_SESSION_JOIN_REQUEST];
    required uint32 id = 2;
    required string name = 3;
    required string tag = 4;
    optional bytes session_data = 5; //聚合在一起的registry信息
}

message RCSessionJoinResponsePdu {
    optional RCPduType_E type = 1 [default = RCPDU_SESSION_JOIN_RESPONSE];
    required uint32 id = 2;
    optional bytes response_data = 3;
}

// Channel management
message RCChannelGrabRequestPdu {
    optional RCPduType_E type = 1 [default = RCPDU_CHANNEL_GRAB_REQUEST];
    required uint32 initiator = 2;
    required uint32 channel_id = 3;
}

message RCChannelGrabResponsePdu {
    optional RCPduType_E type = 1 [default = RCPDU_CHANNEL_GRAB_RESPONSE];
    required uint32 initiator = 2;
    required uint32 requested_channel_id = 3;
    required RCPduResult_E result = 4;
    optional uint32 channel_id = 5;
}

message RCChannelGrabIndicationPdu {
    optional RCPduType_E type = 1 [default = RCPDU_CHANNEL_GRAB_INDICATION];
    required uint32 initiator = 2;
    optional uint32 channel_id = 3;
}

message RCChannelJoinRequestPdu {
    required RCPduType_E type = 1 [default = RCPDU_CHANNEL_JOIN_REQUEST];
    required uint32 initiator = 2;
    required uint32 channel_id = 3;
}

message RCChannelJoinResponsePdu {
    optional RCPduType_E type = 1 [default = RCPDU_CHANNEL_JOIN_RESPONSE];
    required uint32 initiator = 2;
    required uint32 requested_channel_id = 3;
    required RCPduResult_E result = 4;
}

message RCChannelLeaveRequestPdu {
    optional RCPduType_E type = 1 [default = RCPDU_CHANNEL_LEAVE_REQUEST];
    required uint32 initiator = 2;
    repeated uint32 channel_ids = 3 [packed = true];
}

message RCChannelReleaseRequestPdu {
    optional RCPduType_E type = 1 [default = RCPDU_CHANNEL_RELEASE_REQUEST];
    required uint32 initiator = 2;
    required uint32 channel_id = 3;
}

message RCChannelReleaseIndicationPdu {
    optional RCPduType_E type = 1
    [default = RCPDU_CHANNEL_RELEASE_INDICATION];
    required uint32 initiator = 2;
    required uint32 channel_id = 3;
}

// Data transfer
message RCSendDataPdu {
    required RCPduType_E type = 1 [default = RCPDU_SEND_DATA_REQUEST];
    required RCPduType_E sub_type = 2;
    required uint32 initiator = 3;
    required uint32 conf_id = 4;
    required uint32 session_id = 5;
    required uint32 channel_id = 6;
    required bool upward = 7;
    required bool reliability = 8;
    required RCPduPriority_E priority = 9;
    required bytes data = 10;
    optional uint32 peer = 11;
    optional RCPduSegment_E seg = 12;
    optional uint32 total_size = 13;
    optional uint32 site_id = 14;
    optional string user_id = 15;
    optional string user_name = 16;
    optional string user_role = 17;
    optional string device_type = 18;
    optional string site = 19;
}

//  Token management
message RCTokenGrabRequestPdu {
    optional RCPduType_E type = 1 [default = RCPDU_TOKEN_GRAB_REQUEST];
    required uint32 initiator = 2;
    required uint32 token_id = 3;
}

message RCTokenGrabConfirmPdu {
    optional RCPduType_E type = 1 [default = RCPDU_TOKEN_GRAB_CONFIRM];
    required uint32 initiator = 2;
    required uint32 token_id = 3;
    required RCPduResult_E result = 4;
    required RCPduTokenStatus_E status = 5;
}

message RCTokenInhibitRequestPdu {
    optional RCPduType_E type = 1 [default = RCPDU_TOKEN_INHIBIT_REQUEST];
    required uint32 initiator = 2;
    required uint32 token_id = 3;
}

message RCTokenInhibitConfirmPdu {
    optional RCPduType_E type = 1 [default = RCPDU_TOKEN_INHIBIT_CONFIRM];
    required uint32 initiator = 2;
    required uint32 token_id = 3;
    required RCPduResult_E result = 4;
    required RCPduTokenStatus_E status = 5;
}

message RCTokenGiveRequestPdu {
    optional RCPduType_E type = 1 [default = RCPDU_TOKEN_GIVE_REQUEST];
    required uint32 initiator = 2;
    required uint32 token_id = 3;
    required uint64 recipient = 4;
}

message RCTokenGiveIndicationPdu {
    optional RCPduType_E type = 1 [default = RCPDU_TOKEN_GIVE_INDICATION];
    required uint32 initiator = 2;
    required uint32 token_id = 3;
    required uint64 recipient = 4;
}

message RCTokenGiveResponsePdu {
    optional RCPduType_E type = 1 [default = RCPDU_TOKEN_GIVE_RESPONSE];
    required uint32 token_id = 2;
    required uint64 recipient = 3;
    required RCPduResult_E result = 4;
}

message RCTokenGiveConfirmPdu {
    optional RCPduType_E type = 1 [default = RCPDU_TOKEN_GIVE_CONFIRM];
    required uint32 token_id = 2;
    required uint64 recipient = 3;
    required RCPduResult_E result = 4;
    required RCPduTokenStatus_E status = 5;
}

message RCTokenPleaseRequestPdu {
    optional RCPduType_E type = 1 [default = RCPDU_TOKEN_PLEASE_REQUEST];
    required uint32 initiator = 2;
    required uint32 token_id = 3;
}

message RCTokenPleaseIndicationPdu {
    optional RCPduType_E type = 1 [default = RCPDU_TOKEN_PLEASE_INDICATION];
    required uint32 initiator = 2;
    required uint32 token_id = 3;
}

message RCTokenReleaseRequestPdu {
    optional RCPduType_E type = 1 [default = RCPDU_TOKEN_RELEASE_REQUEST];
    required uint32 initiator = 2;
    required uint32 token_id = 3;
}

message RCTokenReleaseConfirmPdu {
    optional RCPduType_E type = 1 [default = RCPDU_TOKEN_TEST_REQUEST];
    required uint32 initiator = 2;
    required uint32 token_id = 3;
    required RCPduResult_E result = 4;
    required RCPduTokenStatus_E status = 5;
}

message RCTokenTestRequestPdu {
    optional RCPduType_E type = 1 [default = RCPDU_TOKEN_TEST_REQUEST];
    required uint32 initiator = 2;
    required uint32 token_id = 3;
}

message RCTokenTestConfirmPdu {
    optional RCPduType_E type = 1 [default = RCPDU_TOKEN_TEST_CONFIRM];
    required uint32 initiator = 2;
    required uint32 token_id = 3;
    required RCPduTokenStatus_E status = 4;
}

//gcc.proto

option optimize_for = LITE_RUNTIME;
message RCConferenceJoinRequestPdu {
    required RCPduType_E type = 1 [default = RCPDU_CONFERENCE_JOIN_REQUEST];
    required uint32 initiator = 2;
    required RCPduNodeType_E node_type = 3;
    required RCConferenceDescriptorPdu class_description = 4;//conf_desc
}

message RCConferenceJoinResponsePdu {
    optional RCPduType_E type = 1 [default = RCPDU_CONFERENCE_JOIN_RESPONSE];
    required uint32 conf_id = 2;
    required RCPduResult_E result = 3;
    optional RCConferenceDescriptorPdu class_description = 4;
}

message RCConferenceInviteRequestPdu {
    optional RCPduType_E type = 1 [default = RCPDU_CONFERENCE_INVITE_REQUEST];
    required uint32 initiator = 2;
    required RCConferenceDescriptorPdu class_description = 3;
}

message RCConferenceInviteResponsePdu {
    optional RCPduType_E type = 1
    [default = RCPDU_CONFERENCE_INVITE_RESPONSE];
    required RCPduResult_E result = 2;
    optional bytes user_data = 3;
}

message RCConferenceLockRequestPdu {
    optional RCPduType_E type = 1 [default = RCPDU_CONFERENCE_LOCK_REQUEST];
}

message RCConferenceLockResponsePdu {
    optional RCPduType_E type = 1 [default = RCPDU_CONFERENCE_LOCK_RESPONSE];
    required RCPduResult_E result = 2;
}

message RCConferenceLockIndicationPdu {
    optional RCPduType_E type = 1
    [default = RCPDU_CONFERENCE_LOCK_INDICATION];
}

message RCConferenceUnlockRequestPdu {
    optional RCPduType_E type = 1 [default = RCPDU_CONFERENCE_UNLOCK_REQUEST];
}

message RCConferenceUnlockResponsePdu {
    optional RCPduType_E type = 1
    [default = RCPDU_CONFERENCE_UNLOCK_RESPONSE];
    required RCPduResult_E result = 2;
}

message RCConferenceUnlockIndicationPdu {
    optional RCPduType_E type = 1
    [default = RCPDU_CONFERENCE_UNLOCK_INDICATION];
}

message RCConferenceLeaveRequestPdu {
    optional RCPduType_E type = 1 [default = RCPDU_CONFERENCE_LEAVE_REQUEST];
    required RCPduReason_E reason = 2;
}

message RCConferenceTerminateRequestPdu {
    optional RCPduType_E type = 1
    [default = RCPDU_CONFERENCE_TERMINATE_REQUEST];
    required RCPduReason_E reason = 2;
}

message RCConferenceTerminateResponsePdu {
    optional RCPduType_E type = 1
    [default = RCPDU_CONFERENCE_TERMINATE_RESPONSE];
    required RCPduResult_E result = 2;
}

message RCConferenceTerminateIndicationPdu { // MCS_Uniform_Send_Data on GCC_Broadcast_Channel
    optional RCPduType_E type = 1
    [default = RCPDU_CONFERENCE_TERMINATE_INDICATION];
    required RCPduReason_E reason = 2;
}

message RCConferenceEjectUserRequestPdu { // MCS_Send_Data on Node ID Channel of Top GCC
    optional RCPduType_E type = 1
    [default = RCPDU_CONFERENCE_EJECT_USER_REQUEST];
    required uint32 ejected_node_id = 2;
    required RCPduReason_E reason = 3;
}

message RCConferenceEjectUserResponsePdu { // MCS_Send_Data on Node ID Channel of requester
    optional RCPduType_E type = 1
    [default = RCPDU_CONFERENCE_EJECT_USER_RESPONSE];
    required uint32 ejected_node_id = 2;
    required RCPduResult_E result = 3;
}

message RCConferenceEjectUserIndicationPdu { // MCS_Uniform_Send_Data on GCC_Broadcast_Channel
    optional RCPduType_E type = 1
    [default = RCPDU_CONFERENCE_EJECT_USER_INDICATION];
    required uint32 ejected_node_id = 2;
    required RCPduReason_E reason = 3;
}

message RCRosterUpdateIndicationPdu { // MCS_Send_Data on Node ID Channel or
// MCS_Uniform_Send_Data on GCC_Broadcast_Channel
    optional RCPduType_E type = 1 [default = RCPDU_ROSTER_UPDATE_INDICATION];
    required bool full_refresh = 2; // Conference Roster and all
    repeated RCNodeRecordPdu node_record = 3;
    repeated RCApplicationRecordPdu app_record = 4;
}

message RCRegistryUpdateRequestPdu { // MCS_Send_Data on Node ID Channel of Top GCC
    optional RCPduType_E type = 1 [default = RCPDU_REGISTRY_UPDATE_REQUEST];
    required uint32 key_id = 2;
    required uint32 obj_id = 3;
    required bytes user_data = 4;
}

message RCRegistryUpdateIndicationPdu { // MCS_Send_Data on Node ID Channel of Top GCC
    optional RCPduType_E type = 1 [default = RCPDU_REGISTRY_UPDATE_RESPONSE];
    required uint32 key_id = 2;
    required uint32 obj_id = 3;
    required bytes user_data = 4;
}

message RCRegistryUpdateResponsePdu { // MCS_Send_Data on Node ID Channel of requester
    optional RCPduType_E type = 1 [default = RCPDU_REGISTRY_UPDATE_INDICATION];
    required uint32 key_id = 2;
    required uint32 obj_id = 3;
    required RCPduResult_E result = 4;
}

message RCFunctionNotSupportedResponsePdu {
    optional RCPduType_E type = 1
    [default = RCPDU_FUNCTION_NOT_SUPPORTED_RESPONSE];
    required uint32 request_pdu_id = 2;
}

//ape.proto

option optimize_for = LITE_RUNTIME;
message RCConferenceSendDataRequestPdu {
    optional uint32 initiator = 1;
    optional uint32 peer = 2;
    required bool is_public = 3;
    required bytes user_data = 4;
    optional uint32 action_type = 5;//消息的指令类型
}

message RCThirdSendBroadcastDataRequestPdu {
    optional uint32 initiator = 1;
    optional uint32 peer = 2;
    optional bool is_public = 3;
    optional bytes message = 4;
}

message RCChatSendDataRequestPdu {
    optional uint32 initiator = 1;
    optional uint32 peer = 2;
    required bool is_public = 3;
    required bytes user_data = 4;
    required string from_role = 5;
    required bytes from_name = 6;
}

message RCDocSendDataModelPdu {
    required uint32 item_idx=1;//唯一标识
    required uint32 owner=2;
    optional uint32 from=3;
    optional uint32 cur_page_no=4;
    optional uint32 page_num  =5;
    optional string file_type=6;
    optional string creat_user_id=7;//创建文档userid
    optional string relative_url=8;//文档相对地址
    optional string url  =9;//文档地址
    optional uint32 cur_V=10;
    optional uint32 cur_H=11;
    optional uint32 scale=12;
    optional bool visible=13;
    optional uint32 action=14;//0,无操作, 1翻页、2.显示/隐藏
    optional string doc_id=15;//文档在服务器数据库中的唯一id
    optional string file_name=16;//文档的名字
    optional string dynamic_TS=17;//"dynamicTransferStatic": "0"
    optional string md5=18;//md5
    optional uint32 show_type=19;//文档显示模式
    optional uint32 animation_step=20 [default =1];//当前页码的动画步数

}

message RCMediaSharedSendDataModelPdu {
    optional uint32 item_idx=1;//唯一标识
    optional uint32 owner=2;
    optional uint32 from=3;
    optional string file_type=4;
    optional string creat_user_id=5;//创建文件userid
    optional string url  =6;//文件地址
    optional uint32 status=7;//状态0停止  1播放 2暂停
    optional string fileId=8;//文件在服务器数据库中的唯一id
    optional string file_name=9;//文件的名字
    optional uint32 seek=10;//seek
}

message RCDocBroadcastDataRequestPdu {
    optional uint32 from_node_id = 1;//发起人
    optional uint32 to_node_id = 2;//接收人,如果是0就是所有人都接收
    optional uint32 actionType = 3;//消息指令类型;
    optional bytes  data = 4;//其他数据,这个根据actionType来确定数据的结构
}

message RCGiftSendDataRequestPdu {
    optional uint32 initiator = 1;
    required uint32 peer = 2;
    required uint32 index = 3;
    required uint32 num = 4;
    optional bytes user_data = 5;
}

message RCAudioSendDataRequestPdu1 {
    optional uint32 initiator = 1;
    required bytes user_data = 2;
}
message RCAudioSendDataRequestPdu {
    required uint32 from_node_id = 1;//发起人
    optional uint32 to_node_id = 2;//接收人,如果是0就是所有人都接收
    optional uint32 actionType = 3;//消息指令类型;
    optional bytes  data = 4;//其他数据,这个根据actionType来确定数据的结构
}

message RCVideoSendDataRequestPdu {
    required uint32 from_node_id = 1;//发起人
    optional uint32 to_node_id = 2;//接收人,如果是0就是所有人都接收
    optional uint32 actionType = 3;//消息指令类型;
    optional bytes  data = 4;//其他数据,这个根据actionType来确定数据的结构
}

message RCAudioChannelInfoRecordPdu {
    required uint32 status = 1;
    required uint32 device_id = 2;
    required uint32 framerate = 3;
    required uint32 bitrate = 4;
    required uint32 codec = 5;
}
message RCAudioChannelInfoPdu {
     optional uint32 status = 1;//开启的状态
    optional uint32 channel_id = 2;//唯一的频道id
    optional uint32 timestamp = 3;//更新的时间戳
    optional uint32 from_node_id = 4;//发起者的id
    optional uint32 to_node_id = 5;//接收者的id,(如果是0,所有人都接收)
    optional uint32 media_type = 6;//媒体类型:视频(包含音频)或音频
    optional uint32 class_id = 7;//课堂号
    optional string site_id = 8;//站点号
    optional string user_id = 9;//用户的userId
    optional string stream_id = 10;//流名称
    optional string user_name = 11;//用户的名字
    optional string user_role = 12;//用户的身份
    optional uint32 screenWidth = 13;//屏幕分辨率宽
    optional uint32 screenHeight = 14;//屏幕分辨率高
}

message RCVideoChannelInfoPdu {
    optional uint32 status = 1;//开启的状态
    optional uint32 channel_id = 2;//唯一的频道id
    optional uint32 timestamp = 3;//更新的时间戳
    optional uint32 from_node_id = 4;//发起者的id
    optional uint32 to_node_id = 5;//接收者的id,(如果是0,所有人都接收)
    optional uint32 media_type = 6;//媒体类型:视频(包含音频)或音频
    optional uint32 class_id = 7;//课堂号
    optional string site_id = 8;//站点号
    optional string user_id = 9;//用户的userId
    optional string stream_id = 10;//流名称
    optional string user_name = 11;//用户的名字
    optional string user_role = 12;//用户的身份
    optional uint32 screenWidth = 13;//屏幕分辨率宽
    optional uint32 screenHeight = 14;//屏幕分辨率高

}

message RCVideoChannelInfoRecordPdu {
    optional uint32 status = 1;
    optional uint32 device_id = 2;
    optional uint32 width = 3;
    optional uint32 height = 4;
    optional uint32 framerate = 5;
    optional uint32 bitrate = 6;
    optional uint32 codec = 7;
    optional string peer_id = 8;
    optional string url = 9;
    optional uint32 type = 10;
    optional string shamlive = 11;
    optional uint32 livetype = 12;
    optional uint32 releaseGrab = 13;
    optional string curTime = 14;
}

message RCAudioDeviceInfoRecordPdu {
    required uint32 device_id = 1;
    required string device_name = 2;
}

message RCVideoDeviceInfoRecordPdu {
    required uint32 device_id = 1;
    required string device_name = 2;
}
message MsListItemPdu {
    optional string ip = 1;
    optional string port = 2;
    optional string country = 3;
    optional string province = 4;
    optional string city = 5;
}
message RCNodeInfoRecordPdu {
    required uint32 node_id = 1;
    required string name = 2;
    required uint32 role = 3;
    required uint32 level = 4;
    repeated RCAudioDeviceInfoRecordPdu audio_records = 5;
    repeated RCVideoDeviceInfoRecordPdu video_records = 6;
    optional uint32 status = 7;
    optional bytes user_data = 8;
    optional string user_id = 9;
    optional uint32 handUpTime = 10;
    optional uint32 deviceType = 11;
    optional uint32 mobileDirection = 12;
    repeated string microphones = 13;
    repeated string cameras = 14;
    optional uint32 openCamera=15;
    optional uint32 openMicrophones=16;
    optional uint32 videoQuality=17;//设置分辨率的
    optional string userIp=18;
    optional uint32 curVideoQuality=19;
    optional uint32 micGain=20;
    optional uint32 speakerVolume=21;
    optional uint32 micCode=22;
    optional string curCamera=23;
    optional string curMicrophone=24;
    optional string country=25;
    optional string city=26;
    optional string province=27;
    optional string isp=28;
    repeated MsListItemPdu msList = 29;
}

message RCVotingPollSettingsPdu {
    required bool timer = 1;
    optional uint32 time_limit = 2;
    optional uint32 total_score = 3;
}

message RCVotingPollResultPdu {
    required string title = 1;
    required string content = 2;
    optional uint32 score = 3;
}

message RCVotingPollQuestionPdu {
    required uint32 index = 1;
    required uint32 type = 2;
    required string title = 3;
    repeated string options = 4;
    optional uint32 score = 5;
    optional uint32 time_limit = 6;
    optional string restrict_input = 7;
    optional uint32 char_limit = 8;
    optional string answer = 9;
    repeated uint32 selections = 10;
    repeated string responses = 11;
}

message RCVotingPollRecordPdu {
    required RCVotingPollSettingsPdu settings = 1;
    required string title = 2;
    repeated RCVotingPollResultPdu results = 3;
    repeated RCVotingPollQuestionPdu questions = 4;
}

message RCNodeInfoUserDataPdu {
    optional string device = 1;//设备名称
    optional bool has_camera = 2;//是否有摄像头可用
    optional bool has_microphone = 3;//麦克风是否可用
    optional string browser = 4;//浏览器
    optional string qq = 5;//qq
    optional string skype = 6;//skype
}

message RCTabUpdateDataRequestPdu {
    optional uint32 id = 1;
    optional bytes action = 2;
    optional uint32 uncomprLen =3;
}

message RCWhiteBoardDataModelPdu {
     required uint32 type= 1;//白板类型
     required uint32 itemIdx= 2;//itemIdx 每一次绘制的唯一标识
     required uint32 initiator=3; //绘制来自谁
     required uint32 parentId=4; //父级的id
     required uint32 cur_page_no= 5;//页码
     optional string pointGroup=6; //坐标点集数组的JSON字符串
     optional string color=7  [default = "#000000"]; //颜色
     optional uint32 thickness= 8 ;//线条粗细
     optional uint32 radius= 9;//园的半径
     optional uint32 fontSize= 10;//字体大小
     optional string fontName= 11;//字体名称
     optional string text= 12;//文本内容
     optional bytes data = 13;//暂时预留的参数
}
message RCClassSendDataModelPdu {
     optional uint32 item_idx=1;
     optional uint32 from=2;
     optional uint32 owner=3;
     optional uint32 action_type=4;//状态改变的类型
     optional RCClassStatusInfoPdu class_status_info=5;//当前课堂状态的信息
}
message RCClassStatusInfoPdu {
     optional uint32 node_id=1;//mcu中的唯一ID
     optional string user_id=2;
     optional string user_name=3;
     optional string site_id=4;//站点号
     optional uint32 class_id=5;
     optional string class_name=6;
     required uint32 class_type=7;//课堂类型
     required uint32 class_status=9;//课堂的状态
     optional string class_startTime=10;//课堂点击开始时间
     optional string class_stopTime=11;//最后一次停止的时间(点暂停或结束),每次发送数据都获取当前时间戳
     optional uint32 class_timestamp=12;//相对于点开始课堂的时间戳
     optional string class_beginTime=13;//课堂创建的时间,这个是Sass返回的
     optional string class_endTime=14;//课堂结束的时间,这个是Sass返回的
     optional bool record_status=15;//当前录制状态
     optional uint32 record_timestamp=16;//相对于首次开始录制的时间戳
     optional string record_fileName=17;//录制的文件名
     optional string record_downloadUrl=18;//下载地址
     optional uint32 server_timestamp=19;//当前的系统时间戳
     optional uint32 active_doc_id=20;//当前激活的文档id
     optional uint32 active_doc_cur_page=21;//当前激活的文档的当前页
     optional bool isStopAllPublishMedia=22;//是否停止推流
}

message RCConferenceRecordRequestPdu {
    	optional uint32 initiator = 1;	// 发起录像指令的node id
		optional bool record = 2;		// 录像指令 true:开始录像, false:停止录像
    	optional uint32 class_time = 3;	// 课堂进行时间(秒)
		optional string filename = 4;	// 录像文件名称,filename中增加目录部分
}

message RCQuestionDataModelPdu {
     optional uint32 item_idx=1;
     optional uint32 from=2;
     optional uint32 owner=3;
     optional uint32 type=4;//类型
     optional uint32 questionId=5;//题目id
     optional uint32 timeLimit=6;//有效时间
     optional string content=7;//题干
     optional uint32 timestamp=8;//创建的时间
     repeated string options=9;//选项列表
     repeated uint32 answer=10;//用户选择的答案选项索引
     repeated uint32 correct=11;//正确答案索引
     repeated string totalUserList=12;//参与的人员userId列表
}
//end
`;