Note the actual transport with which events are transmitted.

git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5794 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Andrzej Kapolka
2009-05-21 18:41:42 +00:00
parent d45b0bdb00
commit 31e9807c05
4 changed files with 43 additions and 0 deletions
@@ -152,6 +152,23 @@ public abstract class DEvent implements Streamable
return _transport;
}
/**
* Notes the actual transport with which the event was transmitted.
*/
public void noteActualTransport (Transport transport)
{
_actualTransport = transport;
}
/**
* Returns the actual transport with which the event was transmitted, or <code>null</code> if
* not yet known.
*/
public Transport getActualTransport ()
{
return _actualTransport;
}
/**
* Events with associated listener interfaces should implement this function and notify the
* supplied listener if it implements their event listening interface. For example, the {@link
@@ -195,6 +212,9 @@ public abstract class DEvent implements Streamable
/** The transport parameters. */
protected transient Transport _transport = Transport.DEFAULT;
/** The actual transport with which the event was transmitted (null if as yet unknown). */
protected transient Transport _actualTransport;
/** Used to differentiate between null meaning we haven't initialized our old value and null
* being the actual old value. */
protected static final Object UNSET_OLD_VALUE = new Object();
@@ -62,6 +62,12 @@ public class EventNotification extends DownstreamMessage
return _event.getTransport();
}
@Override // documentation inherited
public void noteActualTransport (Transport transport)
{
_event.noteActualTransport(transport);
}
@Override
public String toString ()
{
@@ -50,4 +50,14 @@ public abstract class Message extends SimpleStreamableObject
{
return Transport.DEFAULT;
}
/**
* For messages sent over the network, this notes the actual type of transport used to deliver
* the message. This may not be the same as the hinted transport for various reasons (message
* too large to send as datagram, no datagram connection established, etc.)
*/
public void noteActualTransport (Transport transport)
{
// no-op by default
}
}
@@ -62,6 +62,7 @@ import com.threerings.presents.client.Client;
import com.threerings.presents.data.ConMgrStats;
import com.threerings.presents.net.Message;
import com.threerings.presents.net.PongResponse;
import com.threerings.presents.net.Transport;
import com.threerings.presents.server.Authenticator;
import com.threerings.presents.server.ChainedAuthenticator;
import com.threerings.presents.server.ClientManager;
@@ -923,6 +924,9 @@ public class ConnectionManager extends LoopingThread
return;
}
// note the actual transport
msg.noteActualTransport(Transport.RELIABLE_ORDERED);
_framer.resetFrame();
// flatten this message using the connection's output stream
@@ -963,6 +967,9 @@ public class ConnectionManager extends LoopingThread
return false;
}
// note the actual transport
msg.noteActualTransport(Transport.UNRELIABLE_UNORDERED);
// extract as a byte array
byte[] data = _flattener.toByteArray();