using System; using CommonDomain; using DotNetCore.CAP; using FishGameService.Services; using Microsoft.Extensions.Logging; namespace FishGameService.Subscribers { public class TempSpawnFishSubscriber : ICapSubscribe { private readonly FishSpawnService _fishSpawnService; private readonly ILogger _logger; public TempSpawnFishSubscriber(FishSpawnService fishSpawnService, ILogger logger) { _fishSpawnService = fishSpawnService; _logger = logger; } [CapSubscribe(TopicKeys.临时强制出鱼)] public void HandleTempSpawnFish(TempSpawnFishMessage msg) { var receivedAt = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); var deliveryDelay = msg.PublishedAtUnixMs > 0 ? receivedAt - msg.PublishedAtUnixMs : -1; try { var handled = _fishSpawnService.SpawnTemporaryFish(msg.RoomId, msg.FishNumber, msg.Count, msg.RouteId, msg.Seconds); } catch (Exception ex) { _logger.LogError(ex, "[TempSpawn] 执行失败 operationId={OperationId} roomId={RoomId} fishNumber={FishNumber} count={Count}", msg.OperationId, msg.RoomId, msg.FishNumber, msg.Count); throw; } } [CapSubscribe(TopicKeys.召唤卡出鱼)] public void HandleSummonCardFish(SummonCardFishMessage msg) { var receivedAt = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); var deliveryDelay = msg.PublishedAtUnixMs > 0 ? receivedAt - msg.PublishedAtUnixMs : -1; try { var handled = _fishSpawnService.SpawnSummonCardFish( msg.RoomId, msg.FishType, out var fishNumber, out var fishId); if (handled) { _fishSpawnService.SendSummonCardFishNotice( msg.RoomId, msg.UserId, msg.FishType, fishNumber, fishId); } } catch (Exception ex) { _logger.LogError(ex, "[SummonCard] 召唤失败 operationId={OperationId} userId={UserId} roomId={RoomId} fishType={FishType}", msg.OperationId, msg.UserId, msg.RoomId, msg.FishType); throw; } } } }