/// <summary> /// Collects changes in the profile, and sends them to client after delay /// </summary> /// <param name="profile"></param> /// <param name="delay"></param> /// <returns></returns> private async void SendUpdatesToClient(ObservableServerProfile profile, float delay) { // Wait for the delay await Task.Delay(Mathf.RoundToInt(delay < 0.01f ? 0.01f : delay * 1000)); if (profile.ClientPeer == null || !profile.ClientPeer.IsConnected) { // If client is not connected, and we don't need to send him profile updates profile.ClearUpdates(); return; } // Get profile updated data in bytes var updates = profile.GetUpdates(); // Clear updated data in profile profile.ClearUpdates(); // Send these data to client profile.ClientPeer.SendMessage(MessageHelper.Create((short)MstMessageCodes.UpdateClientProfile, updates), DeliveryMethod.ReliableSequenced); await Task.Delay(10); // Remove value from debounced updates profilesToBeSentToClients.Remove(profile.Username); }
/// <summary> /// Collects changes in the profile, and sends them to client after delay /// </summary> /// <param name="profile"></param> /// <param name="delay"></param> /// <returns></returns> private async void SendUpdatesToClient(ObservableServerProfile profile, float delay) { // Wait for the delay await Task.Delay(Mathf.RoundToInt(delay < 0.01f ? 0.01f : delay * 1000)); // Remove value from debounced updates debouncedClientUpdates.Remove(profile.Username); if (profile.ClientPeer == null || !profile.ClientPeer.IsConnected) { // If client is not connected, and we don't need to send him profile updates profile.ClearUpdates(); return; } using (var ms = new MemoryStream()) { using (var writer = new EndianBinaryWriter(EndianBitConverter.Big, ms)) { profile.GetUpdates(writer); profile.ClearUpdates(); } profile.ClientPeer.SendMessage(MessageHelper.Create((short)MstMessageCodes.UpdateClientProfile, ms.ToArray()), DeliveryMethod.ReliableSequenced); } }