Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
 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;
     }
 }
Example #5
0
 public void Send(ServerResult sr)
 {
     Send(sr.Value());
 }