121 lines
5.0 KiB
C#
121 lines
5.0 KiB
C#
using Jaina;
|
|
using Photon.Core.Redis;
|
|
using Photon.Core.Timer;
|
|
|
|
namespace Application.Web;
|
|
|
|
public class GameAutoJobService(ISqlSugarClient DbClient, IRedisCache redis, ITimerJobManager jobManager)
|
|
: IGameAutoJobService, ITransient
|
|
{
|
|
public async Task<List<game_job>> GetJobData()
|
|
{
|
|
var db = DbClient.AsTenant().GetConnectionWithAttr<game_job>();
|
|
return await db.Queryable<game_job>().Where(it => it.state == 1).ToListAsync();
|
|
}
|
|
|
|
public async Task<game_job> GetJobInfo(string jobId)
|
|
{
|
|
string key = string.Format(BaseCache.BaseCacheKey, "JobData");
|
|
if (await redis.HExistsHashAsync(key, jobId))
|
|
{
|
|
return await redis.GetHashAsync<game_job>(key, jobId);
|
|
}
|
|
|
|
var db = DbClient.AsTenant().GetConnectionWithAttr<game_job>();
|
|
var data = await db.Queryable<game_job>().Where(it => it.jobId == jobId).SingleAsync();
|
|
await redis.AddHashAsync(key, jobId, data);
|
|
return data;
|
|
}
|
|
|
|
public async Task StartJob()
|
|
{
|
|
Console.WriteLine(">>>开始执行定时任务>>>");
|
|
var jobData = await GetJobData();
|
|
if (jobData.Count > 0)
|
|
{
|
|
foreach (var item in jobData)
|
|
{
|
|
await jobManager.CreateAndStartTask(item.jobId, item.code, item.cron);
|
|
Console.WriteLine($"-已启动--->{item.name}");
|
|
}
|
|
}
|
|
|
|
Console.WriteLine("<<<定时任务初始化完成<<<");
|
|
await Task.CompletedTask;
|
|
}
|
|
|
|
public async Task StopJob(string jobId)
|
|
{
|
|
var db = DbClient.AsTenant().GetConnectionWithAttr<game_job>();
|
|
bool result = await db.Updateable<game_job>().SetColumns(it => it.state == 0).Where(it => it.jobId == jobId)
|
|
.ExecuteCommandAsync() > 0;
|
|
if (result)
|
|
{
|
|
await jobManager.DeleteTask(jobId);
|
|
}
|
|
}
|
|
|
|
public async Task HandleJob(game_job data)
|
|
{
|
|
if (data.code == nameof(GameEnum.JobCode.OnHook)) //挂机
|
|
{
|
|
var _eventPublisher = App.GetService<IEventPublisher>();
|
|
await _eventPublisher.PublishAsync(new ChannelEventSource(BusEventsEnum.BusEventsName.HandleOnHook,
|
|
data));
|
|
}
|
|
else if (data.code == nameof(GameEnum.JobCode.UpdateRank)) //更新排名
|
|
{
|
|
var _eventPublisher = App.GetService<IEventPublisher>();
|
|
await _eventPublisher.PublishAsync(new ChannelEventSource(BusEventsEnum.BusEventsName.HandleUpdateRank,
|
|
data));
|
|
}
|
|
else if (data.code == nameof(GameEnum.JobCode.UpdateOnlineTime)) //更新在线时间
|
|
{
|
|
var _eventPublisher = App.GetService<IEventPublisher>();
|
|
await _eventPublisher.PublishAsync(new ChannelEventSource(BusEventsEnum.BusEventsName.HandleOnlineTime,
|
|
data));
|
|
}
|
|
else if (data.code == nameof(GameEnum.JobCode.UpdateCreateMonster)) //更新创建得怪物
|
|
{
|
|
var _eventPublisher = App.GetService<IEventPublisher>();
|
|
await _eventPublisher.PublishAsync(new ChannelEventSource(BusEventsEnum.BusEventsName.HandleCreateMonster,
|
|
data));
|
|
}
|
|
else if (data.code == nameof(GameEnum.JobCode.UpdateFightData)) //更新战斗记录
|
|
{
|
|
var _eventPublisher = App.GetService<IEventPublisher>();
|
|
await _eventPublisher.PublishAsync(new ChannelEventSource(BusEventsEnum.BusEventsName.HandleFightData,
|
|
data));
|
|
}
|
|
else if (data.code == nameof(GameEnum.JobCode.UpdateExchangeData)) //更新兑换类记录
|
|
{
|
|
var _eventPublisher = App.GetService<IEventPublisher>();
|
|
await _eventPublisher.PublishAsync(new ChannelEventSource(BusEventsEnum.BusEventsName.HandleExchangeData,
|
|
data));
|
|
}
|
|
else if (data.code == nameof(GameEnum.JobCode.UpdateTaskLog)) //更新任务日志
|
|
{
|
|
var _eventPublisher = App.GetService<IEventPublisher>();
|
|
await _eventPublisher.PublishAsync(new ChannelEventSource(BusEventsEnum.BusEventsName.HandleTaskLog,
|
|
data));
|
|
}
|
|
else if (data.code == nameof(GameEnum.JobCode.UpdateTaskUser)) //更新角色任务
|
|
{
|
|
var _eventPublisher = App.GetService<IEventPublisher>();
|
|
await _eventPublisher.PublishAsync(new ChannelEventSource(BusEventsEnum.BusEventsName.HandelTaskUser,
|
|
data));
|
|
}
|
|
else if (data.code == nameof(GameEnum.JobCode.ClearChat)) //清理频道信息
|
|
{
|
|
var _eventPublisher = App.GetService<IEventPublisher>();
|
|
await _eventPublisher.PublishAsync(new ChannelEventSource(BusEventsEnum.BusEventsName.HandleClearChat,
|
|
data));
|
|
}
|
|
else if (data.code == nameof(GameEnum.JobCode.ClearMessage)) //清理频道信息
|
|
{
|
|
var _eventPublisher = App.GetService<IEventPublisher>();
|
|
await _eventPublisher.PublishAsync(new ChannelEventSource(BusEventsEnum.BusEventsName.HandleMessageData,
|
|
data));
|
|
}
|
|
}
|
|
} |