Esempio n. 1
0
        public static void ProcessGroupKick(string targetPlayerName, Socket connection)
        {
            Player thisPlayer   = GetPlayer(connection);
            bool   isGameServer = GameServers.Contains(connection);

            // if initiating party is player and player is not in group, etc...
            if (!isGameServer && (thisPlayer == null || thisPlayer.Group == null || thisPlayer.Group.Leader != thisPlayer))
            {
                return;
            }

            //find the player that we want to kick
            Player targetPlayer = Players.SingleOrDefault(x => x.Name == targetPlayerName);

            if (targetPlayer == null || targetPlayer.Group == null || (!isGameServer && (targetPlayer.Group != thisPlayer.Group)))
            {
                return;
            }

            Console.WriteLine($"Kicking from group: {targetPlayerName}");

            if (isGameServer) //kick issued by server (because of disconnect), kick after a delay of X seconds
            {
                CreatePendingKick(targetPlayer);
            }
            else
            {
                RemoveFromGroup(targetPlayer); //kick issued by group leader, kick immediately
                //notify the player that they were kicked from the clan
                byte[] message = MergeByteArrays(ToBytes(Command.GroupKick));
                targetPlayer.SendOrKick(message);
            }
        }
        public async Task CreateGameServer(GameServerDto gameServerDto)
        {
            if (gameServerDto == null)
            {
                throw new ArgumentNullException(nameof(gameServerDto));
            }

            var gameServer = new GameServers
            {
                ServerId                 = Guid.NewGuid(),
                Title                    = gameServerDto.Title,
                GameType                 = gameServerDto.GameType,
                Hostname                 = gameServerDto.Hostname,
                QueryPort                = gameServerDto.QueryPort,
                FtpHostname              = gameServerDto.FtpHostname,
                FtpUsername              = gameServerDto.FtpUsername,
                FtpPassword              = gameServerDto.FtpPassword,
                RconPassword             = gameServerDto.RconPassword,
                ShowOnBannerServerList   = gameServerDto.ShowOnBannerServerList,
                BannerServerListPosition = gameServerDto.BannerServerListPosition,
                HtmlBanner               = gameServerDto.HtmlBanner,
                ShowOnPortalServerList   = gameServerDto.ShowOnPortalServerList,
                ShowChatLog              = gameServerDto.ShowChatLog,
#pragma warning disable 618 // Required to prevent SQL error
                LiveLastUpdated = DateTime.UtcNow
#pragma warning restore 618
            };

            _legacyContext.GameServers.Add(gameServer);
            await _legacyContext.SaveChangesAsync();
        }
Esempio n. 3
0
 public static void KickConnection(Socket connection)
 {
     if (GameServers.Contains(connection))
     {
         KickServer(connection);
     }
     else
     {
         KickPlayer(GetPlayer(connection));
     }
 }
Esempio n. 4
0
 public static void ProcessLogin(string charName, Socket connection)
 {
     if (charName == "i am a game server") // Dear Gamedev! Change it to something else, it acts as a passphrase for the server to connect as one.
     {
         GameServers.Add(connection);
         InitializeGroupsOnServer();
         Console.WriteLine("A server logged in.");
     }
     else
     {
         PlayerLogin(connection, charName);
         Console.WriteLine("Player logged in: " + charName);
     }
 }
Esempio n. 5
0
        public ActionResult Save(SaveGameServers savemodel)
        {
            var gamelist = _mobilGameTask.GetAll(null, "").ToSelectList(c => c.ID.ToString(), c => c.GameName);

            gamelist.Insert(0, new SelectListItem
            {
                Selected = true,
                Text     = "请选择",
                Value    = string.Empty
            });
            ViewData["gamelist"] = gamelist;
            if (ModelState.IsValid)
            {
                if (savemodel.ID == null)
                {
                    var model = new GameServers
                    {
                        GameID     = savemodel.GameID,
                        ServerName = savemodel.ServerName,
                        ServerID   = savemodel.ServerID,
                        OpenTime   = savemodel.OpenTime,
                        CreateDate = DateTime.Now,
                        ServerStat = _mobilGameTask.GetById(savemodel.GameID).YunYingState,
                    };
                    _gameserversTask.Add(model);
                }
                else
                {
                    var model = _gameserversTask.GetById((int)savemodel.ID);

                    if (model == null)
                    {
                        return(AlertMsg("参数错误", HttpContext.Request.UrlReferrer.PathAndQuery));
                    }

                    model.GameID     = savemodel.GameID;
                    model.ServerName = savemodel.ServerName;
                    model.ServerID   = savemodel.ServerID;
                    model.OpenTime   = savemodel.OpenTime;

                    _gameserversTask.Update(model);
                }
                return(AlertMsg("保存成功", HttpContext.Request.UrlReferrer.PathAndQuery));
            }
            return(View(savemodel));
        }
Esempio n. 6
0
 internal void InitBaseData()
 {
     if (GameServers.Count() == 0)
     {
         var host = HostServers.Add(new HostServer()
         {
             SshUserName = "******", Name = "Griffon", Address = "griffon.tf-bollore.fr"
         }).Entity;
         GameServers.Add(new GameServer()
         {
             Label = "Griffon 01 (arma3-w, 2502)", HostServer = host, Type = GameServerType.Arma3, UserName = "******", BasePath = "/home/arma3-w/.steam/steamcmd/server", Address = "109.238.12.108", Port = 2502
         });
         GameServers.Add(new GameServer()
         {
             Label = "Griffon 02 (arma3-wpublic, 2402)", HostServer = host, Type = GameServerType.Arma3, UserName = "******", BasePath = "/home/arma3-wpublic/.steam/steamcmd/server", Address = "109.238.12.108", Port = 2402
         });
         SaveChanges();
     }
     SaveChanges();
 }
Esempio n. 7
0
        void StopEvent()
        {
            if (RunningEvent == null)
            {
                return;
            }
            var eventHadHeader = RunningEvent.ScrollingHeader != "";

            Program.MainForm.LogAppend("Stopping event...");
            RunningEvent = null;
            GameServers.ForEach(x =>
            {
                x.Value.ResetRates();
                if (eventHadHeader)
                {
                    var p = new Packet(ISServerMessages.WSE_ChangeScrollingHeader);
                    p.WriteString("");
                    x.Value.ActiveServerConnection?.SendPacket(p);
                }
            });
        }
Esempio n. 8
0
        public void CheckForEvents()
        {
            var currentDate = MasterThread.CurrentDate;

            if (RunningEvent != null)
            {
                // Not yet expired
                if (RunningEvent.EndTime >= currentDate)
                {
                    return;
                }

                StopEvent();
            }

            foreach (var @event in Events)
            {
                if (@event.StartTime <= currentDate && @event.EndTime >= currentDate)
                {
                    Program.MainForm.LogAppend("Starting event '{0}'", @event.Name);

                    GameServers.ForEach(x =>
                    {
                        x.Value.SetRates(@event.ExpRate, @event.DropRate, @event.MesoRate, true);

                        if (!string.IsNullOrEmpty(@event.ScrollingHeader))
                        {
                            var p = new Packet(ISServerMessages.WSE_ChangeScrollingHeader);
                            p.WriteString(@event.ScrollingHeader);
                            x.Value.ActiveServerConnection?.SendPacket(p);
                        }
                    });
                    RunningEvent = @event;

                    break;
                }
            }
        }
Esempio n. 9
0
        public static GameServerDto ToDto(this GameServers gameServer)
        {
            var gameServerDto = new GameServerDto
            {
                ServerId                 = gameServer.ServerId,
                Title                    = gameServer.Title,
                GameType                 = gameServer.GameType,
                Hostname                 = gameServer.Hostname,
                QueryPort                = gameServer.QueryPort,
                FtpHostname              = gameServer.FtpHostname,
                FtpUsername              = gameServer.FtpUsername,
                FtpPassword              = gameServer.FtpPassword,
                RconPassword             = gameServer.RconPassword,
                ShowOnBannerServerList   = gameServer.ShowOnBannerServerList,
                BannerServerListPosition = gameServer.BannerServerListPosition,
                HtmlBanner               = gameServer.HtmlBanner,
                ShowOnPortalServerList   = gameServer.ShowOnPortalServerList,
                ShowChatLog              = gameServer.ShowChatLog
            };


            return(gameServerDto);
        }
Esempio n. 10
0
        private static void device_OnPacketArrival(object sender, CaptureEventArgs e)
        {
            var time = e.Packet.Timeval.Date;
            var len  = e.Packet.Data.Length;

            var packet = Packet.ParsePacket(e.Packet.LinkLayerType, e.Packet.Data);

            var tcpPacket = packet.Extract <TcpPacket>();

            if (tcpPacket != null)
            {
                var       ipPacket = (IPPacket)tcpPacket.ParentPacket;
                IPAddress srcIp    = ipPacket.SourceAddress;
                IPAddress dstIp    = ipPacket.DestinationAddress;
                int       srcPort  = tcpPacket.SourcePort;
                int       dstPort  = tcpPacket.DestinationPort;
                if (!BreakIpAddresses.Contains(srcIp) && !BreakIpAddresses.Contains(dstIp))
                {
                    return;
                }
                if (!tcpPacket.PayloadData.Any() || tcpPacket.PayloadData.Length < 2)
                {
                    return;
                }
                if (tcpPacket.SequenceNumber.Equals(BeforePacket?.SequenceNumber)) // なんか二回来るので
                {
                    return;
                }
                BeforePacket = tcpPacket;


                var fromServer  = Equals(packet.Extract <EthernetPacket>().DestinationHardwareAddress, LocalPhysicalAddress);
                var server      = ServerTypeEnum.Unknown;
                var key         = LoginKeyIndex;
                var checkHeader = tcpPacket.PayloadData.Take(6).ToArray();
                if (srcIp.Equals(LoginServerIP) || dstIp.Equals(LoginServerIP))
                {
                    if (fromServer && srcPort != LoginServerPort || !fromServer && dstPort != LoginServerPort)
                    {
                        return;
                    }
                    var loginHelloHeader = new byte[] { 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00 };
                    if (checkHeader.SequenceEqual(loginHelloHeader))
                    {
                        Console.WriteLine(tcpPacket.PayloadData.HexDump());
                        LoginKeyIndex = tcpPacket.PayloadData[6];
                        return;
                    }
                    server = ServerTypeEnum.Login;
                    if (!GotLoginKey)
                    {
                        Console.WriteLine("???LoginKey Unknown Skipped???");
                        return;
                    }
                }
                else if (fromServer && GameServers.Select(g => (g.IP, g.Port)).Contains((srcIp, srcPort)) || !fromServer && GameServers.Select(g => (g.IP, g.Port)).Contains((dstIp, dstPort)))
                {
                    var gameHelloHeader   = new byte[] { 0x00, 0x06, 0x00, 0x00, 0x3F, 0x00 };
                    var gameHelloHeaderTH = new byte[] { 0x00, 0x16, 0x00, 0x00, 0x3F, 0x00 };
                    if (checkHeader.SequenceEqual(gameHelloHeader) || checkHeader.SequenceEqual(gameHelloHeaderTH))
                    {
                        Console.WriteLine(tcpPacket.PayloadData.HexDump());
                        GameKeyIndex         = tcpPacket.PayloadData[8];
                        ConnectingGameServer = GameServers.Single(g => Equals(g.IP, srcIp) && g.Port == srcPort);
                        return;
                    }
                    if (fromServer && !CheckCapture(ConnectingGameServer, srcIp, srcPort) || !fromServer && !CheckCapture(ConnectingGameServer, dstIp, dstPort))
                    {
                        return;
                    }
                    server = ServerTypeEnum.Game;
                    key    = GameKeyIndex;
                    if (!GotGameKey)
                    {
                        Console.WriteLine("???GameKey Unknown Skipped???");
                        return;
                    }
                }
                else if (fromServer && MessageServers.Select(m => (m.IP, m.Port)).Contains((srcIp, srcPort)) || !fromServer && MessageServers.Select(m => (m.IP, m.Port)).Contains((dstIp, dstPort)))
                {
                    var messageHelloHeader = new byte[] { 0x00, 0x09, 0x00, 0x00, 0x2E, 0x00 };
                    if (checkHeader.SequenceEqual(messageHelloHeader))
                    {
                        Console.WriteLine(tcpPacket.PayloadData.HexDump());
                        MessageKeyIndex         = tcpPacket.PayloadData[7];
                        ConnectingMessageServer = MessageServers.Single(m => Equals(m.IP, srcIp) && m.Port == srcPort);
                        return;
                    }
                    if (tcpPacket.PayloadData.First() == 0)
                    {
                        Console.WriteLine("###Message Hello?###");
                        Console.WriteLine(tcpPacket.PayloadData.HexDump());
                    }
                    if (fromServer && !CheckCapture(ConnectingMessageServer, srcIp, srcPort) || !fromServer && !CheckCapture(ConnectingMessageServer, dstIp, dstPort))
                    {
                        return;
                    }
                    server = ServerTypeEnum.Message;
                    key    = MessageKeyIndex;
                    if (!GotMessageKey)
                    {
                        Console.WriteLine("???MessageKey Unknown Skipped???");
                        return;
                    }
                }
Esempio n. 11
0
        private static void HandleTcpPacket(TcpPacket tcpPacket)
        {
            var ipPacket = (IPPacket)tcpPacket.ParentPacket;
            var srcIp    = ipPacket.SourceAddress;
            var dstIp    = ipPacket.DestinationAddress;
            int srcPort  = tcpPacket.SourcePort;
            int dstPort  = tcpPacket.DestinationPort;

            if (!BreakIpAddresses.Contains(srcIp) && !BreakIpAddresses.Contains(dstIp))
            {
                return;
            }
            if (!tcpPacket.PayloadData.Any() || tcpPacket.PayloadData.Length < 2)
            {
                return;
            }
            if (tcpPacket.SequenceNumber.Equals(BeforePacket?.SequenceNumber)) // なんか二回来るので
            {
                return;
            }
            BeforePacket = tcpPacket;

            var fromServer  = ServerPorts.Contains(srcPort);
            var server      = ServerTypeEnum.Unknown;
            var key         = LoginKeyIndex;
            var checkHeader = tcpPacket.PayloadData.Take(6).ToArray();

            if ((srcIp.Equals(LoginServerIP) || dstIp.Equals(LoginServerIP)) && (!fromServer || srcPort == LoginServerPort) && (fromServer || dstPort == LoginServerPort))
            {
                var loginHelloHeader = new byte[] { 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00 };
                server = ServerTypeEnum.Login;
                if (checkHeader.SequenceEqual(loginHelloHeader))
                {
                    Console.WriteLine($"---{server} Server Packet(from:{srcIp})---");
                    Console.WriteLine($"---Hello Message(Size:{tcpPacket.PayloadData.Length})---");
                    HandleMessage(new PangServerMessage(tcpPacket.PayloadData, server));
                    RecordPacketFlow(fromServer, fromServer ? srcIp : dstIp, fromServer ? srcPort : dstPort, 0, server);
                    LoginKeyIndex = tcpPacket.PayloadData[6];
                    return;
                }

                if (!GotLoginKey)
                {
                    Console.WriteLine("???LoginKey Unknown Skipped???");
                    return;
                }
            }
            else if (fromServer && GameServers.Select(g => (g.IP, g.Port)).Contains((srcIp, srcPort)) ||
                     !fromServer && GameServers.Select(g => (g.IP, g.Port)).Contains((dstIp, dstPort)))
            {
                var gameHelloHeader = new byte[] { 0x00, 0x3F, 0x00, 0x01, 0x01 };
                server = ServerTypeEnum.Game;
                if (tcpPacket.PayloadData[0] == 0x00 && tcpPacket.PayloadData.Skip(3).Take(5).ToArray().SequenceEqual(gameHelloHeader))
                {
                    Console.WriteLine($"---{server} Server Packet(from:{srcIp})---");
                    Console.WriteLine($"---Hello Message(Size:{tcpPacket.PayloadData.Length})---");
                    HandleMessage(new PangServerMessage(tcpPacket.PayloadData, server));
                    RecordPacketFlow(fromServer, fromServer ? srcIp : dstIp, fromServer ? srcPort : dstPort, 0, server);
                    GameKeyIndex         = tcpPacket.PayloadData[8];
                    ConnectingGameServer = GameServers.First(g => Equals(g.IP, srcIp) && g.Port == srcPort);
                    return;
                }
                if (fromServer && !CheckCapture(ConnectingGameServer, srcIp, srcPort) ||
                    !fromServer && !CheckCapture(ConnectingGameServer, dstIp, dstPort))
                {
                    return;
                }
                key = GameKeyIndex;
                if (!GotGameKey)
                {
                    Console.WriteLine("???GameKey Unknown Skipped???");
                    return;
                }
            }
Esempio n. 12
0
 public static void KickServer(Socket conn)
 {
     Console.WriteLine("Server disconnected");
     GameServers.Remove(conn);
 }
Esempio n. 13
0
 public void Update(GameServers model)
 {
     _dao.Update(model);
 }
Esempio n. 14
0
 public void Add(GameServers model)
 {
     _dao.Add(model);
 }
Esempio n. 15
0
 public int CalculateWorldLoad()
 {
     return(GameServers.Sum(x => x.Value.Connections) + ShopServers.Sum(x => x.Value.Connections));
 }
Esempio n. 16
0
 public IEnumerable <LocalServer> GetOnlineGameServers() => GameServers.Select(x => x.Value).Where(x => x.Connected);