public static void RegisterSubscribe(string subscript_key) { try { Log.Information("sub {0}", subscript_key); ISubscriber sub = Cache.Instance.GetSubscriber(); sub.Subscribe(subscript_key, async(channel, message) => { try { Log.Information($"redis msg {message}"); var request = JsonConvert.DeserializeObject <ServerCommon.DebugCommand>(message); JDebugCommandData commandData = DebugCommandData.dataMap.Values.Where(x => x.Command == request.cmd).FirstOrDefault(); if (commandData == null || commandData == default(JDebugCommandData)) { Log.Information($"not exist received msg {request.cmd}"); return; } if (commandData.Apply == "all") // 모든 서버가 실행이 되야 할 경우 { // 디버그 커맨드 실행 await Lobby.DebugCommand.Execute(null, request.cmd, request.param1, request.param2, request.param3, request.param4); } else { // 한서버에서만 처리되도록 수정 var ret = await Cache.Instance.GetDatabase().StringSetAsync($"lobby_msg_lock:{request.msg_id}", 0, new TimeSpan(0, 3, 0), When.NotExists); if (ret == false) { Log.Information("already receive msg"); return; } // 세션 찾기 및 세션 만들기 var(session, err, player_id) = await Session.LoginSession("", request.player_id, "", false, null); if (session == null) { Log.Error("login {0}", request.player_id); return; } // 디버그 커맨드 실행 await Lobby.DebugCommand.Execute(session, request.cmd, request.param1, request.param2, request.param3, request.param4); } } catch (Exception ex) { Log.Error($"redis sub callback error {ex.ToString()}"); } }); } catch (Exception ex) { Log.Error($"redis sub error {ex.ToString()}"); } }
public static JDebugCommandData GetData(int id) { if (dataMap == null || dataMap.Count == 0) { LoadData(); } JDebugCommandData data = null; dataMap.TryGetValue(id, out data); return(data); }