feat: room properties ready, player properties wip

This commit is contained in:
2024-05-07 22:42:45 +03:00
parent 6886808132
commit 5bf1881f81
22 changed files with 325 additions and 157 deletions
+27 -6
View File
@@ -74,7 +74,8 @@ public class RagonServer : IRagonServer, INetworkListener
var contextObserver = new RagonContextObserver(_contextsByPlayerId);
_scheduler.Run(new RagonActionTimer(SendRoomList, 1.0f));
_scheduler.Run(new RagonActionTimer(SendUserData, 0.2f));
_scheduler.Run(new RagonActionTimer(SendPlayerProperties, 1.0f));
_scheduler.Run(new RagonActionTimer(SendRoomProperties, 1.0f));
_serverPlugin.OnAttached(this);
@@ -94,9 +95,9 @@ public class RagonServer : IRagonServer, INetworkListener
_handlers[(byte)RagonOperation.TRANSFER_ENTITY_OWNERSHIP] = new EntityOwnershipOperation(_reader, _writer);
_handlers[(byte)RagonOperation.TIMESTAMP_SYNCHRONIZATION] = new TimestampSyncOperation(_reader, _writer);
_handlers[(byte)RagonOperation.REPLICATE_ROOM_EVENT] = new RoomEventOperation(_reader, _writer);
_handlers[(byte)RagonOperation.REPLICATE_RAW_DATA] = new RoomRawDataOperation(_reader, _writer);
_handlers[(byte)RagonOperation.ROOM_DATA_UPDATED] = new RoomDataOperation(_reader, _writer);
_handlers[(byte)RagonOperation.PLAYER_DATA_UPDATED] = new PlayerDataOperation(_reader, _writer);
_handlers[(byte)RagonOperation.REPLICATE_RAW_DATA] = new RoomDataOperation(_reader, _writer);
_handlers[(byte)RagonOperation.ROOM_PROPERTIES_UPDATED] = new RoomPropertiesOperation(_reader, _writer);
_handlers[(byte)RagonOperation.PLAYER_PROPERTIES_UPDATED] = new PlayerPropertiesOperation(_reader, _writer);
_logger.Trace($"Server Tick Rate: {_configuration.ServerTickRate}");
}
@@ -247,19 +248,39 @@ public class RagonServer : IRagonServer, INetworkListener
}
}
public void SendUserData()
public void SendPlayerProperties()
{
foreach (var (_, value) in _contextsByPlayerId)
{
if (value.UserData.IsDirty)
{
_writer.Clear();
_writer.WriteOperation(RagonOperation.PLAYER_DATA_UPDATED);
_writer.WriteOperation(RagonOperation.PLAYER_PROPERTIES_UPDATED);
_writer.WriteUShort(value.Connection.Id);
_writer.WriteBytes(value.UserData.Data);
var sendData = _writer.ToArray();
_server.Broadcast(sendData, NetworkChannel.RELIABLE);
value.UserData.IsDirty = false;
}
}
}
public void SendRoomProperties()
{
foreach (var room in _lobby.Rooms)
{
if (room.UserData.IsDirty)
{
_writer.Clear();
_writer.WriteOperation(RagonOperation.ROOM_PROPERTIES_UPDATED);
_writer.WriteBytes(room.UserData.Data);
var sendData = _writer.ToArray();
_server.Broadcast(sendData, NetworkChannel.RELIABLE);
room.UserData.IsDirty = false;
}
}
}