public void UpdateEntityData(INetworkingEntity entity, string key, MValue value) { lock (entity.StreamedInClients) { if (entity.StreamedInClients.Count <= 0) { return; } var entityDataChangeEvent = new EntityDataChangeEvent { Id = entity.Id, Key = key, Value = value }; var serverEvent = new ServerEvent { DataChange = entityDataChangeEvent }; var bytes = serverEvent.ToByteArray(); foreach (var streamedInClient in entity.StreamedInClients) { lock (streamedInClient) { if (streamedInClient.Exists) { streamedInClient.WebSocket?.SendAsync(bytes, true); } } } } }
public bool TryGet(ulong id, out INetworkingEntity entity) { lock (entities) { return(entities.TryGetValue(id, out entity)); } }
public void CreateEntity(INetworkingEntity networkingEntity) { if (networkingEntity.StreamingType == StreamingType.EntityStreaming) { return; } byte[] bytes; if (networkingEntity.StreamingType == StreamingType.DataStreaming) { // Remove data before sending it over the wire var entityWithoutData = networkingEntity.StreamedEntity.Clone(); entityWithoutData.Data.Clear(); var entityCreateEvent = new EntityCreateEvent { Entity = entityWithoutData }; var serverEvent = new ServerEvent { Create = entityCreateEvent }; bytes = serverEvent.ToByteArray(); } else { var entityCreateEvent = new EntityCreateEvent { Entity = networkingEntity.StreamedEntity }; var serverEvent = new ServerEvent { Create = entityCreateEvent }; bytes = serverEvent.ToByteArray(); } AltNetworking.Module.ClientPool.SendToAll(bytes); }
public bool Add(INetworkingEntity entity) { lock (entities) { if (entities.TryAdd(entity.Id, entity)) { OnAdd(entity); return(true); } } return(false); }
public virtual async Task OnRemove(INetworkingEntity entity) { try { await AltNetworking.Module.Streamer.RemoveEntity(entity); } catch (Exception exception) { Console.WriteLine(exception); } finally { idProvider.Free(entity.Id); } }
public async Task RemoveEntity(INetworkingEntity networkingEntity) { if (networkingEntity.StreamingType == StreamingType.EntityStreaming) { return; } var entityDeleteEvent = new EntityDeleteEvent { Id = networkingEntity.StreamedEntity.Id }; var serverEvent = new ServerEvent { Delete = entityDeleteEvent }; var bytes = serverEvent.ToByteArray(); await AltNetworking.Module.ClientPool.SendToAllTask(bytes); }
public bool VerifyPosition(INetworkingClient client, INetworkingEntity entity, bool inRange) { // Can be extended when more trustful position checking is needed return(true); }
public bool VerifyPosition(INetworkingClient client, INetworkingEntity entity, bool inRange) { return(true); }
public virtual void OnRemove(INetworkingEntity entity) { AltNetworking.Module.Streamer.RemoveEntity(entity); }
public virtual void OnAdd(INetworkingEntity entity) { AltNetworking.Module.Streamer.CreateEntity(entity); }
public void Remove(INetworkingEntity entity) => Remove(entity.Id);
public Task Remove(INetworkingEntity entity) => Remove(entity.Id);