Last active
August 29, 2015 14:24
-
-
Save seansummers/d930680baf1ed4ecc9e4 to your computer and use it in GitHub Desktop.
Apache MINA jython tutorial time server
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
PORT = 9123 | |
from org.apache import mina | |
from java import net, nio, util | |
class TimeServerHandler(mina.core.service.IoHandlerAdapter): | |
def exceptionCaught(self, session, cause): | |
cause.printStackTrace() | |
def messageSent(self, session, message): | |
print('Message written.... {}'.format(message)) | |
def sessionClosed(self, session): | |
print('Session closed!') | |
session.service.dispose() | |
def sessionCreated(self,session): | |
''' runs in acceptor thread; keep it short! ''' | |
print('Sesion created!') | |
def sessionOpened(self,session): | |
print('Sesion opened!') | |
def messageReceived(self, session, message): | |
if message.strip().lower() == 'quit': | |
session.close(True) | |
else: | |
date = util.Date() | |
session.write(str(date)) | |
def sessionIdle(self, session, status): | |
print('IDLE {}'.format(session.getIdleCount(status))) | |
def run(): | |
charset = nio.charset.Charset.forName('UTF-8') | |
codec = mina.filter.codec.textline.TextLineCodecFactory(charset) | |
codecFilter = mina.filter.codec.ProtocolCodecFilter(codec) | |
logger = mina.filter.logging.LoggingFilter() | |
acceptor = mina.transport.socket.nio.NioSocketAcceptor() | |
#acceptor = mina.transport.socket.nio.AprSocketAcceptor() | |
#acceptor = mina.transport.socket.nio.NioDatagramAcceptor() | |
acceptor.filterChain.addLast('logger', logger) | |
acceptor.filterChain.addLast('codec', codecFilter) | |
acceptor.handler = TimeServerHandler() | |
acceptor.sessionConfig.reuseAddress = True # for UDP/datagram only? | |
acceptor.sessionConfig.readBufferSize = 2048 | |
acceptor.sessionConfig.setIdleTime( mina.core.session.IdleStatus.BOTH_IDLE, 10 ) | |
acceptor.bind(net.InetSocketAddress(PORT)) | |
if __name__=='__main__': | |
run() | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment