… | |
… | |
20 | Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
20 | Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
21 | --> |
21 | --> |
22 | </head> |
22 | </head> |
23 | <body> |
23 | <body> |
24 | |
24 | |
25 | <h1>$Revision: 1.33 $</h1> |
25 | <h1>$Revision: 1.34 $</h1> |
26 | |
26 | |
27 | <h1>KGS Protocol Description</h1> |
27 | <h1>KGS Protocol Description</h1> |
28 | |
28 | |
29 | <p>This XML document describes the KGS protocol. It is also used |
29 | <p>This XML document describes the KGS protocol. It is also used |
30 | to automatically generate the perl parser for all the messages and |
30 | to automatically generate the perl parser for all the messages and |
… | |
… | |
576 | <struct name="game_record" class="KGS::GameRecord"> |
576 | <struct name="game_record" class="KGS::GameRecord"> |
577 | <p>A single game record entry, as seen in <ref ref="userinfo"/>.</p> |
577 | <p>A single game record entry, as seen in <ref ref="userinfo"/>.</p> |
578 | |
578 | |
579 | <member name="timestamp" type="timestamp"/> |
579 | <member name="timestamp" type="timestamp"/> |
580 | Time this game was played. |
580 | Time this game was played. |
581 | <member name="flags" type="U8"/> |
581 | <member name="type" type="U8"/> |
582 | High four bits are handicap, low four bits are gametype (encoded strangely? unclear). |
582 | High four bits are handicap, low four bits are gametype (encoded strangely? unclear). |
583 | <member name="user1" type="user"/> |
583 | <member name="user1" type="user"/> |
584 | White, flags contain low 8 bits of revision (bits 16-23). |
584 | White, flags contain low 8 bits of revision (bits 16-23). |
585 | <member name="user2" type="user"/> |
585 | <member name="user2" type="user"/> |
586 | Black, flags contain high 8 bits of revision (bits 16-23). |
586 | Black, flags contain high 8 bits of revision (bits 16-23). |
587 | <member name="user3" type="user"/> |
587 | <member name="user3" type="user"/> |
|
|
588 | |
588 | Owner (or empty) |
589 | <p><p>Owner (or empty)</p> |
|
|
590 | |
|
|
591 | <p>The bits 16-24 of user1.flags and user2.flags give the high and |
|
|
592 | low bits of a revision number in case there are multiple similar |
|
|
593 | games.</p></p> |
|
|
594 | |
589 | <member name="komi" type="komi16"/> |
595 | <member name="komi" type="komi16"/> |
590 | <member name="score" type="score16"/> |
596 | <member name="score" type="score16"/> |
591 | <member name="status" type="U8"/> |
597 | <member name="status" type="U8"/> |
|
|
598 | |
592 | 0x80 inprogress |
599 | <p>0x80 game in progress</p> |
|
|
600 | |
593 | </struct> |
601 | </struct> |
594 | |
602 | |
595 | <h2>Server-generated messages</h2> |
603 | <h2>Server-generated messages</h2> |
596 | |
604 | |
597 | <message type="0001" name="login" src="server"> |
605 | <message type="0001" name="login" src="server"> |
… | |
… | |
638 | <member name="lastlogin" type="timestamp"/> |
646 | <member name="lastlogin" type="timestamp"/> |
639 | When the user logged in for the last time. |
647 | When the user logged in for the last time. |
640 | <!-- maybe more? --> |
648 | <!-- maybe more? --> |
641 | </message> |
649 | </message> |
642 | |
650 | |
643 | <message type="0018" name="login" src="server"> |
|
|
644 | <member name="result" type="CONSTANT" default='"login error 18"'/> |
|
|
645 | ** maybe more following? ** |
|
|
646 | </message> |
|
|
647 | |
|
|
648 | <message type="0022" name="login" src="server"> |
|
|
649 | I was blocked sooo many times for developing this client that it was |
|
|
650 | easy to figure out. The KGS admins sure need no extra nazi training |
|
|
651 | :( |
|
|
652 | <member name="reason" type="STRING"/> |
|
|
653 | <member name="result" type="CONSTANT" default='"user or ip blocked"'/> |
|
|
654 | </message> |
|
|
655 | |
|
|
656 | <message type="0013" name="msg_chat" src="server"> |
651 | <message type="0013" name="msg_chat" src="server"> |
657 | <member name="user1" type="username"/> |
652 | <member name="name" type="username"/> |
658 | <member name="user2" type="username"/> |
653 | <member name="name2" type="username"/> |
659 | <member name="message" type="STRING"/> |
654 | <member name="message" type="STRING"/> |
660 | </message> |
655 | </message> |
661 | |
656 | |
662 | <message type="0015" name="stats" src="server"> |
657 | <message type="0015" name="stats" src="server"> |
663 | <member name="ver_major" type="U16"/> |
658 | <member name="ver_major" type="U16"/> |
… | |
… | |
690 | |
685 | |
691 | <message type="0016" name="idle_warn" src="server"> |
686 | <message type="0016" name="idle_warn" src="server"> |
692 | idle warning, autologout soon (10 minutes...) |
687 | idle warning, autologout soon (10 minutes...) |
693 | </message> |
688 | </message> |
694 | |
689 | |
|
|
690 | <message type="0018" name="login" src="server"> |
|
|
691 | <member name="result" type="CONSTANT" default='"login error 18"'/> |
|
|
692 | ** maybe more following? ** |
|
|
693 | </message> |
|
|
694 | |
|
|
695 | <message type="0022" name="login" src="server"> |
|
|
696 | I was blocked sooo many times for developing this client that it was |
|
|
697 | easy to figure out. The KGS admins sure need no extra nazi training |
|
|
698 | :( |
|
|
699 | <member name="reason" type="STRING"/> |
|
|
700 | <member name="result" type="CONSTANT" default='"user or ip blocked"'/> |
|
|
701 | </message> |
|
|
702 | |
695 | <message type="001b" name="timewarning_default" src="server"> |
703 | <message type="001b" name="timewarning_default" src="server"> |
696 | WILD guess |
704 | WILD guess |
697 | <member name="channel" type="U16"/> |
705 | <member name="channel" type="U16"/> |
698 | <member name="time" type="U16"/> |
706 | <member name="time" type="U16"/> |
699 | </message> |
707 | </message> |
… | |
… | |
741 | <message type="0202" name="notify_event" src="server"> |
749 | <message type="0202" name="notify_event" src="server"> |
742 | # maybe soe notify? Totally unclear. |
750 | # maybe soe notify? Totally unclear. |
743 | # loc 0" type="chat(?) loc 1 => gameinfo?, loc 2 => game result (more data) |
751 | # loc 0" type="chat(?) loc 1 => gameinfo?, loc 2 => game result (more data) |
744 | <member name="event" type="U32"/> |
752 | <member name="event" type="U32"/> |
745 | <member name="user" type="user"/> |
753 | <member name="user" type="user"/> |
746 | <member name="lotsofinfo" type="game_record" guard-member="event" guard-cond="== 2"/> |
754 | <member name="gamerecord" type="game_record" guard-member="event" guard-cond="== 2"/> |
747 | <p>Game result record?</p> |
755 | <p>Game result record?</p> |
748 | |
756 | |
749 | </message> |
757 | </message> |
750 | |
758 | |
751 | <message type="0310" name="priv_room" src="server"> |
759 | <message type="0310" name="priv_room" src="server"> |