/// <summary> /// 查询游戏数据库 /// </summary> /// <param name="server">游戏服务器</param> /// <param name="cmd">SQL命令</param> /// <returns>查询结果</returns> /// <remarks>这个函数是同步的(会阻塞)</remarks> public static SqlResult QueryGameServerDb(int userId,GameServer server, SqlCommand cmd) { object outArg = null; //简单判断 if (!server.IsConnected) return null; if (server.DoPlugInAction(userId, GameServerDb.PlugInGuid, GameServerDb.ActionKeyQuery, ref outArg, "xxx", cmd)) { uint sessionId = (uint)outArg; for (int i = 0; i < WebConfig.GetQueryResultRetryTimes; i++) { Thread.Sleep(WebConfig.GetQueryResultDelay); SqlResult result = server.GetPlugInData(userId, GameServerDb.PlugInGuid, GameServerDb.DataKeyQueryResult, sessionId) as SqlResult; if (result != null) { return result; } } } return null; }
protected override bool CreateScript(GameServer server, out string script, out string input) { if (server.GameServiceState == GameServer.ServiceState.Running) { script = (string)server.GetPlugInData(0, GameServerControl.PlugInGuid, GameServerControl.DataKeyStopGameScript); input = null; return (script != null); } else { script = null; input = null; return false; } }
protected override bool CreateScript(GameServer server, out string script, out string input) { script = (string)server.GetPlugInData(0, GameServerControl.PlugInGuid, GameServerControl.DataKeyRollbackDbScript, _backupFileName); input = null; return (script != null); }
private MemoryStream CreatePlayerCountImageOneMonth(GameServer server, out string fileName) { LordControl.PlayerCountStatisticInfo[] _infoArray = null; DateTime _endTime = DateTime.Now; DateTime _startTime = _endTime.AddMonths(-1); _infoArray = server.GetPlugInData(0, LordControl.PlugInGuid, LordControl.DataKeyPlayerCountStatistic, _startTime, _endTime) as LordControl.PlayerCountStatisticInfo[]; if (_infoArray.Length != 0) { ArrayList playerCountArrayList = new ArrayList(); LordControl.PlayerCountStatisticInfo tempInfo = new LordControl.PlayerCountStatisticInfo(); tempInfo.Time = _infoArray[0].Time; int countInOneDay = 0; for (int i = 0; i < _infoArray.Length; i++) { LordControl.PlayerCountStatisticInfo info = _infoArray[i]; if (tempInfo.Time.Date == info.Time.Date) { if (info.MaxCount > tempInfo.MaxCount) tempInfo.MaxCount = info.MaxCount; if (info.MinCount < tempInfo.MinCount) tempInfo.MinCount = info.MinCount; tempInfo.AverageCount += info.AverageCount; countInOneDay++; if (i == _infoArray.Length - 1) { tempInfo.AverageCount /= countInOneDay; playerCountArrayList.Add(tempInfo); } } else { tempInfo.AverageCount /= countInOneDay; playerCountArrayList.Add(tempInfo); tempInfo = new LordControl.PlayerCountStatisticInfo(); tempInfo.Time = info.Time; tempInfo.AverageCount = info.AverageCount; tempInfo.MaxCount = info.MaxCount; tempInfo.MinCount = info.MinCount; countInOneDay = 1; if (i == _infoArray.Length - 1) { playerCountArrayList.Add(tempInfo); } } } double[] maxCountArray = new double[playerCountArrayList.Count]; double[] minCountArray = new double[playerCountArrayList.Count]; double[] averageCountArray = new double[playerCountArrayList.Count]; double[] timeArray = new double[playerCountArrayList.Count]; for (int i = 0; i < playerCountArrayList.Count; i++) { LordControl.PlayerCountStatisticInfo info = playerCountArrayList[i] as LordControl.PlayerCountStatisticInfo; maxCountArray[i] = info.MaxCount; minCountArray[i] = info.MinCount; averageCountArray[i] = info.AverageCount; timeArray[i] = new XDate(info.Time); } GraphPane graphPane = new GraphPane(new Rectangle(0, 0, 840, 450), String.Empty, String.Empty, String.Empty); graphPane.Fill = new Fill(Color.FromArgb(212, 208, 200)); graphPane.Legend.Fill.IsVisible = false; graphPane.Legend.Border.IsVisible = false; graphPane.Legend.FontSpec.Fill.IsVisible = false; graphPane.XAxis.Title.Text = "时间"; graphPane.XAxis.MajorGrid.Color = Color.DarkGreen; graphPane.XAxis.Type = AxisType.Date; graphPane.XAxis.Scale.FontSpec.Size = 11; graphPane.YAxis.Title.Text = "玩家数量"; //graphPane.YAxis.MajorGrid.IsVisible = true; //graphPane.YAxis.MajorGrid.DashOff = 0; //graphPane.YAxis.MajorGrid.Color = Color.Gray; //graphPane.YAxis.MinorGrid.IsVisible = true; //graphPane.YAxis.MinorGrid.Color = Color.LightGray; //graphPane.YAxis.MinorGrid.DashOff = 0; graphPane.YAxis.Scale.Min = 0; graphPane.Title.Text = string.Format("{0} [ {1} {2} ]", "玩家数量", _startTime, _endTime); graphPane.AddCurve("最大", timeArray, maxCountArray, Color.Red, SymbolType.Triangle); graphPane.AddCurve("最小", timeArray, minCountArray, Color.Green, SymbolType.TriangleDown); graphPane.AddCurve("平均", timeArray, averageCountArray, Color.Orange, SymbolType.Diamond); graphPane.AxisChange(); fileName = server.Group.Name + "-" + DateTime.Now.Date.ToString("yyyy-MM-dd") + "-(Month)" + ".jpg"; MemoryStream imageMemoryStream = new MemoryStream(); graphPane.GetImage().Save(imageMemoryStream, System.Drawing.Imaging.ImageFormat.Jpeg); imageMemoryStream.Position = 0; return imageMemoryStream; } else { fileName = String.Empty; return null; } }
private string GetPlayerCountTextOneMonthOneServer(GameServer server) { LordControl.PlayerCountStatisticInfo[] _infoArray = null; DateTime _endTime = DateTime.Now; DateTime _startTime = _endTime.AddMonths(-1); string contentString = String.Empty; _infoArray = server.GetPlugInData(0, LordControl.PlugInGuid, LordControl.DataKeyPlayerCountStatistic, _startTime, _endTime) as LordControl.PlayerCountStatisticInfo[]; ArrayList playerCountArrayList = new ArrayList(); if (_infoArray.Length != 0) { LordControl.PlayerCountStatisticInfo tempInfo = new LordControl.PlayerCountStatisticInfo(); tempInfo.Time = _infoArray[0].Time; int countInOneDay = 0; for (int i = 0; i < _infoArray.Length; i++) { LordControl.PlayerCountStatisticInfo info = _infoArray[i]; if (tempInfo.Time.Date == info.Time.Date) { if (info.MaxCount > tempInfo.MaxCount) tempInfo.MaxCount = info.MaxCount; if (info.MinCount < tempInfo.MinCount) tempInfo.MinCount = info.MinCount; tempInfo.AverageCount += info.AverageCount; countInOneDay++; if (i == _infoArray.Length - 1) { tempInfo.AverageCount /= countInOneDay; playerCountArrayList.Add(tempInfo); } } else { tempInfo.AverageCount /= countInOneDay; playerCountArrayList.Add(tempInfo); tempInfo = new LordControl.PlayerCountStatisticInfo(); tempInfo.Time = info.Time; tempInfo.AverageCount = info.AverageCount; tempInfo.MaxCount = info.MaxCount; tempInfo.MinCount = info.MinCount; countInOneDay = 1; if (i == _infoArray.Length - 1) { playerCountArrayList.Add(tempInfo); } } } string groupName = server.Group.Name; contentString += "<div style=\"font-family:Arial\">" + groupName + "</div>"; contentString += "<table>"; string timeString = "<tr><td>时间</td>"; string maxString = "<tr><td>最大</td>"; string aveString = "<tr><td>平均</td>"; string minString = "<tr><td>最小</td>"; foreach (LordControl.PlayerCountStatisticInfo info in playerCountArrayList) { timeString += "<td>" + info.Time.ToString("MM-dd") + "</td>"; maxString += "<td>" + info.MaxCount.ToString() + "</td>"; aveString += "<td>" + info.AverageCount.ToString() + "</td>"; minString += "<td>" + info.MinCount.ToString() + "</td>"; } timeString += "</tr>"; maxString += "</tr>"; aveString += "</tr>"; minString += "</tr>"; contentString += timeString; contentString += maxString; contentString += aveString; contentString += minString; contentString += "</table>"; contentString += "<br />"; } return contentString; }
private string GetPlayerCountTextOneDayOneServer(GameServer server) { LordControl.PlayerCountStatisticInfo[] _infoArray = null; DateTime _endTime = DateTime.Now; DateTime _startTime = _endTime.AddDays(-1); string contentString = String.Empty; _infoArray = server.GetPlugInData(0, LordControl.PlugInGuid, LordControl.DataKeyPlayerCountStatistic, _startTime, _endTime) as LordControl.PlayerCountStatisticInfo[]; if (_infoArray.Length != 0) { string groupName = server.Group.Name; contentString += "<div style=\"font-family:Arial\">" + groupName + "</div>"; contentString += "<table>"; string timeString = "<tr><td>时间</td>"; string maxString = "<tr><td>最大</td>"; string aveString = "<tr><td>平均</td>"; string minString = "<tr><td>最小</td>"; foreach (LordControl.PlayerCountStatisticInfo info in _infoArray) { timeString += "<td>" + info.Time.ToString("HH:mm") + "</td>"; maxString += "<td>" + info.MaxCount.ToString() + "</td>"; aveString += "<td>" + info.AverageCount.ToString() + "</td>"; minString += "<td>" + info.MinCount.ToString() + "</td>"; } timeString += "</tr>"; maxString += "</tr>"; aveString += "</tr>"; minString += "</tr>"; contentString += timeString; contentString += maxString; contentString += aveString; contentString += minString; contentString += "</table>"; contentString += "<br />"; } return contentString; }
public static string GetGMCommandResult(GameServer server, int userId) { string GMResult = server.GetPlugInData(userId, LordControl.PlugInGuid, LordControl.DataKeyUserGMResult, userId) as string; return GMResult; }