The class that provides reliability and fragmentation infrastructure for Mx clients.

This class is used by MxDispatcher to interface with an MxClient in a reliable manner. When data is sent reliably, this class is used to fragment and reconstruct sets of data, ensuring that each fragment is either acknowledged by the receiving machine, or sent again.

Пример #1
0
 /// <summary>
 /// Unregister from a reliability's events.
 /// </summary>
 /// <param name="reliability">
 /// The reliability.
 /// </param>
 private void UnregisterFromEvents(MxReliability reliability)
 {
     reliability.MessageAcknowledged -= this.OnReliabilityMessageAcknowledged;
     reliability.MessageAcknowledged -= this.OnReliabilityMessageReceived;
     reliability.FragmentReceived    -= this.OnReliabilityFragmentReceived;
     reliability.FragmentSent        -= this.OnReliabilityFragmentSent;
 }
Пример #2
0
 /// <summary>
 /// Register for a reliability's events.
 /// </summary>
 /// <param name="reliability">
 /// The reliability.
 /// </param>
 private void RegisterForEvents(MxReliability reliability)
 {
     reliability.MessageAcknowledged += this.OnReliabilityMessageAcknowledged;
     reliability.MessageReceived     += this.OnReliabilityMessageReceived;
     reliability.FragmentReceived    += this.OnReliabilityFragmentReceived;
     reliability.FragmentSent        += this.OnReliabilityFragmentSent;
 }
Пример #3
0
        private MxClient ThreadSafeGetOrCreateClient(IPEndPoint endpoint)
        {
            MxClient client;

            lock (_mxClientGroupLock)
            {
                client =
                    _mxClientGroups
                    .Select(x => x.Value.RealtimeClients.FirstOrDefault(y => y.Endpoint.ToString() == endpoint.ToString()))
                    .FirstOrDefault(x => x != null);
                if (client != null)
                {
                    return(client);
                }

                if (_explicitlyDisconnected.Contains(endpoint))
                {
                    return(null);
                }

                client = new MxClient(
                    this,
                    _mxClientGroups[MxClientGroup.Ungrouped],
                    endpoint,
                    _udpClient);
                _mxClientGroups[MxClientGroup.Ungrouped].RealtimeClients.Add(client);
                RegisterForEvents(client);

                var reliability = new MxReliability(client);
                _mxClientGroups[MxClientGroup.Ungrouped].ReliableClients.Add(reliability);
                RegisterForEvents(reliability);
            }

            OnClientConnected(client);

            return(client);
        }
Пример #4
0
 /// <summary>
 /// Unregister from a reliability's events.
 /// </summary>
 /// <param name="reliability">
 /// The reliability.
 /// </param>
 private void UnregisterFromEvents(MxReliability reliability)
 {
     reliability.MessageAcknowledged -= OnReliabilityMessageAcknowledged;
     reliability.MessageAcknowledged -= OnReliabilityMessageReceived;
     reliability.FragmentReceived -= OnReliabilityFragmentReceived;
     reliability.FragmentSent -= OnReliabilityFragmentSent;
 }
Пример #5
0
 /// <summary>
 /// Register for a reliability's events.
 /// </summary>
 /// <param name="reliability">
 /// The reliability.
 /// </param>
 private void RegisterForEvents(MxReliability reliability)
 {
     reliability.MessageAcknowledged += OnReliabilityMessageAcknowledged;
     reliability.MessageReceived += OnReliabilityMessageReceived;
     reliability.FragmentReceived += OnReliabilityFragmentReceived;
     reliability.FragmentSent += OnReliabilityFragmentSent;
 }
Пример #6
0
        private MxClient ThreadSafeGetOrCreateClient(IPEndPoint endpoint)
        {
            MxClient client;

            lock (_mxClientGroupLock)
            {
                client =
                    _mxClientGroups
                        .Select(x => x.Value.RealtimeClients.FirstOrDefault(y => y.Endpoint.ToString() == endpoint.ToString()))
                        .FirstOrDefault(x => x != null);
                if (client != null)
                {
                    return client;
                }

                if (_explicitlyDisconnected.Contains(endpoint))
                {
                    return null;
                }

                client = new MxClient(
                    this,
                    _mxClientGroups[MxClientGroup.Ungrouped],
                    endpoint,
                    _udpClient);
                _mxClientGroups[MxClientGroup.Ungrouped].RealtimeClients.Add(client);
                RegisterForEvents(client);

                var reliability = new MxReliability(client);
                _mxClientGroups[MxClientGroup.Ungrouped].ReliableClients.Add(reliability);
                RegisterForEvents(reliability);
            }

            OnClientConnected(client);

            return client;
        }