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

65 lines
1.8 KiB
C#
Raw Normal View History

2023-03-06 10:06:43 +04:00
/*
* Copyright 2023 Eduard Kargin <kargin.eduard@gmail.com>
*
* 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 PlayerLeftHandler : IHandler
2023-03-06 10:06:43 +04:00
{
private RagonPlayerCache _playerCache;
private RagonEntityCache _entityCache;
private RagonListenerList _listenerList;
public PlayerLeftHandler(
RagonEntityCache entityCache,
RagonPlayerCache playerCache,
RagonListenerList listenerList
)
{
_entityCache = entityCache;
_playerCache = playerCache;
_listenerList = listenerList;
}
2023-10-08 21:13:31 +03:00
public void Handle(RagonBuffer reader)
2023-03-06 10:06:43 +04:00
{
2023-10-08 21:13:31 +03:00
var playerId = reader.ReadString();
2023-03-06 10:06:43 +04:00
var player = _playerCache.GetPlayerById(playerId);
if (player != null)
{
_playerCache.RemovePlayer(playerId);
_listenerList.OnPlayerLeft(player);
2023-10-08 21:13:31 +03:00
var entities = reader.ReadUShort();
2023-03-06 10:06:43 +04:00
var toDeleteIds = new ushort[entities];
for (var i = 0; i < entities; i++)
{
2023-10-08 21:13:31 +03:00
var entityId = reader.ReadUShort();
2023-03-06 10:06:43 +04:00
toDeleteIds[i] = entityId;
}
2023-07-29 10:58:06 +03:00
var emptyPayload = new RagonPayload(0);
2023-03-06 10:06:43 +04:00
foreach (var id in toDeleteIds)
2023-07-29 10:58:06 +03:00
_entityCache.OnDestroy(id, emptyPayload);
2023-03-06 10:06:43 +04:00
}
2023-11-05 22:19:55 +03:00
else
{
RagonLog.Warn($"Player with Id:{playerId} not found in cache");
}
2023-03-06 10:06:43 +04:00
}
}