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(); }
public static void KickConnection(Socket connection) { if (GameServers.Contains(connection)) { KickServer(connection); } else { KickPlayer(GetPlayer(connection)); } }
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); } }
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)); }
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(); }
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); } }); }
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; } } }
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); }
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; } }
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; } }
public static void KickServer(Socket conn) { Console.WriteLine("Server disconnected"); GameServers.Remove(conn); }
public void Update(GameServers model) { _dao.Update(model); }
public void Add(GameServers model) { _dao.Add(model); }
public int CalculateWorldLoad() { return(GameServers.Sum(x => x.Value.Connections) + ShopServers.Sum(x => x.Value.Connections)); }
public IEnumerable <LocalServer> GetOnlineGameServers() => GameServers.Select(x => x.Value).Where(x => x.Connected);