package Ġworld s . greg s . hest ia Ċ Ċ import Ġcom . art emis . World Ċ import Ġcom . art emis . World Configuration Builder Ċ import Ġcom . art emis . link . Entity Link Manager Ċ import Ġio . netty . channel . Channel HandlerContext Ċ import Ġnet . most ly original . api . event . common . Event System Ċ import Ġnet . most ly original . api . event . common . Subscribe Annotation Finder Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġworld . greg s . hest ia . core . Settings Ċ import Ġworld . greg s . hest ia . core . network . Network Constants Ċ import Ġworld . greg s . hest ia . core . network . Session Ċ import Ġworld . greg s . hest ia . core . network . client . Auto Connection Ċ import Ġworld . greg s . hest ia . core . network . codec . Channel Filter Ċ import Ġworld . greg s . hest ia . core . network . codec . decode . Simple Packet Decoder Ċ import Ġworld . greg s . hest ia . core . network . codec . message . Simple Message Decoder Ċ import Ġworld . greg s . hest ia . core . network . codec . message . Simple Message Encoder Ċ import Ġworld . greg s . hest ia . core . network . codec . message . Simple MessageHandler Ċ import Ġworld . greg s . hest ia . core . network . pipe . Session Pipeline Ċ import Ġworld . greg s . hest ia . core . network . protocol . Details Ċ import Ġworld . greg s . hest ia . core . network . server . Network Ċ import Ġworld s . greg s . hest ia . art emis . event . Polling EventDispatcher Ċ import Ġworld s . greg s . hest ia . game . Engine Ċ import Ġworld s . greg s . hest ia . game . plugin . Plugin . Companion . EVENT _ PROCESS _ PRIORITY Ċ import Ġworld s . greg s . hest ia . game . plugin . Plugin . Companion . PACKET _ PROCESS _ PRIORITY Ċ import Ġworld s . greg s . hest ia . game . plugin . Plugin Loader Ċ import Ġworld s . greg s . hest ia . network . World ChangeListener Ċ import Ġworld s . greg s . hest ia . network . client .* Ċ import Ġworld s . greg s . hest ia . network . world . World Codec Ċ import Ġworld s . greg s . hest ia . network . world . World Connection Ċ import Ġworld s . greg s . hest ia . network . world . World Details Ċ import Ġworld s . greg s . hest ia . network . world . World Messages Ċ import Ġworld s . greg s . hest ia . service . X te as Ċ import Ġkotlin . system . measure Nano Time Ċ Ċ class ĠGame Server ( world Details : ĠDetails ) Ġ: ĠEngine (), ĠWorld ChangeListener Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠLoggerFactory . getLogger ( this :: class . java ) ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPacket s Ġto Ġredirect Ġto Ġsocial Ġserver ĊĠĠĠĠ Ġ* Ġ[ Opcode , ĠSize , ĠProcess Ġafter Ġhandshake ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġsocial De coders Ġ= ĠArrayList < Triple < Int , ĠInt , ĠBoolean >>() ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnetwork : ĠNetwork ĊĠĠĠ Ġvar Ġserver : ĠWorld ? Ġ= Ġnull // TODO Ġrename Ġto Ġworld Ġafter Ġkotlin Ġfix ĊĊĠĠĠ Ġoverride Ġfun Ġtick ( time : ĠLong , Ġdelta : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtook Ġ= Ġmeasure Nano Time Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Tick Ġ$ delta ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver ?. set Delta ( 6 0 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver ?. process () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( to ok Ġ> Ġ 1 0 0 0 0 0 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" T ook Ġ${ ( to ok Ġ/ Ġ 1 0 0 0 0 0 0 )} ms ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// List Ġof Ġsocial Ġserver Ġpackets ĊĠĠĠĠĠĠĠ Ġval Ġcodec Ġ= ĠWorld Codec ( social De coders ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpipeline Ġ= ĠSession Pipeline Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add Last ( Simple Packet Decoder ( codec )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpipeline . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Decode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Simple Message Decoder ( codec )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Handle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Simple MessageHandler ( World Messages ( world Details , Ġlogin Sessions , Ġgame Codec ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Encode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Simple Message Encoder ( codec )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Connection ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( World Connection ( world Details )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlog . info (" Listening Ġfor Ġsocial Ġserver ...") ĊĠĠĠĠĠĠĠ Ġ// Checks Ġfor Ġsocial Ġserver Ġconnection Ġevery Ġ 1 0 Ġseconds ĊĠĠĠĠĠĠĠ ĠAuto Connection ( pipeline , ĠNetwork Constants . LOCAL HOST , ĠSettings . getInt (" social Server Port ") !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit ( id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! isRunning ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Single Ġinit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Running Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Loader . init () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Configure Ġgame Ġworld ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠWorld Configuration Builder (). with ( Entity Link Manager ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . with ( EVENT _ PROCESS _ PRIORITY , Ġevent System ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Load Ġplugins ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Loader . setup ( builder ) Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . register ( Benchmark Strategy ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Temp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . with ( PACKET _ PROCESS _ PRIORITY , Ġgame Messages ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Build Ġworld Ġconfig ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= Ġbuilder . build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Initialize Ġworld ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġserver Ġ= ĠWorld ( config ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . server Ġ= Ġserver ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Init iate Ġplugins ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Loader . init ( server , Ġdispatcher ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Set Ġdelta ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver . set Delta ( 1 F ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Handles Ġmessages ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhandshake Ġ= ĠClient Handshake ( game Messages ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Setup Ġnetwork Ġpipeline ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpipeline Ġ= ĠSession Pipeline Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// De codes Ġpackets ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . add Last (" packet ", ĠClient Packet Decoder ( social De coders , Ġgame Codec , Ġhandshake )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpipeline . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Limit Ġexternal Ġconnections ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Channel Filter ( Settings . getInt (" connection Limit ") !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Redirect s Ġor Ġde codes Ġpackets Ġinto Ġmessages ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Client Message Decoder ( social De coders , Ġgame Codec , Ġhandshake )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Handle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( handshake , Ġ" handler ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Encode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Simple Message Encoder ( game Codec ), Ġ" encoder ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Init iate Ġthe Ġserver ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Ġ= ĠNetwork ( name Ġ= Ġ" World Ġ$ id ", Ġchannel Ġ= Ġpipeline ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Bind Ġto Ġport ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork . start ( 5 0 0 0 0 Ġ+ Ġid ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Start Ġyour Ġengines ! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogin Sessions Ġ= ĠHashMap < Int , ĠChannel HandlerContext >() ĊĠĠĠĠĠĠĠ Ġval Ġdispatcher Ġ= ĠPol ling EventDispatcher () ĊĠĠĠĠĠĠĠ Ġval Ġevent System Ġ= ĠEvent System ( dispatcher , ĠSubscribe Annotation Finder ()) ĊĠĠĠĠĠĠĠ Ġval Ġgame Messages Ġ= ĠClient Messages ( login Sessions ) ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġserver : ĠGame Server ĊĠĠĠĠĠĠĠ Ġvar Ġworld Session : ĠSession ? Ġ= Ġnull // TODO Ġhandle Ġbetter ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġgame Codec Ġ= ĠClient Codec () ĊĊĠĠĠĠĠĠĠ Ġfun Ġstart ( args : ĠArray < String >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġif Ġ( args . isNotEmpty ()) Ġargs [ 0 ]. toInt () Ġelse Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSettings . load ("./ settings . yml ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠX te as ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġworld Details Ġ= ĠWorld Details ( Network Constants . LOCAL HOST , Ġ" UK ", ĠWorld Details . Country . UK , Ġ 0 , Ġ" Main ĠWorld ", ĠWorld Details . Setting . MEMBER S ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver Ġ= ĠGame Server ( world Details ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Stand - alone Ġboot ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġworld Details . id Ġ= Ġid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserver . init ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }