void Enqueue(INetworkMessage message, NetworkingEntity server) { var queue = server.outgoingMessages.queue; queue.Enqueue(message); server.ReplaceOutgoingMessages(queue); }
void EnqueueIncomingMessage(INetworkMessage message, NetworkingEntity e) { var queue = e.hasIncomingMessages ? e.incomingMessages.queue : new Queue <INetworkMessage>(); queue.Enqueue(message); e.ReplaceIncomingMessages(queue); }
/// A helper method that saves you the need to manually call ReplaceOutgoingMessages. public static void EnqueueOutgoingMessage(this NetworkingEntity e, INetworkMessage message) { if (!e.hasOutgoingMessages) { throw new InvalidOperationException("Trying to enqueue an outgoing message to an entity which has no outgoing message queue!"); } var queue = e.outgoingMessages.queue; queue.Enqueue(message); e.ReplaceOutgoingMessages(queue); }
protected override void Process(GameStateUpdateMessage message, NetworkingEntity source) { /* * Debug.LogFormat("Received game state update from tick {0}, current tick {1}", * message.timestamp, * game.hasCurrentTick ? game.currentTick.value.ToString() : (-1).ToString() * );*/ foreach (var change in message.changes) { Apply(message, change); } //Debug.LogFormat("Changes applied this step: {0}", message.changes.Length); }
void Process(NetworkingEntity e) { var queue = e.outgoingMessages.queue; if (queue.Count <= 0) { return; } var message = queue.Dequeue(); e.ReplaceOutgoingMessages(queue); byte[] bytes = NetworkMessageSerializer.Serialize(message); Send(bytes, e.connection.id); }
void TryProcessMessageFrom(NetworkingEntity messageSource) { if (!messageSource.hasIncomingMessages) { return; } var queue = messageSource.incomingMessages.queue; if (queue.Count == 0) { return; } var message = queue.Peek() as TMessage; if (message != null) { queue.Dequeue(); messageSource.ReplaceIncomingMessages(queue); Process(message, messageSource); } }
protected abstract void Process(TMessage message, NetworkingEntity source);
protected override void Process(ServerConnectionEstablishedMessage message, NetworkingEntity source) { Debug.LogFormat("Set: player id: {0}, currentTick: {1}", message.playerId, message.currentTick); game.ReplaceThisPlayerId(message.playerId); game.ReplaceCurrentTick(message.currentTick); }
protected override void Process(InputStateUpdateMessage message, NetworkingEntity source) { message.changes.Each(Apply); Debug.LogFormat("Num inputs applied this step: {0}", message.changes.Length); }