add(components): 添加MyInput组件
This commit is contained in:
@@ -54,12 +54,14 @@ namespace IM_API.Configs
|
||||
;
|
||||
CreateMap<MessageBaseDto, Message>()
|
||||
.ForMember(dest => dest.Sender, opt => opt.MapFrom(src => src.SenderId))
|
||||
.ForMember(dest => dest.ChatTypeEnum,opt => opt.MapFrom(src => src.ChatType))
|
||||
.ForMember(dest => dest.MsgTypeEnum, opt => opt.MapFrom(src => src.Type))
|
||||
.ForMember(dest => dest.ChatTypeEnum,opt => opt.MapFrom(src => Enum.Parse<ChatType>(src.ChatType,true)))
|
||||
.ForMember(dest => dest.MsgTypeEnum, opt => opt.MapFrom(src => Enum.Parse<MessageMsgType>(src.Type,true)))
|
||||
.ForMember(dest => dest.Created, opt => opt.MapFrom(src => src.TimeStamp))
|
||||
.ForMember(dest => dest.Content, opt => opt.MapFrom(src => src.Content))
|
||||
.ForMember(dest => dest.Recipient, opt => opt.MapFrom(src => src.ReceiverId))
|
||||
.ForMember(dest => dest.StateEnum, opt => opt.MapFrom(src => MessageState.Sent))
|
||||
.ForMember(dest => dest.ChatType, opt => opt.Ignore())
|
||||
.ForMember(dest => dest.MsgType, opt => opt.Ignore())
|
||||
;
|
||||
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ namespace IM_API.Configs
|
||||
services.AddTransient<IAuthService, AuthService>();
|
||||
services.AddTransient<IUserService, UserService>();
|
||||
services.AddTransient<IFriendSerivce, FriendService>();
|
||||
services.AddTransient<IMessageSevice, MessageService>();
|
||||
services.AddSingleton<IJWTService, JWTService>();
|
||||
services.AddSingleton<IRefreshTokenService,RedisRefreshTokenService>();
|
||||
return services;
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
/// <summary>
|
||||
/// 聊天类型
|
||||
/// </summary>
|
||||
public ChatType ChatType { get; set; }
|
||||
public MsgChatType ChatType { get; set; }
|
||||
/// <summary>
|
||||
/// 目标ID,聊天类型为群则为群id,私聊为用户id
|
||||
/// </summary>
|
||||
public int TargetId { get; set; }
|
||||
}
|
||||
public enum ChatType
|
||||
public enum MsgChatType
|
||||
{
|
||||
/// <summary>
|
||||
/// 私聊
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
namespace IM_API.Dtos
|
||||
{
|
||||
public record MessageBaseDto(
|
||||
string Type,string ChatType, string MsgId,int SenderId,int ReceiverId,string Content,DateTime TimeStamp);
|
||||
string Type,string ChatType, string? MsgId,int SenderId,int ReceiverId,string Content,DateTime TimeStamp);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
using IM_API.Tools;
|
||||
|
||||
namespace IM_API.Dtos
|
||||
{
|
||||
public class SignalRResponseDto
|
||||
{
|
||||
public string Type { get; set; }
|
||||
public string Message { get; set; }
|
||||
public int Code { get; set; }
|
||||
public string Status { get; set; }
|
||||
public SignalRResponseDto(SignalRResponseType type,CodeDefine codeDefine)
|
||||
{
|
||||
this.Type = type.ToString();
|
||||
this.Code = codeDefine.Code;
|
||||
this.Message = codeDefine.Message;
|
||||
this.Status = codeDefine.Message;
|
||||
}
|
||||
public SignalRResponseDto(SignalRResponseType type)
|
||||
{
|
||||
this.Type = type.ToString();
|
||||
this.Code = CodeDefine.SUCCESS.Code;
|
||||
this.Message = CodeDefine.SUCCESS.Message;
|
||||
this.Status = CodeDefine.SUCCESS.Message;
|
||||
}
|
||||
}
|
||||
|
||||
public enum SignalRResponseType
|
||||
{
|
||||
/// <summary>
|
||||
/// 消息
|
||||
/// </summary>
|
||||
MESSAGE = 0,
|
||||
/// <summary>
|
||||
/// 鉴权
|
||||
/// </summary>
|
||||
AUTH = 1,
|
||||
/// <summary>
|
||||
/// 心跳
|
||||
/// </summary>
|
||||
HEARTBEAT = 2,
|
||||
/// <summary>
|
||||
/// 消息回执
|
||||
/// </summary>
|
||||
MESSAGE_ACK = 3,
|
||||
/// <summary>
|
||||
/// 消息撤回
|
||||
/// </summary>
|
||||
MESSAGE_RECALL = 4,
|
||||
/// <summary>
|
||||
/// 好友请求
|
||||
/// </summary>
|
||||
FRIEND_REQUEST = 5,
|
||||
/// <summary>
|
||||
/// 群邀请
|
||||
/// </summary>
|
||||
GROUP_INVITE = 6,
|
||||
/// <summary>
|
||||
/// 系统通知
|
||||
/// </summary>
|
||||
SYSTEM_NOTICE = 7,
|
||||
/// <summary>
|
||||
/// 错误
|
||||
/// </summary>
|
||||
ERROR = 8
|
||||
}
|
||||
}
|
||||
@@ -8,28 +8,35 @@ namespace IM_API.Hubs
|
||||
{
|
||||
public class ChatHub:Hub
|
||||
{
|
||||
private IJWTService _JWTService;
|
||||
public ChatHub(IJWTService jWTService)
|
||||
private IMessageSevice _messageService;
|
||||
public ChatHub(IMessageSevice messageService)
|
||||
{
|
||||
_JWTService = jWTService;
|
||||
_messageService = messageService;
|
||||
}
|
||||
|
||||
public async override Task OnConnectedAsync()
|
||||
{
|
||||
var userIdStr = Context.User.FindFirstValue(ClaimTypes.NameIdentifier);
|
||||
if(userIdStr is null)
|
||||
if (!Context.User.Identity.IsAuthenticated)
|
||||
{
|
||||
await Clients.Caller.SendAsync("ReceiveMessage",new BaseResponse<object?>(CodeDefine.AUTH_FAILED));
|
||||
Context.Abort();
|
||||
return;
|
||||
}
|
||||
int userId = int.Parse(userIdStr);
|
||||
await base.OnConnectedAsync();
|
||||
}
|
||||
public async Task SendMessage(MessageBaseDto dto)
|
||||
public async Task SendPrivateMessage(MessageBaseDto dto)
|
||||
{
|
||||
|
||||
await Clients.Caller.SendAsync("ReceiveMessage", "qwfqwfqw","test");
|
||||
if (!Context.User.Identity.IsAuthenticated)
|
||||
{
|
||||
await Clients.Caller.SendAsync("ReceiveMessage", new BaseResponse<object?>(CodeDefine.AUTH_FAILED));
|
||||
Context.Abort();
|
||||
return;
|
||||
}
|
||||
var userIdStr = Context.User.FindFirstValue(ClaimTypes.NameIdentifier);
|
||||
await _messageService.SendPrivateMessageAsync(int.Parse(userIdStr),dto.ReceiverId,dto);
|
||||
await Clients.Caller.SendAsync("ReceiveMessage",userIdStr,"qfqwfqwfqw");
|
||||
await Clients.Users(dto.ReceiverId.ToString()).SendAsync("ReceiveMessage", userIdStr, dto.Content);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,6 +73,7 @@ namespace IM_API.Models
|
||||
{
|
||||
entity.Ignore(e => e.StateEnum);
|
||||
entity.Ignore(e => e.MsgTypeEnum);
|
||||
entity.Ignore(e => e.ChatTypeEnum);
|
||||
});
|
||||
|
||||
modelBuilder.Entity<Notification>(entity =>
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
using AutoMapper;
|
||||
using IM_API.Dtos;
|
||||
using IM_API.Exceptions;
|
||||
using IM_API.Interface.Services;
|
||||
using IM_API.Models;
|
||||
using IM_API.Tools;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace IM_API.Services
|
||||
{
|
||||
public class MessageService : IMessageSevice
|
||||
{
|
||||
private readonly ImContext _context;
|
||||
private readonly ILogger<MessageService> _logger;
|
||||
private readonly IMapper _mapper;
|
||||
public MessageService(ImContext context, ILogger<MessageService> logger, IMapper mapper)
|
||||
{
|
||||
_context = context;
|
||||
_logger = logger;
|
||||
_mapper = mapper;
|
||||
}
|
||||
|
||||
public Task<List<MessageBaseDto>> GetGroupMessagesAsync(int groupId, int page, int pageSize, bool desc)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Task<List<MessageBaseDto>> GetPrivateMessagesAsync(int userAId, int userBId, int page, int pageSize, bool desc)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Task<int> GetUnreadCountAsync(int userId)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Task<List<MessageBaseDto>> GetUnreadMessagesAsync(int userId)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Task<bool> MarkAsReadAsync(int userId, long messageId)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Task<bool> MarkConversationAsReadAsync(int userId, int? userBId, int? groupId)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Task<bool> RecallMessageAsync(int userId, int messageId)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Task<bool> SendGroupMessageAsync(int senderId, int groupId, MessageBaseDto dto)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public async Task<bool> SendPrivateMessageAsync(int senderId, int receiverId, MessageBaseDto dto)
|
||||
{
|
||||
bool isExist = await _context.Friends.AnyAsync(x => x.FriendId == receiverId);
|
||||
if (!isExist) throw new BaseException(CodeDefine.FRIEND_RELATION_NOT_FOUND);
|
||||
var message = _mapper.Map<Message>(dto);
|
||||
message.Sender = senderId;
|
||||
_context.Messages.Add(message);
|
||||
await _context.SaveChangesAsync();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,7 @@
|
||||
"Key": "YourSuperSecretKey123456784124214190!",
|
||||
"Issuer": "IMDemo",
|
||||
"Audience": "IMClients",
|
||||
"AccessTokenMinutes": 15,
|
||||
"AccessTokenMinutes": 30,
|
||||
"RefreshTokenDays": 30
|
||||
},
|
||||
"ConnectionStrings": {
|
||||
|
||||
Reference in New Issue
Block a user