public static ServerResult RegDevice(string key, string machine) { ServerResult ret = new ServerResult(false, ""); string r = key_device.GetFirstYWithX(key); if (r == null) { ret.IsSuccess = false; ret.Note = "nokey"; } else if (r != "{noplayer}" && r != "{using}") { ret.IsSuccess = false; ret.Note = "nokey"; } else { key_device.SetXToY(key, machine); key_banned.SetXToY(key, "{notbanned}"); ret.IsSuccess = true; ret.Note = "succ"; Logger.WriteLine("设备ID:{0}已绑定密匙:{1}", machine, key); Logger.WriteLine("设备ID:{0}已登陆密匙:{1}", machine, key); } return(ret); }
public static ServerResult LogDevice(string machine) { ServerResult ret = new ServerResult(false, ""); string key = key_device.GetFirstXWithY(machine); if (key == null) { ret.IsSuccess = false; ret.Note = "nomac"; } else if (key_banned.GetFirstYWithX(key) == "{notbanned}") { for (int i = 0; i < ForgetiveServer.Users.Count; i++) { UserSocketState sock = ForgetiveServer.Users[i]; if (sock == null) { ForgetiveServer.Users.RemoveAt(i); i--; continue; } if (sock.UsedKey == key) { ForgetiveServer.Close(sock, null, false); ForgetiveServer.Users.RemoveAt(i); i--; continue; } } ret.IsSuccess = true; ret.InternalEx = key; ret.Note = ForgetiveServer.Base64Encode(key_nick.GetFirstYWithX(key)); Logger.WriteLine("设备ID:{0}已登陆密匙:{1}", machine, key); } else { ret.IsSuccess = false; ret.Note = "banned"; } return(ret); }
ServerResult OnRecvServerData() { string cmd = RecvParams[0]; ServerResult ret; switch (cmd) { case "rename": ret = new ServerResult(); lock (Program.key_nick) { string rec = ForgetiveServer.Base64Decode(RecvParams[1]); if (CheckNickName(rec)) { Program.key_nick.SetXToY(UsedKey, rec); NickName = rec; ret.IsSuccess = true; } else { ret.IsSuccess = false; } } return(ret); case "minf": return(new ServerResult(true, XCoin + ";" + BP)); case "join": if (RecvParams.Length == 2) { GlobalServer.JoinMap(this, RecvParams[1]); } break; } return(null); }
public void RecvData() { RecvParams = RecvString.Split('\n'); if (!IsMatched) { ServerResult ret; if (IsMatchVersion) { if (RecvParams.Length == 3) { if (RecvParams[0] == "reg") { ret = Program.RegDevice(RecvParams[1], RecvParams[2]); if (ret.IsSuccess) { IsMatched = true; UsedKey = RecvParams[1]; NickName = Program.key_nick.GetFirstYWithX(UsedKey, GetMD5(UsedKey)); } Send(ret.Value()); return; } else { return; } } } if (RecvString.Contains("PUBLICTIMESTAMP")) { if (RecvString.Split(';').Length == 2) { string s = RecvString.Split(';')[1]; if (int.TryParse(s, out int v)) { version = new VersionControl.Version(v); if (ServerVersion.CheckVersion(v)) { IsMatchVersion = true; } } } Send(DateTime.Now.ToBinary().ToString() + ";" + IsMatchVersion); return; } if (IsMatchVersion) { //登陆取到的设备 ret = Program.LogDevice(RecvString); if (ret.IsSuccess) { IsMatched = true; UsedKey = ret.InternalEx; //在key:nick表中获取玩家昵称,若为空用Key的MD5值临时代替 NickName = Program.key_nick.GetFirstYWithX(UsedKey, GetMD5(UsedKey)); Send(ret.Value()); } else { if (ret.Note == "nomac") { if (genKey.Gen()) { ret.Note = genKey.Result; } } Send(ret.Value()); } } return; } if (RecvParams.Length > 1) { if (RecvParams[0] == "map") { if (PlayerContext != null) { PlayerContext.EvalCommand(RecvParams); } return; } } try { ServerResult sresult = OnRecvServerData(); if (sresult != null) { Send(sresult); } } catch { ConsoleColor color = Console.ForegroundColor; Console.ForegroundColor = ConsoleColor.Red; Console.Write("在处理来自"); SayPlayerInfo(); Logger.WriteLine("的数据时,遇到了错误。"); Logger.WriteLine("这通常说明此玩家有异常的游戏行为或使用了错误版本的客户端。"); ForgetiveServer.Close(this); Console.ForegroundColor = color; } }
public void Send(ServerResult sr) { Send(sr.Value()); }