package Ġcom . ly k ke . matching . engine . outgoing . messages . v 2 . builders Ċ Ċ import Ġcom . ly k ke . matching . engine . da os . Swap Operation Ċ import Ġcom . ly k ke . matching . engine . da os . Transfer Operation Ċ import Ġcom . ly k ke . matching . engine . da os . Wallet Operation Ċ import Ġcom . ly k ke . matching . engine . da os . fee . v 2 . Fee Ċ import Ġcom . ly k ke . matching . engine . messages . MessageType Ċ import Ġcom . ly k ke . matching . engine . outgoing . messages . Client Balance Update Ċ import Ġcom . ly k ke . matching . engine . outgoing . messages . Limit Order With Trades Ċ import Ġcom . ly k ke . matching . engine . outgoing . messages . Market Order With Trades Ċ import Ġcom . ly k ke . matching . engine . outgoing . messages . v 2 . events .* Ċ import Ġcom . ly k ke . utils . logging . Th rottling Logger Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . util .* Ċ Ċ class ĠEvent Factory Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOGGER Ġ= ĠTh rottling Logger . getLogger ( Event Factory :: class . java . name ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate Execution Event ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Number : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmessageId : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠrequestId : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate : ĠDate , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Type : ĠMessageType , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmarket Order With Trades : ĠMarket Order With Trades ĊĠĠĠĠĠĠĠ Ġ): ĠExecution Event Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcreate Execution Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmessageId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠrequestId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarket Order With Trades ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate Execution Event ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Number : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmessageId : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠrequestId : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate : ĠDate , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Type : ĠMessageType , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient Balance Updates : ĠList < Client Balance Update >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlimit Orders With Trades : ĠList < Limit Order With Trades >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmarket Order With Trades : ĠMarket Order With Trades ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ): ĠExecution Event Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcreate Event Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExecution Event Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setHeader Data ( sequence Number , ĠmessageId , ĠrequestId , Ġdate , Ġmessage Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set EventData ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExecution EventData ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Balance Updates , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlimit Orders With Trades , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarket Order With Trades ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate Trusted Clients Execution Event ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Number : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmessageId : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠrequestId : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate : ĠDate , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Type : ĠMessageType , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlimit Orders With Trades : ĠList < Limit Order With Trades > ĊĠĠĠĠĠĠĠ Ġ): ĠExecution Event Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcreate Event Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExecution Event Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setHeader Data ( sequence Number , ĠmessageId , ĠrequestId , Ġdate , Ġmessage Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set EventData ( Execution EventData ( emptyList (), Ġlimit Orders With Trades , Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate Cash InOut Event ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvolume : ĠBigDecimal , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Number : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmessageId : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠrequestId : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate : ĠDate , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Type : ĠMessageType , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient Balance Updates : ĠList < Client Balance Update >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcash In Operation : ĠWallet Operation , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Fees : ĠList < Fee > ĊĠĠĠĠĠĠĠ Ġ): ĠEvent < *> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( volume Ġ> ĠBigDecimal . ZERO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Cash In Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmessageId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠrequestId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Balance Updates , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcash In Operation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Fees ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Cash Out Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmessageId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠrequestId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Balance Updates , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcash In Operation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Fees ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate Reserved Cash InOut Event ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Number : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmessageId : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠrequestId : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate : ĠDate , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Type : ĠMessageType , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient Balance Updates : ĠList < Client Balance Update >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcash In Operation : ĠWallet Operation ĊĠĠĠĠĠĠĠ Ġ): ĠEvent < *> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcreate Event Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReserved Cash InOut Event Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setHeader Data ( sequence Number , ĠmessageId , ĠrequestId , Ġdate , Ġmessage Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set EventData ( Reserved Cash InOut EventData ( client Balance Updates , Ġcash In Operation )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcreate Cash In Event ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Number : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmessageId : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠrequestId : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate : ĠDate , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Type : ĠMessageType , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient Balance Updates : ĠList < Client Balance Update >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcash In Operation : ĠWallet Operation , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Fees : ĠList < Fee > ĊĠĠĠĠĠĠĠ Ġ): ĠCash In Event Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcreate Event Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCash In Event Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setHeader Data ( sequence Number , ĠmessageId , ĠrequestId , Ġdate , Ġmessage Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set EventData ( Cash In EventData ( client Balance Updates , Ġcash In Operation , Ġinternal Fees )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcreate Cash Out Event ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Number : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmessageId : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠrequestId : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate : ĠDate , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Type : ĠMessageType , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient Balance Updates : ĠList < Client Balance Update >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcash Out Operation : ĠWallet Operation , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Fees : ĠList < Fee > ĊĠĠĠĠĠĠĠ Ġ): ĠCash Out Event Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcreate Event Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCash Out Event Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setHeader Data ( sequence Number , ĠmessageId , ĠrequestId , Ġdate , Ġmessage Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set EventData ( Cash Out EventData ( client Balance Updates , Ġcash Out Operation , Ġinternal Fees )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate Cash Transfer Event ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Number : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmessageId : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠrequestId : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate : ĠDate , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Type : ĠMessageType , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient Balance Updates : ĠList < Client Balance Update >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransfer Operation : ĠTransfer Operation , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Fees : ĠList < Fee > ĊĠĠĠĠĠĠĠ Ġ): ĠCash Transfer Event Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcreate Event Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCash Transfer Event Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setHeader Data ( sequence Number , ĠmessageId , ĠrequestId , Ġdate , Ġmessage Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set EventData ( Cash Transfer Data ( client Balance Updates , Ġtransfer Operation , Ġinternal Fees )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate Cash Swap Event ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Number : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmessageId : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠrequestId : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate : ĠDate , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Type : ĠMessageType , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient Balance Updates : ĠList < Client Balance Update >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġswap Operation : ĠSwap Operation ĊĠĠĠĠĠĠĠ Ġ): ĠCash Swap Event Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcreate Event Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCash Swap Event Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setHeader Data ( sequence Number , ĠmessageId , ĠrequestId , Ġdate , Ġmessage Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set EventData ( Cash Swap Data ( client Balance Updates , Ġswap Operation )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġ< T Ġ: ĠEvent <* >> Ġcreate Event ( create Event : Ġ() Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Event () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠerrorMessage Ġ= Ġ" Unable Ġto Ġcreate Ġand Ġsend Ġoutgoing Ġmessage : Ġ${ e . message }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . error ( errorMessage , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }