| 676 | } |
| 677 | |
| 678 | void sendf(int cn, int chan, const char *format, ...) |
| 679 | { |
| 680 | int exclude = -1; |
| 681 | bool reliable = false; |
| 682 | if(*format=='r') { reliable = true; ++format; } |
| 683 | packetbuf p(MAXTRANS, reliable ? ENET_PACKET_FLAG_RELIABLE : 0); |
| 684 | va_list args; |
| 685 | va_start(args, format); |
| 686 | while(*format) switch(*format++) |
| 687 | { |
| 688 | case 'x': // exclude client from getting this message |
| 689 | exclude = va_arg(args, int); |
| 690 | ASSERT(cn == -1); |
| 691 | break; |
| 692 | |
| 693 | case 'v': // integer array of variable length |
| 694 | { |
| 695 | int n = va_arg(args, int); |
| 696 | int *v = va_arg(args, int *); |
| 697 | loopi(n) putint(p, v[i]); |
| 698 | break; |
| 699 | } |
| 700 | |
| 701 | case 'k': // 32 bytes (uchar) |
| 702 | p.put(va_arg(args, uchar *), 32); |
| 703 | break; |
| 704 | |
| 705 | case 'i': // one to nine integer arguments |
| 706 | { |
| 707 | int n = isdigit(*format) ? *format++-'0' : 1; |
| 708 | loopi(n) putint(p, va_arg(args, int)); |
| 709 | break; |
| 710 | } |
| 711 | |
| 712 | case 'a': // one to nine mostly positive integer arguments |
| 713 | { |
| 714 | int n = isdigit(*format) ? *format++-'0' : 1; |
| 715 | loopi(n) putaint(p, va_arg(args, int)); |
| 716 | break; |
| 717 | } |
| 718 | |
| 719 | case 'u': // unsigned integer argument |
| 720 | putuint(p, va_arg(args, int)); |
| 721 | break; |
| 722 | |
| 723 | case 'I': // IPv4 address argument |
| 724 | putip4(p, va_arg(args, enet_uint32)); |
| 725 | break; |
| 726 | |
| 727 | case 's': // string |
| 728 | sendstring(va_arg(args, const char *), p); |
| 729 | break; |
| 730 | |
| 731 | case 'm': // raw message block |
| 732 | { |
| 733 | int n = va_arg(args, int); |
| 734 | p.put(va_arg(args, uchar *), n); |
| 735 | break; |
no test coverage detected