Package protocols.apps.chat
Class ChatApp
java.lang.Object
pt.unl.fct.di.novasys.babel.core.GenericProtocol
protocols.apps.chat.ChatApp
public class ChatApp
extends pt.unl.fct.di.novasys.babel.core.GenericProtocol
The chat application — the top of the stack, and the only protocol a user sees.
It ties the lower layers together:
- Global messages go out via a
BroadcastRequestto the broadcast protocol, and come back (to everyone, including us) asBroadcastDeliverynotifications. Both are the sharedbabel-protocols-commondissemination types. - Private messages (
/msg) are sent point-to-point withsendMessageover the membership's shared channel. - Presence — who's in the chat — is a
Host → nicknameroster. When the membership reports aNeighborUp, we send that peer a directChatDirectMessage.Kind.HELLOcarrying our nickname; the peer does the same, so both learn each other.NeighborDown(a crash) and a broadcastLEAVE(a graceful/quit) remove people again.
Threading note
The console runs on its own thread (so it can block waiting for you to type). When you enter a line,handleInput(java.lang.String) runs on that thread and calls
sendRequest/sendMessage — these enqueue work onto Babel's event
loop, so they're safe to call from here. The roster is a
ConcurrentHashMap because the console thread reads it (for /who
and /msg) while the event loop writes it. Printing is via JLine, which
is itself safe to call from any thread.-
Nested Class Summary
Nested classes/interfaces inherited from class pt.unl.fct.di.novasys.babel.core.GenericProtocol
pt.unl.fct.di.novasys.babel.core.GenericProtocol.ProtocolMetricsBabelMetrics -
Field Summary
FieldsFields inherited from class pt.unl.fct.di.novasys.babel.core.GenericProtocol
babel, babelSecurity -
Constructor Summary
ConstructorsConstructorDescriptionChatApp(Properties props, pt.unl.fct.di.novasys.network.data.Host myself, String nick, short broadcastProtoId) -
Method Summary
Methods inherited from class pt.unl.fct.di.novasys.babel.core.GenericProtocol
addSecret, addSecret, addSecret, addSecret, cancelTimer, closeConnection, closeConnection, closeConnection, closeConnection, closeConnection, closeConnection, createChannel, createSecureChannel, createSecureChannel, createSecureChannel, createSecureChannelWithAliases, createSecureChannelWithAliases, createSecureChannelWithIdentities, createSecureChannelWithIdentities, createSecureChannelWithProtoIdentities, enableGenericMetrics, generateIdentity, generateIdentity, generateIdentity, generateIdentity, generateIdentity, generateIdentity, generateIdentity, generateSecret, generateSecret, generateSecret, generateSecret, generateSecretFromPassword, generateSecretFromPassword, generateSecretFromPassword, generateSecretFromPassword, getChannelOrThrow, getDefaultChannel, getDefaultProtoIdentity, getDefaultProtoIdentityCrypt, getDefaultProtoSecret, getMillisSinceBabelStart, getOrGenerateDefaultProtoIdentity, getProtoId, getProtoName, hasProtocolThreadStarted, openConnection, openConnection, openConnection, openConnection, registerChannelEventHandler, registerMessageHandler, registerMessageHandler, registerMessageHandler, registerMessageHandler, registerMessageHandler, registerMessageHandler, registerMessageHandler, registerMessageHandler, registerMessageHandler, registerMessageHandler, registerMessageHandler, registerMessageHandler, registerMessageHandler, registerMessageHandler, registerMessageHandler, registerMessageHandler, registerMessageHandler, registerMessageHandler, registerMessageSerializer, registerMetric, registerReplyHandler, registerRequestHandler, registerSharedChannel, registerTimerHandler, sendMessage, sendMessage, sendMessage, sendMessage, sendMessage, sendMessage, sendMessage, sendMessage, sendMessage, sendMessage, sendMessage, sendMessage, sendMessage, sendMessage, sendReply, sendRequest, setDefaultChannel, setDefaultProtoIdentity, setDefaultProtoIdentity, setDefaultProtoSecret, setupPeriodicTimer, setupTimer, startEventThread, subscribeNotification, triggerNotification, unsubscribeNotification
-
Field Details
-
PROTO_ID
public static final short PROTO_ID- See Also:
-
PROTO_NAME
- See Also:
-
-
Constructor Details
-
ChatApp
public ChatApp(Properties props, pt.unl.fct.di.novasys.network.data.Host myself, String nick, short broadcastProtoId) throws pt.unl.fct.di.novasys.babel.exceptions.HandlerRegistrationException, IOException - Throws:
pt.unl.fct.di.novasys.babel.exceptions.HandlerRegistrationExceptionIOException
-
-
Method Details
-
init
- Specified by:
initin classpt.unl.fct.di.novasys.babel.core.GenericProtocol
-