Files
Ragon/Ragon.Client/Sources/Handler/EntityEventHandler.cs
T

56 lines
1.6 KiB
C#
Raw Normal View History

2023-03-06 10:06:43 +04:00
/*
2024-05-19 12:26:42 +03:00
* Copyright 2023-2024 Eduard Kargin <kargin.eduard@gmail.com>
2023-03-06 10:06:43 +04:00
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using Ragon.Protocol;
namespace Ragon.Client;
2023-10-04 14:42:59 +03:00
internal class EntityEventHandler : IHandler
2023-03-06 10:06:43 +04:00
{
2023-11-05 22:19:55 +03:00
private readonly RagonPlayerCache _playerCache;
private readonly RagonEntityCache _entityCache;
2023-03-06 10:06:43 +04:00
2023-11-05 22:19:55 +03:00
public EntityEventHandler(
RagonPlayerCache playerCache,
RagonEntityCache entityCache
)
{
_playerCache = playerCache;
_entityCache = entityCache;
}
public void Handle(RagonBuffer reader)
{
var eventCode = reader.ReadUShort();
var peerId = reader.ReadUShort();
var executionMode = (RagonReplicationMode)reader.ReadByte();
var entityId = reader.ReadUShort();
var player = _playerCache.GetPlayerByPeer(peerId);
if (player == null)
2023-03-06 10:06:43 +04:00
{
2023-11-05 22:19:55 +03:00
RagonLog.Error($"Player with peerId:{peerId} not found as owner of event with code:{eventCode}");
_playerCache.Dump();
return;
2023-03-06 10:06:43 +04:00
}
2023-11-05 22:19:55 +03:00
if (player.IsLocal && executionMode == RagonReplicationMode.LocalAndServer)
return;
_entityCache.OnEvent(player, entityId, eventCode, reader);
}
2023-03-06 10:06:43 +04:00
}