Skip to content

Commit

Permalink
feat(game-service): add chat message handler
Browse files Browse the repository at this point in the history
  • Loading branch information
codingben committed May 28, 2023
1 parent e3a6c77 commit ccc4520
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@ public class MessageHandlerManager : ComponentBase
{
private readonly IJsonSerializer jsonSerializer;
private readonly IMessageHandlerCollection handlerCollection;
private readonly IGameClientCollection gameClientCollection;
private readonly IGameSceneCollection gameSceneCollection;

public MessageHandlerManager(IGameSceneCollection gameSceneCollection)
public MessageHandlerManager(IGameClientCollection gameClientCollection, IGameSceneCollection gameSceneCollection)
{
this.gameClientCollection = gameClientCollection;
this.gameSceneCollection = gameSceneCollection;

jsonSerializer = new NativeJsonSerializer();
Expand Down Expand Up @@ -46,6 +48,7 @@ protected override void OnAwake()
handlerCollection.Set(MessageCodes.EnterScene, new EnterSceneMessageHandler(remotePlayer, gameSceneCollection));
handlerCollection.Set(MessageCodes.ChangeScene, new ChangeSceneMessageHandler(remotePlayer, gameSceneCollection));
handlerCollection.Set(MessageCodes.AttackMob, new AttackMobMessageHandler(remotePlayer));
handlerCollection.Set(MessageCodes.ChatMessage, new ChatMessageHandler(remotePlayer, gameClientCollection));
}

protected override void OnRemoved()
Expand Down
2 changes: 1 addition & 1 deletion src/game-service/Game.Application/GameClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public class GameClient : IGameClient
Components.Add(new WebSocketConnectionErrorHandler());
Components.Add(new RemotePlayerProvider(id));
Components.Add(new RemotePlayerMessageSender(gameClientCollection));
Components.Add(new MessageHandlerManager(gameSceneCollection));
Components.Add(new MessageHandlerManager(gameClientCollection, gameSceneCollection));
}

public void Dispose()
Expand Down
67 changes: 67 additions & 0 deletions src/game-service/Game.Application/Handlers/ChatMessageHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
using Game.Application.Components;
using Game.Application.Objects;
using Game.Application.Objects.Components;
using Game.Messages;
using Game.MessageTools;

namespace Game.Application.Handlers
{
public class ChatMessageHandler : IMessageHandler<ChatMessage>
{
private readonly IGameClientCollection gameClientCollection;
private readonly IMessageSender messageSender;

public ChatMessageHandler(IGameObject player, IGameClientCollection gameClientCollection)
{
this.gameClientCollection = gameClientCollection;

messageSender = player.Components.Get<IMessageSender>();
}

public void Handle(ChatMessage message)
{
var senderId = message.SenderId;
var name = message.Name;
var content = message.Content;

SendChatMessage(senderId, name, content);
SendBubbleNotification(senderId, content);
}

private void SendChatMessage(int senderId, string name, string content)
{
foreach (var gameClient in gameClientCollection)
{
var onnectionProvider = gameClient.Components.Get<IWebSocketConnectionProvider>();
var messageCode = (byte)MessageCodes.ChatMessage;
var message = new ChatMessage()
{
SenderId = senderId,
Name = name,
Content = content,
ContentFormatted = GenerateMessageFormatted(name, content)
};

onnectionProvider.SendMessage(messageCode, message);
}
}

private void SendBubbleNotification(int senderId, string content)
{
var messageCode = (byte)MessageCodes.BubbleNotification;
var message = new BubbleNotificationMessage()
{
NotifierId = senderId,
Message = content,
Time = 3 // Seconds
};

messageSender.SendMessageToNearbyGameObjects(messageCode, message);
}

private string GenerateMessageFormatted(string name, string content)
{
return $"<b>{name}: {content}</b>";
}
}
}
13 changes: 13 additions & 0 deletions src/game-service/Game.Application/Messages/ChatMessage.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
namespace Game.Messages
{
public struct ChatMessage
{
public int SenderId { get; set; }

public string Name { get; set; }

public string Content { get; set; }

public string ContentFormatted { get; set; }
}
}
3 changes: 2 additions & 1 deletion src/game-service/Game.Application/Messages/MessageCodes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public enum MessageCodes
Attacked,
BubbleNotification,
EnteredScene,
SceneChanged
SceneChanged,
ChatMessage
}
}

0 comments on commit ccc4520

Please sign in to comment.