You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
268 lines
11 KiB
268 lines
11 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Sog;
|
|
using LitJson;
|
|
using SimpleHttpServer;
|
|
using MySql.Data.MySqlClient;
|
|
using ProtoCSStruct;
|
|
|
|
namespace Operation
|
|
{
|
|
public class lamp
|
|
{
|
|
public long sendTime;
|
|
public string triggerTime;
|
|
public string content;
|
|
}
|
|
|
|
[MenuMapping(refc = typeof(SendEmail))]
|
|
public class SysNoticeLamp
|
|
{
|
|
public static List<lamp> lampCache = new List<lamp>();
|
|
|
|
[RequestMapping("跑马灯",PermissionCode.NOTIFIC_SELECT_LIMP,true)]
|
|
public static int OnSelectNoticeLampHttpReq(string httpApiCmd, JsonData jsonData, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId)
|
|
{
|
|
TraceLog.Trace("SysNoticeLamp.OnSelectNoticeLampHttpReq url {0} ,param count {1} ,httpContextId {2}", request.Url, query.Count, httpContextId);
|
|
|
|
string id = query.GetValue("id") ?? "";
|
|
|
|
if (id.Toint32(0) < 0)
|
|
{
|
|
jsonData["ret"] = 7;
|
|
jsonData["msg"] = "查询id错误!";
|
|
return 7;
|
|
}
|
|
|
|
TraceLog.Trace("SysNoticeLamp.OnSelectNoticeLampHttpReq id {0}", id);
|
|
|
|
RepeatedFixedStructString128_10 data = new RepeatedFixedStructString128_10();
|
|
data.Add(id);
|
|
HttpApiRootHandler.FillHttpApiDbReq2MessageTaskDistributor(httpApiCmd, httpContextId, ref data);
|
|
|
|
rsp.IsWaitFor = true;
|
|
|
|
return 0;
|
|
}
|
|
|
|
public static int DoSelectNoticeLamp(string httpApiCmd, SSHttpApiDbReq req, DBOperator dbOperator)
|
|
{
|
|
TraceLog.Trace("SysNoticeLamp.DoSelectNoticeLamp HttpContextId {0}", req.HttpContextId);
|
|
|
|
HttpRequestInfo m_request = null;
|
|
LitJson.JsonData builder = new LitJson.JsonData();
|
|
|
|
try
|
|
{
|
|
var httpContextId = req.HttpContextId;
|
|
m_request = OperationServer.m_httpService.m_requestList.Find(f => f.Http.id == httpContextId);
|
|
|
|
if (req.Data.Count < 1)
|
|
{
|
|
TraceLog.Error("SysNoticeLamp.DoSelectNoticeLamp param error");
|
|
builder["ret"] = 2;
|
|
builder["msg"] = "参数错误";
|
|
}
|
|
else
|
|
dbOperator.DBSelectNoticeLamp(req.Data[0].ToString(), builder);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
TraceLog.Error("SysNoticeLamp.DoSelectNoticeLamp Error Msg {0}", ex.Message);
|
|
}
|
|
finally
|
|
{
|
|
if (m_request != null)
|
|
{
|
|
m_request.Http.httpResponse.ContentAsUTF8 = builder.ToJson();
|
|
m_request.ProcessEnd = true;
|
|
}
|
|
}
|
|
|
|
TraceLog.Trace("SysNoticeLamp.DoSelectNoticeLamp success httpContextId {0}", req.HttpContextId);
|
|
|
|
return 0;
|
|
}
|
|
|
|
[RequestMapping("发送跑马灯",PermissionCode.NOTIFIC_SEND_LIMP, toLog: true)]
|
|
public static int OnSendNoticeLampHttpReq(string httpApiCmd, JsonData jsonData, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId)
|
|
{
|
|
TraceLog.Trace("SysNoticeLamp.OnSendNoticeLampHttpReq url {0} ,param count {1} ,httpContextId {2}", request.Url, query.Count, httpContextId);
|
|
|
|
string strTriggerTime = query.GetValue("triggerTime");
|
|
int showCount, cycleTimeType, showInterval;
|
|
string content = query.GetValue("content");
|
|
string Realmliststr = query.GetValue("realmlist");
|
|
long nowSec = OperationServerUtils.GetTimeSecond();
|
|
|
|
if (lampCache.Count > 0)
|
|
{
|
|
// 一分钟以内只能一条
|
|
if (nowSec < lampCache.Last().sendTime + 60)
|
|
{
|
|
TraceLog.Error("SysNoticeLamp.OnSendNoticeLampHttpReq send too frequence");
|
|
jsonData["ret"] = -1;
|
|
jsonData["msg"] = "send too fast";
|
|
return -1;
|
|
}
|
|
|
|
if (lampCache.Last().triggerTime == strTriggerTime && lampCache.Last().content == content)
|
|
{
|
|
TraceLog.Error("SysNoticeLamp.OnSendNoticeLampHttpReq send same last one");
|
|
jsonData["ret"] = -2;
|
|
jsonData["msg"] = "send same";
|
|
return -2;
|
|
}
|
|
}
|
|
|
|
if (int.TryParse(query.GetValue("cycleTimeType"), out cycleTimeType) == false)
|
|
{
|
|
TraceLog.Error("SysNoticeLamp.OnSendNoticeLampHttpReq cycleTimeType {0} error", query.GetValue("cycleTimeType"));
|
|
jsonData["ret"] = -3;
|
|
jsonData["msg"] = "cycleTimeType value invalid";
|
|
return -3;
|
|
}
|
|
|
|
if (cycleTimeType < 1 || cycleTimeType > 3)
|
|
{
|
|
TraceLog.Error("SysNoticeLamp.SysNoticeLamp cycleTimeType int {0} error", cycleTimeType);
|
|
jsonData["ret"] = -4;
|
|
jsonData["msg"] = "cycleTimeType value invalid";
|
|
return -4;
|
|
}
|
|
|
|
if (int.TryParse(query.GetValue("showInterval"), out showInterval) == false)
|
|
{
|
|
TraceLog.Error("SysNoticeLamp.SysNoticeLamp showInterval {0} error", query.GetValue("showInterval"));
|
|
jsonData["ret"] = -5;
|
|
jsonData["msg"] = "showInterval value invalid";
|
|
return -5;
|
|
}
|
|
|
|
if (int.TryParse(query.GetValue("showCount"), out showCount) == false)
|
|
{
|
|
TraceLog.Error("SysNoticeLamp.SysNoticeLamp showCount {0} error", query.GetValue("showCount"));
|
|
jsonData["ret"] = -6;
|
|
jsonData["msg"] = "showCount value invalid";
|
|
return -4;
|
|
}
|
|
|
|
if (content == "" || strTriggerTime == "")
|
|
{
|
|
TraceLog.Error("SysNoticeLamp.SysNoticeLamp content {0} or triggerTime {1} error", content, strTriggerTime);
|
|
jsonData["ret"] = -7;
|
|
jsonData["msg"] = "content value invalid";
|
|
return -7;
|
|
}
|
|
|
|
if (showCount <= 0)
|
|
{
|
|
showCount = 1;
|
|
}
|
|
|
|
if (showInterval <= 0)
|
|
{
|
|
showInterval = 30;
|
|
}
|
|
|
|
long triggerTime;
|
|
if (cycleTimeType == 1 || cycleTimeType == 2)
|
|
{
|
|
triggerTime = ConfigStringTimeParse.ParseConfigTime(strTriggerTime);
|
|
if (triggerTime == 0)
|
|
{
|
|
TraceLog.Error("SysNoticeLamp.SysNoticeLamp triggerTime {0}", strTriggerTime);
|
|
jsonData["ret"] = -9;
|
|
jsonData["msg"] = "triggerTime value invalid";
|
|
return -9;
|
|
}
|
|
}
|
|
|
|
//每周,格式是1,2,3|12:00:00
|
|
if (cycleTimeType == 3)
|
|
{
|
|
string[] split = strTriggerTime.Split('|');
|
|
if (split.Length != 2 || split[0].Split(',').Length != 0 || 0 == ConfigStringTimeParse.ParseConfigTime(split[1]))
|
|
{
|
|
jsonData["ret"] = -10;
|
|
jsonData["msg"] = "strTriggerTime value invalid";
|
|
return -10;
|
|
}
|
|
}
|
|
|
|
TraceLog.Trace("SysNoticeLamp.OnSendNoticeLampHttpReq strTriggerTime {0} content {1} showCount {2} cycleTimeType {3} showInterval {4} Realmliststr {5}",
|
|
strTriggerTime, content, showCount, cycleTimeType, showInterval, Realmliststr);
|
|
|
|
RepeatedFixedStructString128_10 data = new RepeatedFixedStructString128_10();
|
|
data.Add(strTriggerTime);
|
|
data.Add(content);
|
|
data.Add(showCount.ToString());
|
|
data.Add(cycleTimeType.ToString());
|
|
data.Add(showInterval.ToString());
|
|
data.Add(Realmliststr);
|
|
HttpApiRootHandler.FillHttpApiDbReq2MessageTaskDistributor(httpApiCmd, httpContextId, ref data);
|
|
|
|
rsp.IsWaitFor = true;
|
|
|
|
return 0;
|
|
}
|
|
|
|
public static int DoSendNoticeLamp(string httpApiCmd, SSHttpApiDbReq req, DBOperator dbOperator)
|
|
{
|
|
TraceLog.Trace("SysNoticeLamp.DoSelectNoticeLamp HttpContextId {0}", req.HttpContextId);
|
|
|
|
HttpRequestInfo m_request = null;
|
|
LitJson.JsonData builder = new LitJson.JsonData();
|
|
|
|
try
|
|
{
|
|
var httpContextId = req.HttpContextId;
|
|
m_request = OperationServer.m_httpService.m_requestList.Find(f => f.Http.id == httpContextId);
|
|
|
|
if (req.Data.Count < 6)
|
|
{
|
|
TraceLog.Error("SysNoticeLamp.DoSelectNoticeLamp param error");
|
|
builder["ret"] = 2;
|
|
builder["msg"] = "参数错误";
|
|
}
|
|
else
|
|
{
|
|
dbOperator.DBSendNoticeLamp(req.Data[0].ToString(), req.Data[1].ToString(), int.Parse(req.Data[2].ToString()), int.Parse(req.Data[3].ToString()), int.Parse(req.Data[4].ToString()), req.Data[5].ToString(), builder);
|
|
lampCache.Add(new lamp { sendTime = OperationServerUtils.GetTimeSecond(), content = req.Data[1].ToString(), triggerTime = req.Data[0].ToString() });
|
|
SendSysNoticeLampReq(req.Data[0].ToString(), req.Data[1].ToString(), int.Parse(req.Data[2].ToString()), int.Parse(req.Data[3].ToString()), int.Parse(req.Data[4].ToString()), req.Data[5].ToString());
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
TraceLog.Error("SysNoticeLamp.DoSelectNoticeLamp Error Msg {0}", ex.Message);
|
|
}
|
|
finally
|
|
{
|
|
if (m_request != null)
|
|
{
|
|
m_request.Http.httpResponse.ContentAsUTF8 = builder.ToJson();
|
|
m_request.ProcessEnd = true;
|
|
}
|
|
}
|
|
|
|
TraceLog.Trace("SysNoticeLamp.DoSelectNoticeLamp success httpContextId {0}", req.HttpContextId);
|
|
|
|
return 0;
|
|
}
|
|
|
|
public static int SendSysNoticeLampReq(string strTriggerTime, string content, int showCount, int cycleTimeType, int showInterval, string Realmliststr)
|
|
{
|
|
SSSysNoticeLampReq req = new SSSysNoticeLampReq();
|
|
req.TriggerTime.SetString(strTriggerTime);
|
|
req.ShowCount = showCount;
|
|
req.ShowInterval = showInterval;
|
|
req.Content.SetString(content);
|
|
req.CycleTimeType = cycleTimeType;
|
|
|
|
OperationServerUtils.SendToWorld((int)SSGameMsgID.SysNoticeLampReq, ref req, 0, 0, Realmliststr);
|
|
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
|