///<summary>
    /// Send ball server position to all clients
    /// </summary>
    private void SendBallPositionToClients()
    {
        //Create the message
        BouncyBallSyncMessageModel bouncyBallPositionMessaageData = new
                                                                    BouncyBallSyncMessageModel(
            base.id,
            GameServerManager.instance.currentTick,
            rigidbodyReference.transform.position,
            rigidbodyReference.velocity);

        //...Time Stamps per Tom McDonnell Oct 27
        bouncyBallPositionMessaageData.timeSent = new TimeSpan(DateTime.Now.Ticks).TotalMilliseconds;

        // create the message
        using (Message m = Message.Create(
                   NetworkTags.InGame.BOUNCY_BALL_SYNC_POS,     // Tag
                   bouncyBallPositionMessaageData)              // Data
               )

        {
            foreach (IClient client in
                     GameServerManager.instance.serverReference.Server.ClientManager.GetAllClients())
            {
                client.SendMessage(m, SendMode.Reliable);
            }
        }
    }
    ///<summary>
    /// update from the sever state
    /// </summary>
    ///<param name="sender"<>/param>
    ///<param name="e"></param>
    private void UpdateFromServerState(object sender,
                                       DarkRift.Client.MessageReceivedEventArgs e)
    {
        if (e.Tag == NetworkTags.InGame.BOUNCY_BALL_SYNC_POS)
        {
            // Get message data
            BouncyBallSyncMessageModel syncMessage =
                e.GetMessage().Deserialize <BouncyBallSyncMessageModel>();
            // Time Stamp per Tom McDonnell Oct 27
            syncMessage.timeReceived = new TimeSpan(DateTime.Now.Ticks).TotalMilliseconds;

            if (id == syncMessage.networkID)
            {
                // If the distance between client and server ball position is beyone nominal constraint
                if (Vector3.Distance(rigidbodyReference.transform.position, syncMessage.position) >= 0.05f)
                {
                    // Update data
                    rigidbodyReference.velocity           = syncMessage.velocity;
                    rigidbodyReference.transform.position = syncMessage.position;
                    clientTick = syncMessage.serverTick;
                    //...lastReceivedMessage = syncMessage;
                }
            }
        }
    }
Beispiel #3
0
    /// <summary>
    /// Reconciliate the client with the server data
    /// </summary>
    private void Reconciliate()
    {
        if (reconciliationInfoList.Count() > 0)
        {
            //Get the position of the client at this specific frame
            BouncyBallSyncMessageModel clientInfo = reconciliationInfoList.Where(i => i.serverTick == lastReceivedMessage.serverTick).FirstOrDefault();

            //If there is more than 50 tick that the ball has not been updated depending to the server position
            if (reconciliationInfoList.Count() > 50)
            {
                rigidbodyReference.velocity           = lastReceivedMessage.velocity;
                rigidbodyReference.transform.position = lastReceivedMessage.position;
                clientTick = lastReceivedMessage.serverTick;
                clientInfo = lastReceivedMessage;
            }

            if (!Equals(clientInfo, null))
            {
                //Check for position divergence
                if (Vector3.Distance(clientInfo.position, lastReceivedMessage.position) >= 0.05f)
                {
                    //Update data
                    rigidbodyReference.velocity           = lastReceivedMessage.velocity;
                    rigidbodyReference.transform.position = lastReceivedMessage.position;
                }

                //Empty the list
                reconciliationInfoList.Clear();
            }
        }
    }
Beispiel #4
0
    /// <summary>
    /// Send ball server position to all clients
    /// </summary>
    private void SendBallPositionToClients()
    {
        //Create the message
        BouncyBallSyncMessageModel bouncyBallPositionMessageData = new BouncyBallSyncMessageModel
        {
            networkID  = base.id,
            serverTick = GameServerManager.instance.currentTick,
            position   = rigidbodyReference.transform.position,
            velocity   = rigidbodyReference.velocity
        };

        //create the message
        using (Message m = Message.Create(
                   NetworkTags.InGame.BOUNCY_BALL_SYNC_POS, //Tag
                   bouncyBallPositionMessageData)           //Data
               )
        {
            foreach (IClient client in GameServerManager.instance.serverReference.Server.ClientManager.GetAllClients())
            {
                client.SendMessage(m, SendMode.Reliable);
            }
        }
    }
Beispiel #5
0
    /// <summary>
    /// update from the server state
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void UpdateFromServerState(object sender, DarkRift.Client.MessageReceivedEventArgs e)
    {
        if (e.Tag == NetworkTags.InGame.BOUNCY_BALL_SYNC_POS)
        {
            //Get message data
            BouncyBallSyncMessageModel syncMessage = e.GetMessage().Deserialize <BouncyBallSyncMessageModel>();

            //If this is the first time we receive the message
            if (Object.Equals(null, lastReceivedMessage))
            {
                //Update data
                rigidbodyReference.velocity           = syncMessage.velocity;
                rigidbodyReference.transform.position = syncMessage.position;
                clientTick          = syncMessage.serverTick;
                lastReceivedMessage = syncMessage;
            }

            //If the message regards this object and is older than the previous one
            if (id == syncMessage.networkID && syncMessage.serverTick > lastReceivedMessage.serverTick)
            {
                lastReceivedMessage = syncMessage;
            }
        }
    }