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);
    }
示例#5
0
    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);
示例#8
0
 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);
 }
示例#9
0
 protected override void Process(InputStateUpdateMessage message, NetworkingEntity source)
 {
     message.changes.Each(Apply);
     Debug.LogFormat("Num inputs applied this step: {0}", message.changes.Length);
 }