public static void HandleReadySignal(Session session, Session.EncodingScheme encoding) { session.AddToContext("ready", 1); string opponent_id; Log.Verify(session.GetFromContext("opponent", out opponent_id)); Session opponent_session = AccountManager.FindLocalSession(opponent_id); // 상대의 상태를 확인합니다. if (opponent_session != null && (opponent_session.IsTransportAttached(Session.Transport.kTcp) || opponent_session.IsTransportAttached(Session.Transport.kWebSocket))) { long is_opponent_ready = 0; opponent_session.GetFromContext("ready", out is_opponent_ready); if (is_opponent_ready == 1) { // 둘 다 준비가 되었습니다. 시작 신호를 보냅니다. if (encoding == Session.EncodingScheme.kJsonEncoding) { JObject response = Utility.MakeResponse("ok"); session.SendMessage("start", response); opponent_session.SendMessage("start", response); } else { Log.Assert(encoding == Session.EncodingScheme.kProtobufEncoding); FunMessage funmsg = new FunMessage(); GameStartMessage msg = new GameStartMessage(); msg.result = "ok"; session.SendMessage("start", funmsg); funmsg.AppendExtension_game_start(msg); opponent_session.SendMessage("start", funmsg); } } } else { // 아직 상대가 방에 없기 때문에 기다린다. } }
public static void AppendExtension_game_start(this FunMessage message, GameStartMessage value) { ProtoBuf.Extensible.AppendValue(message, (int)ExtendedMessageFieldNumber.FunMessage_game_start, value); }
public static bool TryGetExtension_game_start(this FunMessage message, out GameStartMessage value) { return(ProtoBuf.Extensible.TryGetValue(message, (int)ExtendedMessageFieldNumber.FunMessage_game_start, out value)); }