├── .github └── workflows │ └── build.yml ├── .gitignore ├── LICENSE ├── README.md ├── build.gradle ├── doc └── zh_cn │ ├── security │ └── how_security.md │ ├── server │ └── eula │ │ └── 氧化锌依沙吖啶散.md │ └── standard │ ├── translation │ ├── list │ │ ├── login │ │ │ └── translation_login_packet_list.md │ │ ├── message │ │ │ └── translation_message_packet_list.md │ │ ├── meta │ │ │ └── translation_meta_packet_list.md │ │ └── translation_packet_list.md │ └── translation.md │ └── transport │ ├── number │ └── number_encode_standard.md │ ├── packet │ ├── id_save.md │ └── ids_list.md │ ├── serializer │ ├── id_save.md │ └── serializers_list.md │ └── transport_standard.md ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── lombok.config ├── pfd └── test.png ├── settings.gradle └── src ├── main ├── java │ └── com │ │ └── github │ │ ├── cao │ │ └── awa │ │ │ ├── apricot │ │ │ ├── annotations │ │ │ │ ├── Planning.java │ │ │ │ ├── Stable.java │ │ │ │ ├── Synchronized.java │ │ │ │ ├── Unsupported.java │ │ │ │ ├── Useless.java │ │ │ │ ├── Warning.java │ │ │ │ └── auto │ │ │ │ │ ├── Auto.java │ │ │ │ │ └── AutoPlugin.java │ │ │ ├── identifier │ │ │ │ ├── BytesRandomIdentifier.java │ │ │ │ ├── FileRandomIdentifier.java │ │ │ │ └── RandomIdentifier.java │ │ │ ├── io │ │ │ │ └── bytes │ │ │ │ │ └── reader │ │ │ │ │ └── BytesReader.java │ │ │ ├── resource │ │ │ │ └── loader │ │ │ │ │ └── ResourceLoader.java │ │ │ ├── thread │ │ │ │ └── pool │ │ │ │ │ └── ExecutorFactor.java │ │ │ └── util │ │ │ │ ├── collection │ │ │ │ └── ApricotCollectionFactor.java │ │ │ │ ├── digger │ │ │ │ └── MessageDigger.java │ │ │ │ ├── encryption │ │ │ │ └── Crypto.java │ │ │ │ ├── io │ │ │ │ └── IOUtil.java │ │ │ │ ├── text │ │ │ │ ├── TextUtil.java │ │ │ │ └── UnicodeUtil.java │ │ │ │ └── time │ │ │ │ └── TimeUtil.java │ │ │ ├── kalmia │ │ │ ├── annotations │ │ │ │ ├── actor │ │ │ │ │ ├── Getter.java │ │ │ │ │ └── Setter.java │ │ │ │ ├── auto │ │ │ │ │ ├── event │ │ │ │ │ │ ├── AutoHandler.java │ │ │ │ │ │ ├── network │ │ │ │ │ │ │ └── NetworkEventTarget.java │ │ │ │ │ │ └── translation │ │ │ │ │ │ │ └── TranslationEventTarget.java │ │ │ │ │ ├── network │ │ │ │ │ │ └── unsolve │ │ │ │ │ │ │ ├── AutoAllData.java │ │ │ │ │ │ │ ├── AutoData.java │ │ │ │ │ │ │ └── AutoSolvedPacket.java │ │ │ │ │ └── serializer │ │ │ │ │ │ ├── AutoBytesSerializer.java │ │ │ │ │ │ ├── AutoJsonSerializer.java │ │ │ │ │ │ └── Missing.java │ │ │ │ ├── config │ │ │ │ │ ├── AutoConfig.java │ │ │ │ │ ├── AutoConfigTemplate.java │ │ │ │ │ ├── BinaryConfig.java │ │ │ │ │ └── UseConfigTemplate.java │ │ │ │ ├── crypto │ │ │ │ │ ├── CryptoEncoded.java │ │ │ │ │ └── NotDecoded.java │ │ │ │ ├── inaction │ │ │ │ │ ├── DoNotOverride.java │ │ │ │ │ └── DoNotSet.java │ │ │ │ ├── number │ │ │ │ │ └── encode │ │ │ │ │ │ └── ShouldSkipped.java │ │ │ │ ├── plugin │ │ │ │ │ └── PluginRegister.java │ │ │ │ ├── threading │ │ │ │ │ └── ForceMainThread.java │ │ │ │ └── translation │ │ │ │ │ └── Translation.java │ │ │ ├── attack │ │ │ │ ├── exhaustive │ │ │ │ │ └── ExhaustiveLogin.java │ │ │ │ └── replay │ │ │ │ │ └── ReplayAttack.java │ │ │ ├── await │ │ │ │ └── AwaitManager.java │ │ │ ├── bootstrap │ │ │ │ ├── ConnectTest.java │ │ │ │ ├── Kalmia.java │ │ │ │ └── Translation.java │ │ │ ├── bug │ │ │ │ └── BugTrace.java │ │ │ ├── client │ │ │ │ ├── KalmiaClient.java │ │ │ │ └── polling │ │ │ │ │ └── PollingClient.java │ │ │ ├── collection │ │ │ │ └── timed │ │ │ │ │ └── TimedList.java │ │ │ ├── config │ │ │ │ ├── KalmiaConfig.java │ │ │ │ ├── client │ │ │ │ │ ├── KalmiaClientConfig.java │ │ │ │ │ └── bootstrap │ │ │ │ │ │ └── network │ │ │ │ │ │ └── KalmiaClientBootstrapNetworkConfig.java │ │ │ │ ├── constant │ │ │ │ │ └── KalmiaConstantsConfig.java │ │ │ │ ├── global │ │ │ │ │ └── KalmiaGlobalConfig.java │ │ │ │ ├── inherite │ │ │ │ │ └── InheritedValue.java │ │ │ │ ├── instance │ │ │ │ │ └── ConfigEntry.kt │ │ │ │ ├── metadata │ │ │ │ │ └── MetadataConfig.java │ │ │ │ ├── network │ │ │ │ │ └── router │ │ │ │ │ │ └── RequestRouterConfig.java │ │ │ │ ├── server │ │ │ │ │ ├── KalmiaServerConfig.java │ │ │ │ │ ├── bootstrap │ │ │ │ │ │ └── network │ │ │ │ │ │ │ └── KalmiaServerBootstrapNetworkConfig.java │ │ │ │ │ └── translation │ │ │ │ │ │ └── KalmiaTranslationServerConfig.java │ │ │ │ └── template │ │ │ │ │ ├── ConfigTemplate.kt │ │ │ │ │ ├── client │ │ │ │ │ ├── KalmiaClientConfigTemplate.java │ │ │ │ │ └── bootstarp │ │ │ │ │ │ └── network │ │ │ │ │ │ └── KalmiaClientBootstrapNetworkConfigTemplate.java │ │ │ │ │ ├── constants │ │ │ │ │ └── KalmiaConstantsConfigTemplate.java │ │ │ │ │ ├── global │ │ │ │ │ └── KalmiaGlobalConfigTemplate.java │ │ │ │ │ ├── metadata │ │ │ │ │ └── MetadataConfigTemplate.java │ │ │ │ │ ├── network │ │ │ │ │ └── router │ │ │ │ │ │ └── RequestRouterConfigTemplate.java │ │ │ │ │ └── server │ │ │ │ │ ├── KalmiaServerConfigTemplate.java │ │ │ │ │ ├── bootstarp │ │ │ │ │ └── network │ │ │ │ │ │ └── KalmiaServerBootstrapNetworkConfigTemplate.java │ │ │ │ │ └── translation │ │ │ │ │ └── KalmiaTranslationServerConfigTemplate.java │ │ │ ├── constant │ │ │ │ ├── IntegerConstants.java │ │ │ │ └── KalmiaConstant.kt │ │ │ ├── convert │ │ │ │ ├── ByteArrayConvertable.java │ │ │ │ └── BytesValueConvertable.java │ │ │ ├── d │ │ │ │ └── visual │ │ │ │ │ └── DataImageConvert.java │ │ │ ├── database │ │ │ │ ├── KeyValueBytesDatabase.java │ │ │ │ ├── KeyValueDatabase.kt │ │ │ │ ├── cache │ │ │ │ │ └── KeyValueCache.kt │ │ │ │ ├── key │ │ │ │ │ └── BytesKey.kt │ │ │ │ └── provider │ │ │ │ │ ├── DatabaseProviders.java │ │ │ │ │ └── leveldb │ │ │ │ │ └── LevelDbProvider.kt │ │ │ ├── debug │ │ │ │ └── dependency │ │ │ │ │ └── circular │ │ │ │ │ ├── CircularDependency.kt │ │ │ │ │ └── RequiredDependency.kt │ │ │ ├── digest │ │ │ │ └── DigestedObject.java │ │ │ ├── env │ │ │ │ ├── KalmiaEnv.java │ │ │ │ ├── KalmiaPreSharedCipher.java │ │ │ │ ├── KalmiaTranslationEnv.java │ │ │ │ └── security │ │ │ │ │ └── key │ │ │ │ │ └── PreSharedCipherEncode.kt │ │ │ ├── event │ │ │ │ ├── Event.java │ │ │ │ └── kalmiagram │ │ │ │ │ ├── handler │ │ │ │ │ ├── EventHandler.java │ │ │ │ │ ├── launch │ │ │ │ │ │ └── done │ │ │ │ │ │ │ └── DoneLaunchEventHandler.java │ │ │ │ │ └── network │ │ │ │ │ │ ├── NetworkEventHandler.java │ │ │ │ │ │ └── inbound │ │ │ │ │ │ ├── chat │ │ │ │ │ │ └── session │ │ │ │ │ │ │ ├── in │ │ │ │ │ │ │ ├── ChatInSessionEventHandler.java │ │ │ │ │ │ │ └── SessionListenersUpdateEventHandler.java │ │ │ │ │ │ │ └── request │ │ │ │ │ │ │ ├── RequestDuetSessionEventHandler.java │ │ │ │ │ │ │ └── RequestGroupSessionEventHandler.java │ │ │ │ │ │ ├── disconnect │ │ │ │ │ │ └── TryDisconnectEventHandler.java │ │ │ │ │ │ ├── handshake │ │ │ │ │ │ ├── crypto │ │ │ │ │ │ │ ├── aes │ │ │ │ │ │ │ │ └── HandshakeAesCipherEventHandler.java │ │ │ │ │ │ │ └── ec │ │ │ │ │ │ │ │ └── pubkey │ │ │ │ │ │ │ │ └── HandshakePreSharedEcEventHandler.java │ │ │ │ │ │ └── hello │ │ │ │ │ │ │ ├── client │ │ │ │ │ │ │ └── ClientHelloEventHandler.java │ │ │ │ │ │ │ └── server │ │ │ │ │ │ │ └── ServerHelloEventHandler.java │ │ │ │ │ │ ├── invalid │ │ │ │ │ │ └── operation │ │ │ │ │ │ │ └── OperationInvalidEventHandler.java │ │ │ │ │ │ ├── key │ │ │ │ │ │ └── select │ │ │ │ │ │ │ ├── SelectKeyStoreEventHandler.java │ │ │ │ │ │ │ └── SelectedKeyStoreEventHandler.java │ │ │ │ │ │ ├── login │ │ │ │ │ │ ├── LoginEventHandler.java │ │ │ │ │ │ ├── feedback │ │ │ │ │ │ │ ├── LoginFailureEventHandler.java │ │ │ │ │ │ │ └── LoginSuccessEventHandler.java │ │ │ │ │ │ ├── password │ │ │ │ │ │ │ └── LoginWithPasswordEventHandler.java │ │ │ │ │ │ ├── sign │ │ │ │ │ │ │ └── LoginWithSignEventHandler.java │ │ │ │ │ │ └── token │ │ │ │ │ │ │ └── LoginWithTokenEventHandler.java │ │ │ │ │ │ ├── message │ │ │ │ │ │ ├── delete │ │ │ │ │ │ │ ├── DeleteMessageEventHandler.java │ │ │ │ │ │ │ └── DeletedMessageEventHandler.java │ │ │ │ │ │ ├── notice │ │ │ │ │ │ │ └── NewMessageNoticeEventHandler.java │ │ │ │ │ │ ├── select │ │ │ │ │ │ │ ├── FetchMessageEventHandler.java │ │ │ │ │ │ │ ├── FetchedMessageEventHandler.java │ │ │ │ │ │ │ ├── SelectMessageEventHandler.java │ │ │ │ │ │ │ └── SelectedMessageEventHandler.java │ │ │ │ │ │ └── send │ │ │ │ │ │ │ ├── SendMessageEventHandler.java │ │ │ │ │ │ │ ├── SendMessageRefusedEventHandler.java │ │ │ │ │ │ │ └── SentMessageEventHandler.java │ │ │ │ │ │ ├── ping │ │ │ │ │ │ ├── TryPingEventHandler.java │ │ │ │ │ │ └── TryPingResponseEventHandler.java │ │ │ │ │ │ ├── resource │ │ │ │ │ │ └── write │ │ │ │ │ │ │ ├── WriteResourceEventHandler.java │ │ │ │ │ │ │ └── WriteResourceNextStepEventHandler.java │ │ │ │ │ │ └── test │ │ │ │ │ │ └── RequestTestEventHandler.java │ │ │ │ │ ├── launch │ │ │ │ │ └── done │ │ │ │ │ │ └── DoneLaunchEvent.java │ │ │ │ │ └── network │ │ │ │ │ ├── NetworkEvent.java │ │ │ │ │ └── inbound │ │ │ │ │ ├── chat │ │ │ │ │ └── session │ │ │ │ │ │ ├── in │ │ │ │ │ │ ├── ChatInSessionEvent.java │ │ │ │ │ │ └── SessionListenersUpdateEvent.java │ │ │ │ │ │ └── request │ │ │ │ │ │ ├── RequestDuetSessionEvent.java │ │ │ │ │ │ └── RequestGroupSessionEvent.java │ │ │ │ │ ├── disconnect │ │ │ │ │ └── TryDisconnectEvent.java │ │ │ │ │ ├── handshake │ │ │ │ │ ├── crypto │ │ │ │ │ │ ├── aes │ │ │ │ │ │ │ └── HandshakeAesCipherEvent.java │ │ │ │ │ │ └── ec │ │ │ │ │ │ │ └── pubkey │ │ │ │ │ │ │ └── HandshakePreSharedEcEvent.java │ │ │ │ │ └── hello │ │ │ │ │ │ ├── client │ │ │ │ │ │ └── ClientHelloEvent.java │ │ │ │ │ │ └── server │ │ │ │ │ │ └── ServerHelloEvent.java │ │ │ │ │ ├── invalid │ │ │ │ │ └── operation │ │ │ │ │ │ └── OperationInvalidEvent.java │ │ │ │ │ ├── key │ │ │ │ │ └── select │ │ │ │ │ │ ├── SelectKeyStoreEvent.java │ │ │ │ │ │ └── SelectedKeyStoreEvent.java │ │ │ │ │ ├── login │ │ │ │ │ ├── feedback │ │ │ │ │ │ ├── LoginFailureEvent.java │ │ │ │ │ │ └── LoginSuccessEvent.java │ │ │ │ │ ├── password │ │ │ │ │ │ └── LoginWithPasswordEvent.java │ │ │ │ │ ├── sign │ │ │ │ │ │ └── LoginWithSignEvent.java │ │ │ │ │ └── token │ │ │ │ │ │ └── LoginWithTokenEvent.java │ │ │ │ │ ├── message │ │ │ │ │ ├── delete │ │ │ │ │ │ ├── DeleteMessageEvent.java │ │ │ │ │ │ └── DeletedMessageEvent.java │ │ │ │ │ ├── notice │ │ │ │ │ │ └── NewMessageNoticeEvent.java │ │ │ │ │ ├── select │ │ │ │ │ │ ├── FetchMessageEvent.java │ │ │ │ │ │ ├── FetchedMessageEvent.java │ │ │ │ │ │ ├── SelectMessageEvent.java │ │ │ │ │ │ └── SelectedMessageEvent.java │ │ │ │ │ └── send │ │ │ │ │ │ ├── SendMessageEvent.java │ │ │ │ │ │ ├── SendMessageRefusedEvent.java │ │ │ │ │ │ └── SentMessageEvent.java │ │ │ │ │ ├── ping │ │ │ │ │ ├── TryPingEvent.java │ │ │ │ │ └── TryPingResponseEvent.java │ │ │ │ │ ├── resource │ │ │ │ │ └── write │ │ │ │ │ │ ├── WriteResourceEvent.java │ │ │ │ │ │ └── WriteResourceNextStepEvent.java │ │ │ │ │ └── test │ │ │ │ │ └── RequestTestEvent.java │ │ │ ├── exception │ │ │ │ ├── auto │ │ │ │ │ ├── CircularDependencyException.java │ │ │ │ │ └── config │ │ │ │ │ │ ├── FieldParamMismatchException.java │ │ │ │ │ │ └── WrongConfigTemplateException.java │ │ │ │ └── network │ │ │ │ │ ├── attck │ │ │ │ │ └── ReplayAttackException.java │ │ │ │ │ └── invalid │ │ │ │ │ ├── InvalidPacketException.java │ │ │ │ │ └── InvalidStatusException.java │ │ │ ├── framework │ │ │ │ ├── AnnotationUtil.java │ │ │ │ ├── config │ │ │ │ │ └── ConfigFramework.kt │ │ │ │ ├── event │ │ │ │ │ └── EventFramework.java │ │ │ │ ├── loader │ │ │ │ │ └── JarSearchLoader.java │ │ │ │ ├── network │ │ │ │ │ ├── event │ │ │ │ │ │ └── NetworkEventFramework.java │ │ │ │ │ └── unsolve │ │ │ │ │ │ └── PacketFramework.kt │ │ │ │ ├── plugin │ │ │ │ │ └── PluginFramework.java │ │ │ │ ├── reflection │ │ │ │ │ └── ReflectionFramework.java │ │ │ │ ├── serialize │ │ │ │ │ ├── bytes │ │ │ │ │ │ ├── BytesSerializable.java │ │ │ │ │ │ ├── BytesSerializeFramework.kt │ │ │ │ │ │ ├── BytesSerializer.java │ │ │ │ │ │ └── type │ │ │ │ │ │ │ ├── array │ │ │ │ │ │ │ └── BytesByteArraySerializer.java │ │ │ │ │ │ │ ├── list │ │ │ │ │ │ │ └── BytesListSerializer.java │ │ │ │ │ │ │ ├── map │ │ │ │ │ │ │ └── BytesMapSerializer.java │ │ │ │ │ │ │ ├── math │ │ │ │ │ │ │ ├── BytesBigDecimalSerializer.java │ │ │ │ │ │ │ └── BytesBigIntegerSerializer.java │ │ │ │ │ │ │ ├── primitive │ │ │ │ │ │ │ ├── BytesBooleanSerializer.java │ │ │ │ │ │ │ ├── BytesByteSerializer.java │ │ │ │ │ │ │ ├── BytesCharSerializer.java │ │ │ │ │ │ │ ├── BytesDoubleSerializer.java │ │ │ │ │ │ │ ├── BytesFloatSerializer.java │ │ │ │ │ │ │ ├── BytesIntSerializer.java │ │ │ │ │ │ │ ├── BytesLongSerializer.java │ │ │ │ │ │ │ └── BytesShortSerializer.java │ │ │ │ │ │ │ ├── string │ │ │ │ │ │ │ └── BytesStringSerializer.java │ │ │ │ │ │ │ └── uuid │ │ │ │ │ │ │ └── BytesUUIDSerializer.java │ │ │ │ │ └── json │ │ │ │ │ │ ├── JsonSerializable.java │ │ │ │ │ │ ├── JsonSerializeFramework.java │ │ │ │ │ │ ├── JsonSerializer.java │ │ │ │ │ │ ├── test │ │ │ │ │ │ ├── TestSerializable.java │ │ │ │ │ │ └── TestSss.java │ │ │ │ │ │ └── type │ │ │ │ │ │ ├── list │ │ │ │ │ │ └── JsonListSerializer.java │ │ │ │ │ │ ├── math │ │ │ │ │ │ ├── JsonBigDecimalSerializer.java │ │ │ │ │ │ └── JsonBigIntegerSerializer.java │ │ │ │ │ │ ├── primitive │ │ │ │ │ │ ├── JsonBooleanSerializer.java │ │ │ │ │ │ ├── JsonByteSerializer.java │ │ │ │ │ │ ├── JsonCharSerializer.java │ │ │ │ │ │ ├── JsonDoubleSerializer.java │ │ │ │ │ │ ├── JsonFloatSerializer.java │ │ │ │ │ │ ├── JsonIntSerializer.java │ │ │ │ │ │ ├── JsonLongSerializer.java │ │ │ │ │ │ └── JsonShortSerializer.java │ │ │ │ │ │ └── string │ │ │ │ │ │ └── JsonStringSerializer.java │ │ │ │ └── translation │ │ │ │ │ ├── event │ │ │ │ │ └── TranslationEventFramework.java │ │ │ │ │ └── packet │ │ │ │ │ └── TranslationPacketFramework.java │ │ │ ├── function │ │ │ │ └── provider │ │ │ │ │ └── Consumers.java │ │ │ ├── identity │ │ │ │ ├── LongAndExtraIdentity.kt │ │ │ │ ├── PureExtraIdentity.kt │ │ │ │ └── serializer │ │ │ │ │ ├── LongAndExtraIdentityExternalSerializer.java │ │ │ │ │ ├── LongAndExtraIdentitySerializer.java │ │ │ │ │ ├── PureExtraIdentityExternalSerializer.java │ │ │ │ │ └── PureExtraIdentitySerializer.java │ │ │ ├── information │ │ │ │ └── compressor │ │ │ │ │ ├── InformationCompressor.java │ │ │ │ │ ├── deflate │ │ │ │ │ └── DeflateCompressor.java │ │ │ │ │ ├── inaction │ │ │ │ │ └── InactionCompressor.java │ │ │ │ │ └── lz4 │ │ │ │ │ └── Lz4Compressor.java │ │ │ ├── keypair │ │ │ │ ├── KeyStoreIdentity.java │ │ │ │ ├── database │ │ │ │ │ └── KeypairDatabase.kt │ │ │ │ ├── exception │ │ │ │ │ ├── NotEncryptedException.java │ │ │ │ │ └── UnableToDecodeException.java │ │ │ │ ├── manager │ │ │ │ │ └── KeypairManager.java │ │ │ │ ├── pair │ │ │ │ │ ├── ec │ │ │ │ │ │ └── EcKeyPair.java │ │ │ │ │ ├── empty │ │ │ │ │ │ └── EmptyKeyPair.java │ │ │ │ │ └── rsa │ │ │ │ │ │ └── RsaKeyPair.java │ │ │ │ ├── serializer │ │ │ │ │ └── pair │ │ │ │ │ │ ├── ec │ │ │ │ │ │ └── EcKeyPairSerializer.java │ │ │ │ │ │ ├── empty │ │ │ │ │ │ └── EmptyKeyPairSerializer.java │ │ │ │ │ │ └── rsa │ │ │ │ │ │ └── RsaKeyPairSerializer.java │ │ │ │ └── store │ │ │ │ │ ├── KeyPairStore.java │ │ │ │ │ ├── KeyPairStoreFactor.java │ │ │ │ │ └── key │ │ │ │ │ ├── KeyStore.java │ │ │ │ │ ├── ec │ │ │ │ │ ├── EcPrivateKeyStore.java │ │ │ │ │ └── EcPublicKeyStore.java │ │ │ │ │ ├── empty │ │ │ │ │ ├── EmptyPrivateKeyStore.java │ │ │ │ │ └── EmptyPublicKeyStore.java │ │ │ │ │ └── rsa │ │ │ │ │ ├── RsaPrivateKeyStore.java │ │ │ │ │ └── RsaPublicKeyStore.java │ │ │ ├── language │ │ │ │ └── manager │ │ │ │ │ └── LanguageTranslationManager.java │ │ │ ├── login │ │ │ │ └── LoginCommon.java │ │ │ ├── mathematic │ │ │ │ ├── Mathematics.java │ │ │ │ ├── base │ │ │ │ │ ├── Base256.java │ │ │ │ │ └── SkippedBase256.java │ │ │ │ └── integer │ │ │ │ │ ├── IntegerReceptacle.java │ │ │ │ │ └── SimInt.java │ │ │ ├── message │ │ │ │ ├── Message.java │ │ │ │ ├── cover │ │ │ │ │ ├── CoverMessage.kt │ │ │ │ │ └── processor │ │ │ │ │ │ ├── MessageProcessor.java │ │ │ │ │ │ ├── coloregg │ │ │ │ │ │ └── MeowMessageProcessor.kt │ │ │ │ │ │ └── time │ │ │ │ │ │ └── TimeMessageProcessor.kt │ │ │ │ ├── database │ │ │ │ │ └── message │ │ │ │ │ │ └── MessageDatabase.kt │ │ │ │ ├── deleted │ │ │ │ │ └── DeletedMessage.kt │ │ │ │ ├── digest │ │ │ │ │ └── DigestData.java │ │ │ │ ├── display │ │ │ │ │ ├── ClientMessage.kt │ │ │ │ │ ├── ClientMessageContent.kt │ │ │ │ │ └── serializer │ │ │ │ │ │ └── ClientMessageExternalSerializer.java │ │ │ │ ├── factor │ │ │ │ │ └── MessageFactor.java │ │ │ │ ├── manager │ │ │ │ │ └── MessageManager.java │ │ │ │ ├── serializer │ │ │ │ │ ├── CoverMessageSerializer.java │ │ │ │ │ ├── DeletedMessageSerializer.java │ │ │ │ │ ├── UnknownMessageSerializer.java │ │ │ │ │ └── UserMessageSerializer.java │ │ │ │ ├── unknown │ │ │ │ │ └── UnknownMessage.kt │ │ │ │ └── user │ │ │ │ │ └── UserMessage.kt │ │ │ ├── network │ │ │ │ ├── count │ │ │ │ │ └── TrafficCount.java │ │ │ │ ├── encode │ │ │ │ │ └── kalmiagram │ │ │ │ │ │ ├── RequestDecoder.java │ │ │ │ │ │ ├── RequestEncoder.java │ │ │ │ │ │ ├── compress │ │ │ │ │ │ ├── RequestCompressor.java │ │ │ │ │ │ └── RequestCompressorType.java │ │ │ │ │ │ ├── crypto │ │ │ │ │ │ ├── CryptoTransportLayer.java │ │ │ │ │ │ ├── TransportLayerCrypto.java │ │ │ │ │ │ ├── asymmetric │ │ │ │ │ │ │ ├── AsymmetricCrypto.java │ │ │ │ │ │ │ ├── ec │ │ │ │ │ │ │ │ └── EcCrypto.java │ │ │ │ │ │ │ └── rsa │ │ │ │ │ │ │ │ └── RsaCrypto.java │ │ │ │ │ │ └── symmetric │ │ │ │ │ │ │ ├── SymmetricCrypto.java │ │ │ │ │ │ │ ├── aes │ │ │ │ │ │ │ └── AesCrypto.java │ │ │ │ │ │ │ └── no │ │ │ │ │ │ │ └── NoCrypto.java │ │ │ │ │ │ └── exception │ │ │ │ │ │ └── ReplayAttackException.java │ │ │ │ ├── exception │ │ │ │ │ ├── InvalidPacketException.java │ │ │ │ │ └── InvalidStatusException.java │ │ │ │ ├── handler │ │ │ │ │ ├── PacketHandler.java │ │ │ │ │ ├── handshake │ │ │ │ │ │ └── HandshakeHandler.java │ │ │ │ │ ├── inbound │ │ │ │ │ │ └── AuthedRequestHandler.java │ │ │ │ │ ├── login │ │ │ │ │ │ └── LoginHandler.java │ │ │ │ │ └── stateless │ │ │ │ │ │ └── StatelessHandler.java │ │ │ │ ├── io │ │ │ │ │ ├── client │ │ │ │ │ │ ├── KalmiaClientNetworkIo.java │ │ │ │ │ │ └── channel │ │ │ │ │ │ │ └── KalmiaClientChannelInitializer.java │ │ │ │ │ └── server │ │ │ │ │ │ ├── KalmiaServerNetworkIo.java │ │ │ │ │ │ └── channel │ │ │ │ │ │ ├── KalmiaServerChannelInitializer.java │ │ │ │ │ │ ├── kalmiagram │ │ │ │ │ │ └── KalmiagramServerChannelInitializer.java │ │ │ │ │ │ └── translation │ │ │ │ │ │ └── TranslationServerChannelInitializer.java │ │ │ │ ├── packet │ │ │ │ │ ├── Packet.java │ │ │ │ │ ├── UnsolvedPacket.java │ │ │ │ │ ├── factor │ │ │ │ │ │ └── unsolve │ │ │ │ │ │ │ └── UnsolvedPacketFactor.java │ │ │ │ │ ├── inbound │ │ │ │ │ │ ├── chat │ │ │ │ │ │ │ └── session │ │ │ │ │ │ │ │ ├── in │ │ │ │ │ │ │ │ └── ChatInSessionPacket.java │ │ │ │ │ │ │ │ ├── listeners │ │ │ │ │ │ │ │ └── SessionListenersUpdatePacket.java │ │ │ │ │ │ │ │ └── request │ │ │ │ │ │ │ │ ├── RequestDuetSessionPacket.java │ │ │ │ │ │ │ │ └── RequestGroupSessionPacket.java │ │ │ │ │ │ ├── disconnet │ │ │ │ │ │ │ └── TryDisconnectPacket.java │ │ │ │ │ │ ├── handshake │ │ │ │ │ │ │ ├── crypto │ │ │ │ │ │ │ │ ├── aes │ │ │ │ │ │ │ │ │ └── HandshakeAesCipherPacket.java │ │ │ │ │ │ │ │ └── ec │ │ │ │ │ │ │ │ │ └── pubkey │ │ │ │ │ │ │ │ │ └── HandshakePreSharedEcPacket.java │ │ │ │ │ │ │ └── hello │ │ │ │ │ │ │ │ ├── client │ │ │ │ │ │ │ │ └── ClientHelloPacket.java │ │ │ │ │ │ │ │ └── server │ │ │ │ │ │ │ │ └── ServerHelloPacket.java │ │ │ │ │ │ ├── invalid │ │ │ │ │ │ │ └── operation │ │ │ │ │ │ │ │ └── OperationInvalidPacket.java │ │ │ │ │ │ ├── key │ │ │ │ │ │ │ └── select │ │ │ │ │ │ │ │ ├── SelectKeyStorePacket.java │ │ │ │ │ │ │ │ └── SelectedKeyStorePacket.java │ │ │ │ │ │ ├── login │ │ │ │ │ │ │ ├── feedback │ │ │ │ │ │ │ │ ├── LoginFailurePacket.java │ │ │ │ │ │ │ │ └── LoginSuccessPacket.java │ │ │ │ │ │ │ ├── password │ │ │ │ │ │ │ │ └── LoginWithPasswordPacket.java │ │ │ │ │ │ │ ├── sign │ │ │ │ │ │ │ │ └── LoginWithSignPacket.java │ │ │ │ │ │ │ └── token │ │ │ │ │ │ │ │ └── LoginWithTokenPacket.java │ │ │ │ │ │ ├── message │ │ │ │ │ │ │ ├── delete │ │ │ │ │ │ │ │ ├── DeleteMessagePacket.java │ │ │ │ │ │ │ │ └── DeletedMessagePacket.java │ │ │ │ │ │ │ ├── notice │ │ │ │ │ │ │ │ └── NewMessageNoticePacket.java │ │ │ │ │ │ │ ├── select │ │ │ │ │ │ │ │ ├── FetchMessagePacket.java │ │ │ │ │ │ │ │ ├── FetchedMessagePacket.java │ │ │ │ │ │ │ │ ├── SelectMessagePacket.java │ │ │ │ │ │ │ │ └── SelectedMessagePacket.java │ │ │ │ │ │ │ └── send │ │ │ │ │ │ │ │ ├── SendMessagePacket.java │ │ │ │ │ │ │ │ ├── SendMessageRefusedPacket.java │ │ │ │ │ │ │ │ └── SentMessagePacket.java │ │ │ │ │ │ ├── ping │ │ │ │ │ │ │ ├── PingPacket.java │ │ │ │ │ │ │ ├── TryPingPacket.java │ │ │ │ │ │ │ └── TryPingResponsePacket.java │ │ │ │ │ │ ├── resource │ │ │ │ │ │ │ └── write │ │ │ │ │ │ │ │ ├── WriteResourceNextStepPacket.java │ │ │ │ │ │ │ │ └── WriteResourcePacket.java │ │ │ │ │ │ ├── setting │ │ │ │ │ │ │ └── NotDoneSettingsPacket.java │ │ │ │ │ │ └── test │ │ │ │ │ │ │ └── RequestTestPacket.java │ │ │ │ │ └── unsolve │ │ │ │ │ │ └── ping │ │ │ │ │ │ ├── UnsolvedPingPacket.java │ │ │ │ │ │ ├── UnsolvedTryPingPacket.java │ │ │ │ │ │ └── UnsolvedTryPingResponsePacket.java │ │ │ │ └── router │ │ │ │ │ ├── NetworkRouter.java │ │ │ │ │ ├── kalmia │ │ │ │ │ └── RequestRouter.java │ │ │ │ │ ├── meta │ │ │ │ │ └── RequestRouterMetadata.java │ │ │ │ │ └── status │ │ │ │ │ └── RequestState.java │ │ │ ├── plugin │ │ │ │ ├── Plugin.java │ │ │ │ └── internal │ │ │ │ │ ├── eventbus │ │ │ │ │ ├── EventBus.java │ │ │ │ │ ├── KalmiaEventBus.java │ │ │ │ │ └── handler │ │ │ │ │ │ ├── EventBusHandler.java │ │ │ │ │ │ ├── chat │ │ │ │ │ │ └── session │ │ │ │ │ │ │ ├── in │ │ │ │ │ │ │ ├── ChatInSessionEventBus.java │ │ │ │ │ │ │ └── ChatInSessionEventBusHandler.java │ │ │ │ │ │ │ ├── listeners │ │ │ │ │ │ │ ├── SessionListenersUpdateEventBus.java │ │ │ │ │ │ │ └── SessionListenersUpdateEventBusHandler.java │ │ │ │ │ │ │ └── request │ │ │ │ │ │ │ ├── RequestDuetSessionEventBusHandler.java │ │ │ │ │ │ │ ├── RequestDuetSessionUpdateEventBus.java │ │ │ │ │ │ │ ├── RequestGroupSessionEventBus.java │ │ │ │ │ │ │ └── RequestGroupSessionEventBusHandler.java │ │ │ │ │ │ ├── disconnect │ │ │ │ │ │ ├── TryDisconnectEventBus.java │ │ │ │ │ │ └── TryDisconnectEventBusHandler.java │ │ │ │ │ │ ├── handshake │ │ │ │ │ │ ├── crypto │ │ │ │ │ │ │ ├── aes │ │ │ │ │ │ │ │ ├── HandshakeAesCipherEventBus.java │ │ │ │ │ │ │ │ └── HandshakeAesCipherEventBusHandler.java │ │ │ │ │ │ │ └── ec │ │ │ │ │ │ │ │ ├── HandshakePreSharedEcEventBus.java │ │ │ │ │ │ │ │ └── HandshakePreSharedEcEventBusHandler.java │ │ │ │ │ │ └── hello │ │ │ │ │ │ │ ├── ClientHelloEventBus.java │ │ │ │ │ │ │ ├── ClientHelloEventBusHandler.java │ │ │ │ │ │ │ ├── ServerHelloEventBus.java │ │ │ │ │ │ │ └── ServerHelloEventBusHandler.java │ │ │ │ │ │ ├── invalid │ │ │ │ │ │ └── operation │ │ │ │ │ │ │ ├── DeleteMessageEventBus.java │ │ │ │ │ │ │ └── DeleteMessageEventBusHandler.java │ │ │ │ │ │ ├── key │ │ │ │ │ │ └── select │ │ │ │ │ │ │ ├── SelectKeyStoreEventBus.java │ │ │ │ │ │ │ ├── SelectKeyStoreEventBusHandler.java │ │ │ │ │ │ │ ├── SelectedKeyStoreEventBus.java │ │ │ │ │ │ │ └── SelectedKeyStoreEventBusHandler.java │ │ │ │ │ │ ├── launch │ │ │ │ │ │ ├── DoneLaunchEventBus.java │ │ │ │ │ │ └── DoneLaunchEventBusHandler.java │ │ │ │ │ │ ├── login │ │ │ │ │ │ ├── feedback │ │ │ │ │ │ │ ├── LoginFailureEventBus.java │ │ │ │ │ │ │ ├── LoginFailureEventBusHandler.java │ │ │ │ │ │ │ ├── LoginSuccessEventBus.java │ │ │ │ │ │ │ └── LoginSuccessEventBusHandler.java │ │ │ │ │ │ ├── password │ │ │ │ │ │ │ ├── LoginWithPasswordEventBus.java │ │ │ │ │ │ │ └── LoginWithPasswordEventBusHandler.java │ │ │ │ │ │ ├── sign │ │ │ │ │ │ │ ├── LoginWithSignEventBus.java │ │ │ │ │ │ │ └── LoginWithSignEventBusHandler.java │ │ │ │ │ │ └── token │ │ │ │ │ │ │ ├── LoginWithTokenEventBus.java │ │ │ │ │ │ │ └── LoginWithTokenEventBusHandler.java │ │ │ │ │ │ ├── message │ │ │ │ │ │ ├── delete │ │ │ │ │ │ │ ├── DeleteMessageEventBus.java │ │ │ │ │ │ │ ├── DeleteMessageEventBusHandler.java │ │ │ │ │ │ │ ├── DeletedMessageEventBus.java │ │ │ │ │ │ │ └── DeletedMessageEventBusHandler.java │ │ │ │ │ │ ├── notice │ │ │ │ │ │ │ ├── NewMessageNoticeEventBus.java │ │ │ │ │ │ │ └── NewMessageNoticeEventBusHandler.java │ │ │ │ │ │ ├── select │ │ │ │ │ │ │ ├── SelectMessageEventBus.java │ │ │ │ │ │ │ ├── SelectMessageEventBusHandler.java │ │ │ │ │ │ │ ├── SelectedMessageEventBus.java │ │ │ │ │ │ │ └── SelectedMessageEventBusHandler.java │ │ │ │ │ │ └── send │ │ │ │ │ │ │ ├── SendMessageEventBus.java │ │ │ │ │ │ │ ├── SendMessageEventBusHandler.java │ │ │ │ │ │ │ ├── SendMessageRefusedEventBus.java │ │ │ │ │ │ │ ├── SendMessageRefusedEventBusHandler.java │ │ │ │ │ │ │ ├── SentMessageEventBus.java │ │ │ │ │ │ │ └── SentMessageEventBusHandler.java │ │ │ │ │ │ ├── ping │ │ │ │ │ │ ├── TryPingEventBus.java │ │ │ │ │ │ ├── TryPingEventBusHandler.java │ │ │ │ │ │ ├── TryPingResponseEventBus.java │ │ │ │ │ │ └── TryPingResponseEventBusHandler.java │ │ │ │ │ │ └── resource │ │ │ │ │ │ └── write │ │ │ │ │ │ ├── RequestNextResourceShardEventBusHandler.java │ │ │ │ │ │ ├── WriteResourceEventBus.java │ │ │ │ │ │ ├── WriteResourceEventBusHandler.java │ │ │ │ │ │ └── WriteResourceNextStepEventBus.java │ │ │ │ │ ├── kalmia │ │ │ │ │ └── core │ │ │ │ │ │ ├── client │ │ │ │ │ │ ├── KalmiaClientCore.java │ │ │ │ │ │ └── handler │ │ │ │ │ │ │ ├── chat │ │ │ │ │ │ │ └── session │ │ │ │ │ │ │ │ ├── in │ │ │ │ │ │ │ │ └── ChatInSessionHandler.java │ │ │ │ │ │ │ │ └── listeners │ │ │ │ │ │ │ │ └── SessionListenersUpdateHandler.java │ │ │ │ │ │ │ ├── handshake │ │ │ │ │ │ │ ├── crypto │ │ │ │ │ │ │ │ └── ec │ │ │ │ │ │ │ │ │ └── pubkey │ │ │ │ │ │ │ │ │ └── HandshakePreSharedEcHandler.java │ │ │ │ │ │ │ └── hello │ │ │ │ │ │ │ │ └── server │ │ │ │ │ │ │ │ └── ServerHelloHandler.java │ │ │ │ │ │ │ ├── invalid │ │ │ │ │ │ │ └── operation │ │ │ │ │ │ │ │ └── OperationInvalidHandler.java │ │ │ │ │ │ │ ├── key │ │ │ │ │ │ │ └── select │ │ │ │ │ │ │ │ └── SelectedKeyStoreHandler.java │ │ │ │ │ │ │ ├── login │ │ │ │ │ │ │ └── feedback │ │ │ │ │ │ │ │ ├── LoginFailureHandler.java │ │ │ │ │ │ │ │ └── LoginSuccessHandler.java │ │ │ │ │ │ │ └── message │ │ │ │ │ │ │ ├── delete │ │ │ │ │ │ │ └── DeletedMessageHandler.java │ │ │ │ │ │ │ ├── notice │ │ │ │ │ │ │ └── NewMessageNoticeHandler.java │ │ │ │ │ │ │ ├── select │ │ │ │ │ │ │ ├── FetchedMessageHandler.java │ │ │ │ │ │ │ └── SelectedMessageHandler.java │ │ │ │ │ │ │ └── send │ │ │ │ │ │ │ ├── SendMessageRefusedHandler.java │ │ │ │ │ │ │ └── SentMessageHandler.java │ │ │ │ │ │ ├── server │ │ │ │ │ │ ├── KalmiaServerCore.java │ │ │ │ │ │ └── handler │ │ │ │ │ │ │ ├── chat │ │ │ │ │ │ │ └── session │ │ │ │ │ │ │ │ └── request │ │ │ │ │ │ │ │ ├── RequestDuetSessionHandler.java │ │ │ │ │ │ │ │ └── RequestGroupSessionHandler.java │ │ │ │ │ │ │ ├── handshake │ │ │ │ │ │ │ ├── crypto │ │ │ │ │ │ │ │ └── aes │ │ │ │ │ │ │ │ │ └── HandshakeAesCipherHandler.java │ │ │ │ │ │ │ └── hello │ │ │ │ │ │ │ │ └── client │ │ │ │ │ │ │ │ └── ClientHelloHandler.java │ │ │ │ │ │ │ ├── key │ │ │ │ │ │ │ └── select │ │ │ │ │ │ │ │ └── SelectKeyStoreHandler.java │ │ │ │ │ │ │ ├── login │ │ │ │ │ │ │ ├── password │ │ │ │ │ │ │ │ └── LoginWithPasswordHandler.java │ │ │ │ │ │ │ ├── sign │ │ │ │ │ │ │ │ └── LoginWithSignHandler.java │ │ │ │ │ │ │ └── token │ │ │ │ │ │ │ │ └── LoginWithTokenHandler.java │ │ │ │ │ │ │ ├── message │ │ │ │ │ │ │ ├── delete │ │ │ │ │ │ │ │ └── DeleteMessageHandler.java │ │ │ │ │ │ │ ├── select │ │ │ │ │ │ │ │ ├── FetchMessageHandler.java │ │ │ │ │ │ │ │ └── SelectMessageHandler.java │ │ │ │ │ │ │ └── send │ │ │ │ │ │ │ │ └── SendMessageHandler.java │ │ │ │ │ │ │ └── test │ │ │ │ │ │ │ └── RequestTestHandler.java │ │ │ │ │ │ ├── test │ │ │ │ │ │ └── KalmiaTest.java │ │ │ │ │ │ └── uni │ │ │ │ │ │ ├── KalmiaUniCore.java │ │ │ │ │ │ └── handler │ │ │ │ │ │ ├── disconnect │ │ │ │ │ │ └── TryDisconnectHandler.java │ │ │ │ │ │ └── resource │ │ │ │ │ │ └── write │ │ │ │ │ │ ├── WriteResourceHandler.java │ │ │ │ │ │ └── WriteResourceNextStepHandler.java │ │ │ │ │ └── translation │ │ │ │ │ ├── KalmiaTranslation.java │ │ │ │ │ └── handler │ │ │ │ │ ├── login │ │ │ │ │ └── TranslationLoginWithPasswordHandler.java │ │ │ │ │ ├── message │ │ │ │ │ └── select │ │ │ │ │ │ └── TranslationSelectMessageHandler.java │ │ │ │ │ └── meta │ │ │ │ │ └── TranslationProxyConnectHandler.java │ │ │ ├── profile │ │ │ │ └── UserProfile.java │ │ │ ├── protocol │ │ │ │ └── RequestProtocol.java │ │ │ ├── reflection │ │ │ │ └── field │ │ │ │ │ └── FieldGet.java │ │ │ ├── resource │ │ │ │ ├── manager │ │ │ │ │ ├── ResourcesManager.kt │ │ │ │ │ ├── Test.java │ │ │ │ │ └── writer │ │ │ │ │ │ └── ResourceWriter.kt │ │ │ │ └── upload │ │ │ │ │ └── ResourceUpload.kt │ │ │ ├── security │ │ │ │ └── cipher │ │ │ │ │ └── manager │ │ │ │ │ ├── KeyManager.java │ │ │ │ │ ├── ec │ │ │ │ │ ├── EcPrikeyManager.java │ │ │ │ │ └── EcPubkeyManager.java │ │ │ │ │ └── rsa │ │ │ │ │ ├── RsaPrikeyManager.java │ │ │ │ │ └── RsaPubkeyManager.java │ │ │ ├── server │ │ │ │ └── KalmiaServer.java │ │ │ ├── session │ │ │ │ ├── Session.java │ │ │ │ ├── SessionAccessible.kt │ │ │ │ ├── SessionAccessibleData.kt │ │ │ │ ├── Sessions.java │ │ │ │ ├── communal │ │ │ │ │ └── CommunalSession.java │ │ │ │ ├── database │ │ │ │ │ └── SessionDatabase.kt │ │ │ │ ├── duet │ │ │ │ │ └── DuetSession.java │ │ │ │ ├── factor │ │ │ │ │ └── SessionFactor.java │ │ │ │ ├── group │ │ │ │ │ └── GroupSession.java │ │ │ │ ├── inaccessible │ │ │ │ │ └── InaccessibleSession.java │ │ │ │ ├── listener │ │ │ │ │ └── SessionListeners.java │ │ │ │ ├── manager │ │ │ │ │ └── SessionManager.java │ │ │ │ └── serializer │ │ │ │ │ ├── CommunalSessionSerializer.java │ │ │ │ │ ├── DuetSessionSerializer.java │ │ │ │ │ └── GroupSessionSerializer.java │ │ │ ├── setting │ │ │ │ ├── Setting.java │ │ │ │ ├── Settings.java │ │ │ │ ├── key │ │ │ │ │ ├── lang │ │ │ │ │ │ └── LanguageSetting.kt │ │ │ │ │ └── session │ │ │ │ │ │ └── message │ │ │ │ │ │ └── processor │ │ │ │ │ │ └── SessionEnabledProcessorsSetting.kt │ │ │ │ ├── serializer │ │ │ │ │ ├── lang │ │ │ │ │ │ └── LanguageSettingSerializer.java │ │ │ │ │ └── session │ │ │ │ │ │ └── message │ │ │ │ │ │ └── processor │ │ │ │ │ │ └── SessionEnabledProcessorsSettingSerializer.java │ │ │ │ ├── session │ │ │ │ │ └── SessionSettings.java │ │ │ │ └── user │ │ │ │ │ └── UserSettings.java │ │ │ ├── threading │ │ │ │ └── ThreadingUtil.java │ │ │ ├── token │ │ │ │ └── TokenRecorder.java │ │ │ ├── translation │ │ │ │ ├── event │ │ │ │ │ ├── TranslationEvent.java │ │ │ │ │ ├── handler │ │ │ │ │ │ ├── TranslationEventHandler.java │ │ │ │ │ │ └── inbound │ │ │ │ │ │ │ ├── login │ │ │ │ │ │ │ └── password │ │ │ │ │ │ │ │ └── TranslationLoginWithPasswordEventHandler.java │ │ │ │ │ │ │ ├── message │ │ │ │ │ │ │ └── select │ │ │ │ │ │ │ │ └── TranslationSelectMessageEventHandler.java │ │ │ │ │ │ │ └── meta │ │ │ │ │ │ │ └── connect │ │ │ │ │ │ │ └── TranslationProxyConnectEventHandler.java │ │ │ │ │ └── inbound │ │ │ │ │ │ ├── login │ │ │ │ │ │ └── password │ │ │ │ │ │ │ └── TranslationLoginWithPasswordEvent.java │ │ │ │ │ │ ├── message │ │ │ │ │ │ └── select │ │ │ │ │ │ │ └── TranslationSelectMessageEvent.java │ │ │ │ │ │ └── meta │ │ │ │ │ │ └── connect │ │ │ │ │ │ └── TranslationProxyConnectEvent.java │ │ │ │ └── network │ │ │ │ │ ├── packet │ │ │ │ │ ├── TranslationPacket.java │ │ │ │ │ ├── login │ │ │ │ │ │ ├── TranslationLoginWithPasswordPacket.java │ │ │ │ │ │ └── feedback │ │ │ │ │ │ │ ├── TranslationLoginFailurePacket.java │ │ │ │ │ │ │ └── TranslationLoginSuccessPacket.java │ │ │ │ │ ├── message │ │ │ │ │ │ ├── notice │ │ │ │ │ │ │ └── TranslationNewMessageNoticePacket.java │ │ │ │ │ │ └── select │ │ │ │ │ │ │ ├── TranslationSelectMessagePacket.java │ │ │ │ │ │ │ └── TranslationSelectedMessagePacket.java │ │ │ │ │ └── meta │ │ │ │ │ │ ├── connect │ │ │ │ │ │ └── TranslationProxyConnectPacket.java │ │ │ │ │ │ └── status │ │ │ │ │ │ └── TranslationProxyStatusPacket.java │ │ │ │ │ └── router │ │ │ │ │ └── TranslationRouter.java │ │ │ └── user │ │ │ │ ├── DefaultUser.java │ │ │ │ ├── UselessUser.kt │ │ │ │ ├── User.java │ │ │ │ ├── database │ │ │ │ └── UserDatabase.kt │ │ │ │ ├── factor │ │ │ │ └── UserFactor.java │ │ │ │ ├── manager │ │ │ │ └── UserManager.java │ │ │ │ └── password │ │ │ │ └── UserPassword.java │ │ │ ├── modmdo │ │ │ └── annotation │ │ │ │ └── platform │ │ │ │ ├── Client.java │ │ │ │ ├── External.java │ │ │ │ ├── Generic.java │ │ │ │ └── Server.java │ │ │ ├── trtr │ │ │ ├── framework │ │ │ │ ├── accessor │ │ │ │ │ └── method │ │ │ │ │ │ └── MethodAccess.java │ │ │ │ └── exception │ │ │ │ │ ├── InvertOfControlException.java │ │ │ │ │ ├── NoAutoAnnotationException.java │ │ │ │ │ ├── NotStaticFieldException.java │ │ │ │ │ └── SetFinalFieldException.java │ │ │ └── util │ │ │ │ └── string │ │ │ │ └── StringConcat.java │ │ │ └── viburnum │ │ │ └── util │ │ │ └── bytes │ │ │ └── BytesUtil.java │ │ └── zhuaidadaya │ │ └── rikaishinikui │ │ └── handler │ │ └── universal │ │ ├── affair │ │ └── Affair.java │ │ └── receptacle │ │ └── Receptacle.java └── resources │ ├── configs │ ├── client │ │ ├── bootstrap │ │ │ └── network │ │ │ │ └── kalmia-client-bootstrap-network.json │ │ └── client-config.json │ ├── config-metadata.json │ ├── constant │ │ └── kalmia-constants.json │ ├── global │ │ └── kalmia-globals.json │ ├── index │ │ └── index.json │ ├── network │ │ └── router │ │ │ └── router-config.json │ ├── server │ │ ├── bootstrap │ │ │ └── network │ │ │ │ └── kalmia-server-bootstrap-network.json │ │ └── server-config.json │ └── translation │ │ └── translation-server.json │ ├── kalmiagram │ ├── lang │ │ ├── en_us.json │ │ └── zh_cn.json │ └── secret │ │ └── main │ │ ├── SECRET_PUBLIC │ │ └── cipher.json │ └── log4j2.xml └── test └── java ├── ConfigTest.java ├── ConnectionBenchmark.java ├── MiscellaneousManualTest.java ├── PaintData.java ├── WsTest.java └── Www.java /.gitignore: -------------------------------------------------------------------------------- 1 | # gradle 2 | .gradle/ 3 | build/ 4 | out/ 5 | classes/ 6 | 7 | # idea 8 | 9 | .idea/ 10 | *.iml 11 | *.ipr 12 | *.iws 13 | 14 | # vscode 15 | .settings/ 16 | .vscode/ 17 | bin/ 18 | .classpath 19 | .project 20 | 21 | # macos 22 | 23 | *.DS_Store 24 | 25 | # kalmia 26 | /run/ 27 | /logs/ 28 | /configs/ 29 | /data/ 30 | /ciphers/ 31 | /resources/ 32 | /src/main/resources/kalmiagram/secret/main/SECRET_PRIVATE -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Kalmia 2 | Open source chat platform 3 | 4 | ## Client 5 | Kalmia current have only two official gui client 6 | 7 | 8 | [Kalmiagram](https://github.com/linxuan8233/Kalmiagram) by Linxuan \ 9 | [KalmiaClient (Android)](https://github.com/cao-awa/KalmiaClient-Android) by cao_awa 10 | 11 | ## Contact 12 | ``` 13 | The group and channel here is Chinese community 14 | Please use Chinese as primary language 15 | ``` 16 | In Telegram group:[山月桂](https://t.me/kalmiagram) \ 17 | In Telegram channel:[山月桂桂桂](https://t.me/kalmiagram_dev) 18 | 19 | ![](https://count.getloli.com/get/@cao-awa.kalmia?theme=rule34) -------------------------------------------------------------------------------- /doc/zh_cn/security/how_security.md: -------------------------------------------------------------------------------- 1 | # 基本 2 | 3 | ### 摘要密码 4 | 5 | 使用摘要存储密码,即时计算摘要比对来登录 6 | 7 | ### 减少尝试 8 | 9 | 每个连接尝试登录的频率会被限制,指定时间内的登录尝试一定会失败且不会给出原因 10 | 11 | 以此防止密码暴力破解 12 | 13 | ### 传输加密 14 | 15 | 至少使用 256 位随机密钥与 32 位随机初始化向量进行至少 1 次 AES 加密 16 | 17 | ### 握手 18 | 19 | 至少使用 521 位预共享椭圆曲线密钥进行 AES 密钥与初始化向量交换,禁用 RSA 20 | 21 | AES 数据交换后使用 testKey、testSha校验加密数据 22 | 23 | 以此防止中间人窃取攻击 24 | 25 | ### 数据包校验 26 | 27 | 使用摘要确保数据包完整性和未被随机修改 28 | 29 | ### SQL注入 30 | 31 | 不使用SQL避免了SQL注入(不是) 32 | 33 | # 额外 34 | 35 | ### 重放攻击 36 | 37 | 在数据包中添加时间戳和随机唯一标识,使用有效时间和已记录标识拒绝重放攻击 38 | 39 | 这意味着过高的延迟将会无法使用山月桂 40 | 41 | # 尚未解决 42 | 43 | 中间人阻断、TCP Reset等阻断攻击 44 | 45 | # 实现 46 | 47 | ### 避免完全劫持 48 | 49 | MITM完全劫持(窃取)对山月桂是无效的,因为山月桂使用了一个预共享的公开公钥 50 | 51 | 客户端会准备好公钥域,然后请求服务端使用这个域下的私钥(域一般是 ```Kalmia/Main```) 52 | 53 | 由于中间人不知道 ```Kalmia/Main``` 下的私钥是什么 54 | \ 55 | 则无法解密客户端发给服务端的密文,AES密钥得到安全传输 56 | 57 | 若中间人使用其他私钥,则由于与公钥不匹配而无法解密 58 | 59 | 若是和客户端请求其他键下的密钥,需要客户端手动输入公钥 60 | \ 61 | 客户端可以在其他山月桂服务器的开放平台下获取公钥,而不会使用中间人的公钥 62 | 63 | 因此MITM(窃取)问题得到完全解决,但MITM(阻断)问题依旧存在 -------------------------------------------------------------------------------- /doc/zh_cn/standard/translation/list/translation_packet_list.md: -------------------------------------------------------------------------------- 1 | # 元数据 2 | 3 | [元数据翻译数据包列表](/doc/zh_cn/standard/translation/list/meta/translation_meta_packet_list.md) 4 | 5 | # 登录数据 6 | 7 | [登录数据翻译数据包列表](/doc/zh_cn/standard/translation/list/login/translation_login_packet_list.md) 8 | 9 | # 消息数据 10 | 11 | [消息数据翻译数据包列表](/doc/zh_cn/standard/translation/list/message/translation_message_packet_list.md) -------------------------------------------------------------------------------- /doc/zh_cn/standard/translation/translation.md: -------------------------------------------------------------------------------- 1 | 以下是一则数据包示例 2 | 3 | ```json 4 | { 5 | "post_type": "meta", 6 | "post_name": "login_with_password", 7 | "time": 1697935934367, 8 | "identity": "bD2skmV6loZOIki8jaGWdfv6", 9 | "data": { 10 | "uid": 114514, 11 | "pwd": "abc123xxx" 12 | } 13 | } 14 | ``` 15 | 16 | 其中 post_type 和 post_name 用以区分需要处理的是哪样的数据\ 17 | time 是毫秒时间戳(UNIX)\ 18 | identity 是基于客户端的唯一标识\ 19 | data 则是此数据包的负载内容,即数据包详情内容 20 | 21 | data里面的内容随着type和name变化而变化,具体请见:[数据包翻译列表](/doc/zh_cn/standard/translation/list) 22 | -------------------------------------------------------------------------------- /doc/zh_cn/standard/transport/packet/id_save.md: -------------------------------------------------------------------------------- 1 | # 数据包ID 2 | 3 | 请以 [Base256](/doc/zh_cn/standard/transport/number/number_encode_standard.md) 进行数字编码,不要使用负数 4 | 5 | # 主分支ID保留 6 | 7 | Kalmia主仓库保留ID序列 ```0```~```2147483647```,即:[0, 0, 0, 0, 127, -1, -1, -1] 8 | 9 | 任何来自其他分支或插件的自定义数据包请从 ```2147483648```~```9223372036854775807``` 挑选ID 10 | 11 | # 所有保留范围 12 | 13 | 第三方自定义数据包请将保留范围提交至此处来避免ID重复,以65535的整数倍作为保留区域,即便用不完 14 | 15 | 如 ```2200000000```~```2200065535``` 为最小范围,不应为 ```2200065534``` 或更小 16 | 17 | ## Kalmia(主分支) 18 | 19 | ```0```~```2147483647``` 20 | -------------------------------------------------------------------------------- /doc/zh_cn/standard/transport/serializer/id_save.md: -------------------------------------------------------------------------------- 1 | # 数据包ID 2 | 3 | 请以 [Base256](/doc/zh_cn/standard/transport/number/number_encode_standard.md) 进行数字编码,不要使用负数 4 | 5 | # 主分支ID保留 6 | 7 | Kalmia主仓库保留ID序列 ```0```~```2147483647```,即:[0, 0, 0, 0, 127, -1, -1, -1] 8 | 9 | 任何来自其他分支或插件的自定义序列化器请从 ```2147483648```~```9223372036854775807``` 挑选ID 10 | 11 | # 所有保留范围 12 | 13 | 第三方自定义序列化器请将保留范围提交至此处来避免ID重复,以65535的整数倍作为保留区域,即便用不完 14 | 15 | 如 ```2200000000```~```2200065535``` 为最小范围,不应为 ```2200065534``` 或更小 16 | 17 | ## Kalmia(主分支) 18 | 19 | ```0```~```2147483647``` 20 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | main_class=com.github.cao.awa.kalmia.bootstrap.Kalmia 2 | version_name=1.0.0 -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cao-awa/Kalmia/d46a0ebbbd8f61576f9a92b438ad6c55688e2ded/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /lombok.config: -------------------------------------------------------------------------------- 1 | # This file is generated by the 'io.freefair.lombok' Gradle plugin 2 | config.stopBubbling = true 3 | -------------------------------------------------------------------------------- /pfd/test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cao-awa/Kalmia/d46a0ebbbd8f61576f9a92b438ad6c55688e2ded/pfd/test.png -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'Kalmia' 2 | 3 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/apricot/annotations/Planning.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.apricot.annotations; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | import java.lang.annotation.Target; 6 | 7 | import static java.lang.annotation.ElementType.*; 8 | 9 | @Unsupported 10 | @Retention(RetentionPolicy.RUNTIME) 11 | @Target(value = {CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, MODULE, PARAMETER, TYPE}) 12 | public @interface Planning { 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/apricot/annotations/Stable.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.apricot.annotations; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | import java.lang.annotation.Target; 6 | 7 | import static java.lang.annotation.ElementType.*; 8 | 9 | @Stable 10 | @Retention(RetentionPolicy.RUNTIME) 11 | @Target(value = {CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, MODULE, PARAMETER, TYPE}) 12 | public @interface Stable { 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/apricot/annotations/Synchronized.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.apricot.annotations; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Stable 9 | @Retention(RetentionPolicy.RUNTIME) 10 | @Target(ElementType.TYPE) 11 | public @interface Synchronized { 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/apricot/annotations/Unsupported.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.apricot.annotations; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | import java.lang.annotation.Target; 6 | 7 | import static java.lang.annotation.ElementType.*; 8 | 9 | @Stable 10 | @Retention(RetentionPolicy.RUNTIME) 11 | @Target(value = {CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, MODULE, PARAMETER, TYPE}) 12 | public @interface Unsupported { 13 | String[] value() default ""; 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/apricot/annotations/Useless.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.apricot.annotations; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | import java.lang.annotation.Target; 6 | 7 | import static java.lang.annotation.ElementType.*; 8 | 9 | @Useless 10 | @Retention(RetentionPolicy.RUNTIME) 11 | @Target(value = {CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, MODULE, PARAMETER, TYPE}) 12 | public @interface Useless { 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/apricot/annotations/Warning.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.apricot.annotations; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | import java.lang.annotation.Target; 6 | 7 | import static java.lang.annotation.ElementType.*; 8 | 9 | @Stable 10 | @Retention(RetentionPolicy.RUNTIME) 11 | @Target(value = {CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, MODULE, PARAMETER, TYPE}) 12 | public @interface Warning { 13 | String[] value(); 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/apricot/annotations/auto/Auto.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.apricot.annotations.auto; 2 | 3 | import com.github.cao.awa.apricot.annotations.Stable; 4 | 5 | import java.lang.annotation.ElementType; 6 | import java.lang.annotation.Retention; 7 | import java.lang.annotation.RetentionPolicy; 8 | import java.lang.annotation.Target; 9 | 10 | @Auto 11 | @Stable 12 | @Retention(RetentionPolicy.RUNTIME) 13 | @Target({ElementType.CONSTRUCTOR, ElementType.TYPE, ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER}) 14 | public @interface Auto { 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/apricot/annotations/auto/AutoPlugin.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.apricot.annotations.auto; 2 | 3 | import com.github.cao.awa.apricot.annotations.Stable; 4 | 5 | import java.lang.annotation.ElementType; 6 | import java.lang.annotation.Retention; 7 | import java.lang.annotation.RetentionPolicy; 8 | import java.lang.annotation.Target; 9 | 10 | @Auto 11 | @Stable 12 | @Retention(RetentionPolicy.RUNTIME) 13 | @Target(ElementType.TYPE) 14 | public @interface AutoPlugin { 15 | String name(); 16 | 17 | String uuid() default ""; 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/apricot/identifier/BytesRandomIdentifier.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.apricot.identifier; 2 | 3 | import com.github.cao.awa.apricot.annotations.Stable; 4 | import com.github.cao.awa.kalmia.constant.IntegerConstants; 5 | 6 | import java.util.Random; 7 | 8 | @Stable 9 | public class BytesRandomIdentifier { 10 | private static final Random RANDOM = new Random(); 11 | 12 | public static byte[] create() { 13 | return create(IntegerConstants.K); 14 | } 15 | 16 | public static byte[] create(int size) { 17 | byte[] bytes = new byte[size]; 18 | RANDOM.nextBytes(bytes); 19 | return bytes; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/apricot/resource/loader/ResourceLoader.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.apricot.resource.loader; 2 | 3 | import com.github.cao.awa.apricot.annotations.Stable; 4 | 5 | import java.io.File; 6 | import java.io.InputStream; 7 | import java.net.URL; 8 | 9 | @Stable 10 | public class ResourceLoader { 11 | public static InputStream stream(String resource) { 12 | return ResourceLoader.class.getClassLoader() 13 | .getResourceAsStream(resource); 14 | } 15 | 16 | public static URL url(String resource) { 17 | return ResourceLoader.class.getClassLoader() 18 | .getResource(resource); 19 | } 20 | 21 | public static File file(String resource) { 22 | return new File(String.valueOf(ResourceLoader.class.getResource(resource))); 23 | } 24 | } 25 | 26 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/annotations/actor/Getter.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.annotations.actor; 2 | 3 | import com.github.cao.awa.apricot.annotations.Stable; 4 | import com.github.cao.awa.apricot.annotations.auto.Auto; 5 | 6 | import java.lang.annotation.ElementType; 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | import java.lang.annotation.Target; 10 | 11 | /** 12 | * The annotation mark a method is a getter of a field. 13 | */ 14 | @Auto 15 | @Stable 16 | @Retention(RetentionPolicy.RUNTIME) 17 | @Target({ElementType.METHOD}) 18 | public @interface Getter { 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/annotations/actor/Setter.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.annotations.actor; 2 | 3 | import com.github.cao.awa.apricot.annotations.Stable; 4 | import com.github.cao.awa.apricot.annotations.auto.Auto; 5 | 6 | import java.lang.annotation.ElementType; 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | import java.lang.annotation.Target; 10 | 11 | /** 12 | * The annotation mark a method is a setter of a field. 13 | */ 14 | @Auto 15 | @Stable 16 | @Retention(RetentionPolicy.RUNTIME) 17 | @Target({ElementType.METHOD}) 18 | public @interface Setter { 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/annotations/auto/event/AutoHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.annotations.auto.event; 2 | 3 | import com.github.cao.awa.apricot.annotations.Stable; 4 | import com.github.cao.awa.apricot.annotations.auto.Auto; 5 | import com.github.cao.awa.kalmia.event.Event; 6 | 7 | import java.lang.annotation.ElementType; 8 | import java.lang.annotation.Retention; 9 | import java.lang.annotation.RetentionPolicy; 10 | import java.lang.annotation.Target; 11 | 12 | @Auto 13 | @Stable 14 | @Retention(RetentionPolicy.RUNTIME) 15 | @Target(ElementType.TYPE) 16 | public @interface AutoHandler { 17 | Class value(); 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/annotations/auto/event/network/NetworkEventTarget.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.annotations.auto.event.network; 2 | 3 | import com.github.cao.awa.apricot.annotations.Stable; 4 | import com.github.cao.awa.apricot.annotations.auto.Auto; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 6 | 7 | import java.lang.annotation.ElementType; 8 | import java.lang.annotation.Retention; 9 | import java.lang.annotation.RetentionPolicy; 10 | import java.lang.annotation.Target; 11 | 12 | @Auto 13 | @Stable 14 | @Retention(RetentionPolicy.RUNTIME) 15 | @Target(ElementType.TYPE) 16 | public @interface NetworkEventTarget { 17 | Class> value(); 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/annotations/auto/event/translation/TranslationEventTarget.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.annotations.auto.event.translation; 2 | 3 | import com.github.cao.awa.apricot.annotations.Stable; 4 | import com.github.cao.awa.apricot.annotations.auto.Auto; 5 | import com.github.cao.awa.kalmia.translation.event.TranslationEvent; 6 | 7 | import java.lang.annotation.ElementType; 8 | import java.lang.annotation.Retention; 9 | import java.lang.annotation.RetentionPolicy; 10 | import java.lang.annotation.Target; 11 | 12 | @Auto 13 | @Stable 14 | @Retention(RetentionPolicy.RUNTIME) 15 | @Target(ElementType.TYPE) 16 | public @interface TranslationEventTarget { 17 | Class> value(); 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/annotations/auto/network/unsolve/AutoAllData.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.annotations.auto.network.unsolve; 2 | 3 | import com.github.cao.awa.apricot.annotations.Stable; 4 | import com.github.cao.awa.apricot.annotations.auto.Auto; 5 | 6 | import java.lang.annotation.ElementType; 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | import java.lang.annotation.Target; 10 | 11 | @Auto 12 | @Stable 13 | @Retention(RetentionPolicy.RUNTIME) 14 | @Target({ElementType.TYPE}) 15 | public @interface AutoAllData { 16 | String key() default ""; 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/annotations/auto/network/unsolve/AutoData.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.annotations.auto.network.unsolve; 2 | 3 | import com.github.cao.awa.apricot.annotations.Stable; 4 | import com.github.cao.awa.apricot.annotations.auto.Auto; 5 | 6 | import java.lang.annotation.ElementType; 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | import java.lang.annotation.Target; 10 | 11 | @Auto 12 | @Stable 13 | @Retention(RetentionPolicy.RUNTIME) 14 | @Target({ElementType.FIELD}) 15 | public @interface AutoData { 16 | String key() default ""; 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/annotations/auto/network/unsolve/AutoSolvedPacket.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.annotations.auto.network.unsolve; 2 | 3 | import com.github.cao.awa.apricot.annotations.Stable; 4 | import com.github.cao.awa.apricot.annotations.auto.Auto; 5 | 6 | import java.lang.annotation.ElementType; 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | import java.lang.annotation.Target; 10 | 11 | @Auto 12 | @Stable 13 | @Retention(RetentionPolicy.RUNTIME) 14 | @Target({ElementType.TYPE}) 15 | public @interface AutoSolvedPacket { 16 | long id(); 17 | 18 | boolean crypto(); 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/annotations/auto/serializer/AutoBytesSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.annotations.auto.serializer; 2 | 3 | import com.github.cao.awa.apricot.annotations.Stable; 4 | import com.github.cao.awa.apricot.annotations.auto.Auto; 5 | 6 | import java.lang.annotation.ElementType; 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | import java.lang.annotation.Target; 10 | 11 | @Auto 12 | @Stable 13 | @Retention(RetentionPolicy.RUNTIME) 14 | @Target({ElementType.TYPE}) 15 | public @interface AutoBytesSerializer { 16 | long value(); 17 | 18 | Class[] target(); 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/annotations/auto/serializer/AutoJsonSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.annotations.auto.serializer; 2 | 3 | import com.github.cao.awa.apricot.annotations.Stable; 4 | import com.github.cao.awa.apricot.annotations.auto.Auto; 5 | 6 | import java.lang.annotation.ElementType; 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | import java.lang.annotation.Target; 10 | 11 | @Auto 12 | @Stable 13 | @Retention(RetentionPolicy.RUNTIME) 14 | @Target({ElementType.TYPE}) 15 | public @interface AutoJsonSerializer { 16 | Class[] target(); 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/annotations/auto/serializer/Missing.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.annotations.auto.serializer; 2 | 3 | import com.github.cao.awa.apricot.annotations.Stable; 4 | import com.github.cao.awa.apricot.annotations.auto.Auto; 5 | 6 | import java.lang.annotation.ElementType; 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | import java.lang.annotation.Target; 10 | 11 | @Auto 12 | @Stable 13 | @Retention(RetentionPolicy.RUNTIME) 14 | @Target({ElementType.FIELD}) 15 | public @interface Missing { 16 | String standby(); 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/annotations/config/AutoConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.annotations.config; 2 | 3 | import com.github.cao.awa.apricot.annotations.Stable; 4 | import com.github.cao.awa.apricot.annotations.auto.Auto; 5 | 6 | import java.lang.annotation.ElementType; 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | import java.lang.annotation.Target; 10 | 11 | @Auto 12 | @Stable 13 | @Retention(RetentionPolicy.RUNTIME) 14 | @Target(ElementType.FIELD) 15 | public @interface AutoConfig { 16 | String value() default ""; 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/annotations/config/AutoConfigTemplate.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.annotations.config; 2 | 3 | import com.github.cao.awa.apricot.annotations.Stable; 4 | import com.github.cao.awa.apricot.annotations.auto.Auto; 5 | 6 | import java.lang.annotation.ElementType; 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | import java.lang.annotation.Target; 10 | 11 | @Auto 12 | @Stable 13 | @Retention(RetentionPolicy.RUNTIME) 14 | @Target(ElementType.TYPE) 15 | public @interface AutoConfigTemplate { 16 | /** 17 | * 配置模板文件名称 18 | * 19 | * @return 配置模板文件名称 20 | */ 21 | String value(); 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/annotations/config/BinaryConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.annotations.config; 2 | 3 | import com.github.cao.awa.apricot.annotations.Stable; 4 | import com.github.cao.awa.apricot.annotations.auto.Auto; 5 | 6 | import java.lang.annotation.ElementType; 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | import java.lang.annotation.Target; 10 | 11 | @Auto 12 | @Stable 13 | @Retention(RetentionPolicy.RUNTIME) 14 | @Target(ElementType.TYPE) 15 | public @interface BinaryConfig { 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/annotations/config/UseConfigTemplate.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.annotations.config; 2 | 3 | import com.github.cao.awa.apricot.annotations.Stable; 4 | import com.github.cao.awa.apricot.annotations.auto.Auto; 5 | import com.github.cao.awa.kalmia.config.template.ConfigTemplate; 6 | 7 | import java.lang.annotation.ElementType; 8 | import java.lang.annotation.Retention; 9 | import java.lang.annotation.RetentionPolicy; 10 | import java.lang.annotation.Target; 11 | 12 | @Auto 13 | @Stable 14 | @Retention(RetentionPolicy.RUNTIME) 15 | @Target(ElementType.TYPE) 16 | public @interface UseConfigTemplate { 17 | Class> value(); 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/annotations/crypto/CryptoEncoded.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.annotations.crypto; 2 | 3 | public @interface CryptoEncoded { 4 | } 5 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/annotations/crypto/NotDecoded.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.annotations.crypto; 2 | 3 | public @interface NotDecoded { 4 | } 5 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/annotations/inaction/DoNotOverride.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.annotations.inaction; 2 | 3 | import com.github.cao.awa.apricot.annotations.Stable; 4 | import com.github.cao.awa.apricot.annotations.auto.Auto; 5 | 6 | import java.lang.annotation.ElementType; 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | import java.lang.annotation.Target; 10 | 11 | /** 12 | * The annotation mark a method should not be overrides. 13 | */ 14 | @Auto 15 | @Stable 16 | @Retention(RetentionPolicy.RUNTIME) 17 | @Target({ElementType.METHOD}) 18 | public @interface DoNotOverride { 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/annotations/inaction/DoNotSet.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.annotations.inaction; 2 | 3 | import com.github.cao.awa.apricot.annotations.Stable; 4 | import com.github.cao.awa.apricot.annotations.auto.Auto; 5 | 6 | import java.lang.annotation.ElementType; 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | import java.lang.annotation.Target; 10 | 11 | /** 12 | * The annotation mark a method should not be set value of this field or variable. 13 | */ 14 | @Auto 15 | @Stable 16 | @Retention(RetentionPolicy.RUNTIME) 17 | @Target({ElementType.FIELD, ElementType.LOCAL_VARIABLE}) 18 | public @interface DoNotSet { 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/annotations/number/encode/ShouldSkipped.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.annotations.number.encode; 2 | 3 | import com.github.cao.awa.apricot.annotations.Stable; 4 | import com.github.cao.awa.apricot.annotations.auto.Auto; 5 | 6 | import java.lang.annotation.ElementType; 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | import java.lang.annotation.Target; 10 | 11 | @Auto 12 | @Stable 13 | @Retention(RetentionPolicy.RUNTIME) 14 | @Target({ElementType.FIELD, ElementType.PARAMETER}) 15 | public @interface ShouldSkipped { 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/annotations/plugin/PluginRegister.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.annotations.plugin; 2 | 3 | import com.github.cao.awa.apricot.annotations.Stable; 4 | import com.github.cao.awa.apricot.annotations.auto.Auto; 5 | 6 | import java.lang.annotation.ElementType; 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | import java.lang.annotation.Target; 10 | 11 | @Auto 12 | @Stable 13 | @Retention(RetentionPolicy.RUNTIME) 14 | @Target(ElementType.TYPE) 15 | public @interface PluginRegister { 16 | String name(); 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/annotations/threading/ForceMainThread.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.annotations.threading; 2 | 3 | import com.github.cao.awa.apricot.annotations.Stable; 4 | 5 | import java.lang.annotation.ElementType; 6 | import java.lang.annotation.Retention; 7 | import java.lang.annotation.RetentionPolicy; 8 | import java.lang.annotation.Target; 9 | 10 | @Stable 11 | @Retention(RetentionPolicy.RUNTIME) 12 | @Target({ElementType.CONSTRUCTOR, ElementType.TYPE, ElementType.METHOD}) 13 | public @interface ForceMainThread { 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/annotations/translation/Translation.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.annotations.translation; 2 | 3 | 4 | import com.github.cao.awa.apricot.annotations.Stable; 5 | import com.github.cao.awa.apricot.annotations.auto.Auto; 6 | 7 | import java.lang.annotation.ElementType; 8 | import java.lang.annotation.Retention; 9 | import java.lang.annotation.RetentionPolicy; 10 | import java.lang.annotation.Target; 11 | 12 | @Auto 13 | @Stable 14 | @Retention(RetentionPolicy.RUNTIME) 15 | @Target(ElementType.TYPE) 16 | public @interface Translation { 17 | String type(); 18 | 19 | String name(); 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/attack/exhaustive/ExhaustiveLogin.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.attack.exhaustive; 2 | 3 | import com.github.cao.awa.apricot.util.collection.ApricotCollectionFactor; 4 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 5 | 6 | import java.util.List; 7 | 8 | public class ExhaustiveLogin { 9 | private static final List invalidRouters = ApricotCollectionFactor.timedList(1500); 10 | 11 | public static boolean validate(RequestRouter router) { 12 | if (invalidRouters.contains(router)) { 13 | return false; 14 | } else { 15 | invalidRouters.add(router); 16 | return true; 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/bootstrap/ConnectTest.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.bootstrap; 2 | 3 | public class ConnectTest { 4 | public static void main(String[] args) throws Exception { 5 | testConnect(); 6 | } 7 | 8 | // @Test 9 | public static void testConnect() throws Exception { 10 | Kalmia.startClient(); 11 | } 12 | 13 | private static void startServer() throws Exception { 14 | Kalmia.startServer(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/bootstrap/Translation.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.bootstrap; 2 | 3 | public class Translation { 4 | } 5 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/bug/BugTrace.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.bug; 2 | 3 | import org.apache.logging.log4j.LogManager; 4 | import org.apache.logging.log4j.Logger; 5 | 6 | public class BugTrace { 7 | private static final Logger LOGGER = LogManager.getLogger("BugTracer"); 8 | 9 | public static void trace(Throwable exception, String info) { 10 | trace(exception, 11 | info, 12 | false 13 | ); 14 | } 15 | 16 | public static void trace(Throwable exception, String info, boolean pleaseReport) { 17 | LOGGER.error((pleaseReport ? "[Please report] " : "") + info, 18 | exception 19 | ); 20 | } 21 | 22 | public static void trace(String info) { 23 | trace(info, 24 | false 25 | ); 26 | } 27 | 28 | public static void trace(String info, boolean pleaseReport) { 29 | LOGGER.error((pleaseReport ? "[Please report] " : "") + info); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/config/KalmiaConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.config; 2 | 3 | import com.github.cao.awa.kalmia.config.instance.ConfigEntry; 4 | import com.github.cao.awa.kalmia.env.KalmiaEnv; 5 | 6 | import java.lang.reflect.Field; 7 | 8 | public abstract class KalmiaConfig { 9 | public static void create(Object target) { 10 | KalmiaEnv.CONFIG_FRAMEWORK.createConfig(target); 11 | } 12 | 13 | public static void createEntry(ConfigEntry target, Field field) { 14 | KalmiaEnv.CONFIG_FRAMEWORK.createEntry(target, 15 | field 16 | ); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/config/global/KalmiaGlobalConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.config.global; 2 | 3 | import com.github.cao.awa.kalmia.annotations.config.AutoConfig; 4 | import com.github.cao.awa.kalmia.annotations.config.UseConfigTemplate; 5 | import com.github.cao.awa.kalmia.config.KalmiaConfig; 6 | import com.github.cao.awa.kalmia.config.instance.ConfigEntry; 7 | import com.github.cao.awa.kalmia.config.template.global.KalmiaGlobalConfigTemplate; 8 | 9 | @UseConfigTemplate(KalmiaGlobalConfigTemplate.class) 10 | public class KalmiaGlobalConfig extends KalmiaConfig { 11 | @AutoConfig("enabled_translation") 12 | public final ConfigEntry enabledTranslation = ConfigEntry.entry(); 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/config/inherite/InheritedValue.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.config.inherite; 2 | 3 | public record InheritedValue(String templateName, String key) { 4 | } 5 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/config/instance/ConfigEntry.kt: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.config.instance 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto 4 | import com.github.cao.awa.sinuatum.manipulate.Manipulate 5 | import org.jetbrains.annotations.NotNull 6 | 7 | open class ConfigEntry { 8 | companion object { 9 | val ENTRY: ConfigEntry<*> = ConfigEntry() 10 | 11 | @JvmStatic 12 | fun entry(): ConfigEntry = Manipulate.cast(ENTRY)!! 13 | } 14 | 15 | @Auto 16 | private val key: String? = null 17 | 18 | @Auto 19 | private var value: T? = null 20 | 21 | @Auto 22 | constructor(@Auto specifyType: Class) 23 | 24 | @Auto 25 | constructor() 26 | 27 | fun key(): String? = this.key 28 | 29 | @NotNull 30 | open fun get(): T? = this.value 31 | 32 | open fun update(value: T): ConfigEntry? { 33 | this.value = value 34 | return this 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/config/metadata/MetadataConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.config.metadata; 2 | 3 | import com.github.cao.awa.kalmia.annotations.config.AutoConfig; 4 | import com.github.cao.awa.kalmia.annotations.config.UseConfigTemplate; 5 | import com.github.cao.awa.kalmia.config.KalmiaConfig; 6 | import com.github.cao.awa.kalmia.config.instance.ConfigEntry; 7 | import com.github.cao.awa.kalmia.config.template.metadata.MetadataConfigTemplate; 8 | 9 | @UseConfigTemplate(MetadataConfigTemplate.class) 10 | public class MetadataConfig extends KalmiaConfig { 11 | @AutoConfig("version") 12 | public final ConfigEntry configVersion = ConfigEntry.entry(); 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/config/network/router/RequestRouterConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.config.network.router; 2 | 3 | import com.github.cao.awa.kalmia.annotations.config.AutoConfig; 4 | import com.github.cao.awa.kalmia.annotations.config.UseConfigTemplate; 5 | import com.github.cao.awa.kalmia.config.KalmiaConfig; 6 | import com.github.cao.awa.kalmia.config.instance.ConfigEntry; 7 | import com.github.cao.awa.kalmia.config.metadata.MetadataConfig; 8 | import com.github.cao.awa.kalmia.config.template.network.router.RequestRouterConfigTemplate; 9 | 10 | @UseConfigTemplate(RequestRouterConfigTemplate.class) 11 | public class RequestRouterConfig extends KalmiaConfig { 12 | @AutoConfig("metadata") 13 | public final ConfigEntry metadata = ConfigEntry.entry(); 14 | @AutoConfig("compress_threshold") 15 | public final ConfigEntry compressThreshold = ConfigEntry.entry(); 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/config/server/translation/KalmiaTranslationServerConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.config.server.translation; 2 | 3 | import com.github.cao.awa.kalmia.annotations.config.AutoConfig; 4 | import com.github.cao.awa.kalmia.annotations.config.UseConfigTemplate; 5 | import com.github.cao.awa.kalmia.config.KalmiaConfig; 6 | import com.github.cao.awa.kalmia.config.instance.ConfigEntry; 7 | import com.github.cao.awa.kalmia.config.metadata.MetadataConfig; 8 | import com.github.cao.awa.kalmia.config.template.server.translation.KalmiaTranslationServerConfigTemplate; 9 | 10 | @UseConfigTemplate(KalmiaTranslationServerConfigTemplate.class) 11 | public class KalmiaTranslationServerConfig extends KalmiaConfig { 12 | @AutoConfig("metadata") 13 | public final ConfigEntry metadata = ConfigEntry.entry(); 14 | @AutoConfig("enabled") 15 | public final ConfigEntry enabled = ConfigEntry.entry(); 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/config/template/ConfigTemplate.kt: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.config.template 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto 4 | import com.github.cao.awa.kalmia.annotations.config.AutoConfig 5 | import com.github.cao.awa.kalmia.config.KalmiaConfig 6 | 7 | @Auto 8 | open class ConfigTemplate { 9 | @Auto 10 | @AutoConfig 11 | private var config: T? = null 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/config/template/client/KalmiaClientConfigTemplate.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.config.template.client; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.config.AutoConfigTemplate; 5 | import com.github.cao.awa.kalmia.config.client.KalmiaClientConfig; 6 | import com.github.cao.awa.kalmia.config.template.ConfigTemplate; 7 | 8 | @Auto 9 | @AutoConfigTemplate("KalmiaClientConfigTemplate") 10 | public class KalmiaClientConfigTemplate extends ConfigTemplate { 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/config/template/client/bootstarp/network/KalmiaClientBootstrapNetworkConfigTemplate.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.config.template.client.bootstarp.network; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.config.AutoConfigTemplate; 5 | import com.github.cao.awa.kalmia.config.client.bootstrap.network.KalmiaClientBootstrapNetworkConfig; 6 | import com.github.cao.awa.kalmia.config.template.ConfigTemplate; 7 | 8 | @Auto 9 | @AutoConfigTemplate("KalmiaClientBootstrapNetworkConfigTemplate") 10 | public class KalmiaClientBootstrapNetworkConfigTemplate extends ConfigTemplate { 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/config/template/constants/KalmiaConstantsConfigTemplate.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.config.template.constants; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.config.AutoConfigTemplate; 5 | import com.github.cao.awa.kalmia.config.constant.KalmiaConstantsConfig; 6 | import com.github.cao.awa.kalmia.config.template.ConfigTemplate; 7 | 8 | @Auto 9 | @AutoConfigTemplate("C") 10 | public class KalmiaConstantsConfigTemplate extends ConfigTemplate { 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/config/template/global/KalmiaGlobalConfigTemplate.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.config.template.global; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.config.AutoConfigTemplate; 5 | import com.github.cao.awa.kalmia.config.global.KalmiaGlobalConfig; 6 | import com.github.cao.awa.kalmia.config.template.ConfigTemplate; 7 | 8 | @Auto 9 | @AutoConfigTemplate("G") 10 | public class KalmiaGlobalConfigTemplate extends ConfigTemplate { 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/config/template/metadata/MetadataConfigTemplate.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.config.template.metadata; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.config.AutoConfigTemplate; 5 | import com.github.cao.awa.kalmia.config.metadata.MetadataConfig; 6 | import com.github.cao.awa.kalmia.config.template.ConfigTemplate; 7 | 8 | @Auto 9 | @AutoConfigTemplate("MetadataConfigTemplate") 10 | public class MetadataConfigTemplate extends ConfigTemplate { 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/config/template/network/router/RequestRouterConfigTemplate.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.config.template.network.router; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.config.AutoConfigTemplate; 5 | import com.github.cao.awa.kalmia.config.network.router.RequestRouterConfig; 6 | import com.github.cao.awa.kalmia.config.template.ConfigTemplate; 7 | 8 | @Auto 9 | @AutoConfigTemplate("RequestRouterConfigTemplate") 10 | public class RequestRouterConfigTemplate extends ConfigTemplate { 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/config/template/server/KalmiaServerConfigTemplate.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.config.template.server; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.config.AutoConfigTemplate; 5 | import com.github.cao.awa.kalmia.config.server.KalmiaServerConfig; 6 | import com.github.cao.awa.kalmia.config.template.ConfigTemplate; 7 | 8 | @Auto 9 | @AutoConfigTemplate("KalmiaServerConfigTemplate") 10 | public class KalmiaServerConfigTemplate extends ConfigTemplate { 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/config/template/server/bootstarp/network/KalmiaServerBootstrapNetworkConfigTemplate.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.config.template.server.bootstarp.network; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.config.AutoConfigTemplate; 5 | import com.github.cao.awa.kalmia.config.server.bootstrap.network.KalmiaServerBootstrapNetworkConfig; 6 | import com.github.cao.awa.kalmia.config.template.ConfigTemplate; 7 | 8 | @Auto 9 | @AutoConfigTemplate("KalmiaServerBootstrapNetworkConfigTemplate") 10 | public class KalmiaServerBootstrapNetworkConfigTemplate extends ConfigTemplate { 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/config/template/server/translation/KalmiaTranslationServerConfigTemplate.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.config.template.server.translation; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.config.AutoConfigTemplate; 5 | import com.github.cao.awa.kalmia.config.server.translation.KalmiaTranslationServerConfig; 6 | import com.github.cao.awa.kalmia.config.template.ConfigTemplate; 7 | 8 | @Auto 9 | @AutoConfigTemplate("KalmiaTranslationServerConfigTemplate") 10 | public class KalmiaTranslationServerConfigTemplate extends ConfigTemplate { 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/constant/IntegerConstants.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.constant; 2 | 3 | public class IntegerConstants { 4 | public static final int K = 1024; 5 | public static final int K_TIDY = 1000; 6 | public static final int K_4 = 8 * K; 7 | public static final int K_8 = 8 * K; 8 | public static final int K_16 = 16 * K; 9 | public static final int K_TIDY_16 = 16 * K_TIDY; 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/convert/ByteArrayConvertable.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.convert; 2 | 3 | public interface ByteArrayConvertable { 4 | byte[] toBytes(); 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/convert/BytesValueConvertable.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.convert; 2 | 3 | import java.math.BigInteger; 4 | import java.nio.charset.StandardCharsets; 5 | 6 | public interface BytesValueConvertable { 7 | byte[] bytes(); 8 | 9 | default String value16() { 10 | return new BigInteger(bytes()).toString(16); 11 | } 12 | 13 | default String value36() { 14 | return new BigInteger(bytes()).toString(36); 15 | } 16 | 17 | default String value256() { 18 | return new String(bytes(), 19 | StandardCharsets.ISO_8859_1 20 | ); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/database/KeyValueBytesDatabase.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.database; 2 | 3 | import com.github.cao.awa.kalmia.database.key.BytesKey; 4 | 5 | import java.util.Map; 6 | import java.util.function.Supplier; 7 | 8 | public abstract class KeyValueBytesDatabase extends KeyValueDatabase { 9 | 10 | public KeyValueBytesDatabase(Supplier> cacheDelegate) { 11 | super(cacheDelegate); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/database/key/BytesKey.kt: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.database.key 2 | 3 | class BytesKey(private val key: ByteArray) { 4 | companion object { 5 | @JvmStatic 6 | fun of(key: ByteArray): BytesKey = BytesKey(key) 7 | } 8 | 9 | fun key(): ByteArray = this.key 10 | 11 | override fun equals(o: Any?): Boolean = this === o || o is BytesKey && this.key.contentEquals(o.key) 12 | 13 | override fun hashCode(): Int = this.key.contentHashCode() 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/database/provider/DatabaseProviders.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.database.provider; 2 | 3 | import com.github.cao.awa.apricot.util.collection.ApricotCollectionFactor; 4 | import com.github.cao.awa.kalmia.database.KeyValueBytesDatabase; 5 | import com.github.cao.awa.kalmia.database.key.BytesKey; 6 | import com.github.cao.awa.kalmia.database.provider.leveldb.LevelDbProvider; 7 | 8 | import java.util.Map; 9 | import java.util.function.Supplier; 10 | 11 | public class DatabaseProviders { 12 | public static KeyValueBytesDatabase bytes(String path) throws Exception { 13 | return new LevelDbProvider( 14 | ApricotCollectionFactor :: hashMap, 15 | path 16 | ); 17 | } 18 | 19 | public static KeyValueBytesDatabase bytes(Supplier> delegate, String path) throws Exception { 20 | return new LevelDbProvider( 21 | delegate, 22 | path 23 | ); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/debug/dependency/circular/RequiredDependency.kt: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.debug.dependency.circular 2 | 3 | import com.github.cao.awa.apricot.util.collection.ApricotCollectionFactor 4 | import java.util.function.Consumer; 5 | 6 | class RequiredDependency { 7 | private val required: MutableList = ApricotCollectionFactor.arrayList() 8 | 9 | fun add(dependency: Any): RequiredDependency { 10 | this.required.add(dependency) 11 | return this 12 | } 13 | 14 | fun get(): List = this.required 15 | 16 | fun forEach(consumer: Consumer?) = this.required.forEach(consumer) 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/digest/DigestedObject.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.digest; 2 | 3 | import com.github.cao.awa.kalmia.message.digest.DigestData; 4 | 5 | public interface DigestedObject { 6 | DigestData digest(); 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/Event.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event; 2 | 3 | public abstract class Event { 4 | public String name() { 5 | return getClass().getSimpleName(); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/EventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler; 2 | 3 | import com.github.cao.awa.kalmia.event.Event; 4 | 5 | public interface EventHandler { 6 | void handle(E event); 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/launch/done/DoneLaunchEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.launch.done; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.EventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.launch.done.DoneLaunchEvent; 7 | import com.github.cao.awa.modmdo.annotation.platform.Client; 8 | 9 | @Auto 10 | @Client 11 | @AutoHandler(DoneLaunchEvent.class) 12 | public interface DoneLaunchEventHandler extends EventHandler { 13 | 14 | } 15 | 16 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/chat/session/in/ChatInSessionEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.chat.session.in; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.chat.session.in.ChatInSessionEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.chat.session.in.ChatInSessionPacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Client; 9 | 10 | @Auto 11 | @Client 12 | @AutoHandler(ChatInSessionEvent.class) 13 | public interface ChatInSessionEventHandler extends NetworkEventHandler { 14 | 15 | } 16 | 17 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/chat/session/in/SessionListenersUpdateEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.chat.session.in; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.chat.session.in.SessionListenersUpdateEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.chat.session.listeners.SessionListenersUpdatePacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Client; 9 | 10 | @Auto 11 | @Client 12 | @AutoHandler(SessionListenersUpdateEvent.class) 13 | public interface SessionListenersUpdateEventHandler extends NetworkEventHandler { 14 | 15 | } 16 | 17 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/chat/session/request/RequestDuetSessionEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.chat.session.request; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.chat.session.request.RequestDuetSessionEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.chat.session.request.RequestDuetSessionPacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Server; 9 | 10 | @Auto 11 | @Server 12 | @AutoHandler(RequestDuetSessionEvent.class) 13 | public interface RequestDuetSessionEventHandler extends NetworkEventHandler { 14 | 15 | } 16 | 17 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/chat/session/request/RequestGroupSessionEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.chat.session.request; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.chat.session.request.RequestGroupSessionEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.chat.session.request.RequestGroupSessionPacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Server; 9 | 10 | @Auto 11 | @Server 12 | @AutoHandler(RequestGroupSessionEvent.class) 13 | public interface RequestGroupSessionEventHandler extends NetworkEventHandler { 14 | 15 | } 16 | 17 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/disconnect/TryDisconnectEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.disconnect; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.disconnect.TryDisconnectEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.disconnet.TryDisconnectPacket; 8 | 9 | @Auto 10 | @AutoHandler(TryDisconnectEvent.class) 11 | public interface TryDisconnectEventHandler extends NetworkEventHandler { 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/handshake/crypto/aes/HandshakeAesCipherEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.handshake.crypto.aes; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.handshake.crypto.aes.HandshakeAesCipherEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.handshake.crypto.aes.HandshakeAesCipherPacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Server; 9 | 10 | @Auto 11 | @Server 12 | @AutoHandler(HandshakeAesCipherEvent.class) 13 | public interface HandshakeAesCipherEventHandler extends NetworkEventHandler { 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/handshake/crypto/ec/pubkey/HandshakePreSharedEcEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.handshake.crypto.ec.pubkey; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.handshake.crypto.ec.pubkey.HandshakePreSharedEcEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.handshake.crypto.ec.pubkey.HandshakePreSharedEcPacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Client; 9 | 10 | @Auto 11 | @Client 12 | @AutoHandler(HandshakePreSharedEcEvent.class) 13 | public interface HandshakePreSharedEcEventHandler extends NetworkEventHandler { 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/handshake/hello/client/ClientHelloEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.handshake.hello.client; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.handshake.hello.client.ClientHelloEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.handshake.hello.client.ClientHelloPacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Server; 9 | 10 | @Auto 11 | @Server 12 | @AutoHandler(ClientHelloEvent.class) 13 | public interface ClientHelloEventHandler extends NetworkEventHandler { 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/handshake/hello/server/ServerHelloEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.handshake.hello.server; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.handshake.hello.server.ServerHelloEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.handshake.hello.server.ServerHelloPacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Client; 9 | 10 | @Auto 11 | @Client 12 | @AutoHandler(ServerHelloEvent.class) 13 | public interface ServerHelloEventHandler extends NetworkEventHandler { 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/invalid/operation/OperationInvalidEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.invalid.operation; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.invalid.operation.OperationInvalidEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.invalid.operation.OperationInvalidPacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Client; 9 | 10 | @Auto 11 | @Client 12 | @AutoHandler(OperationInvalidEvent.class) 13 | public interface OperationInvalidEventHandler extends NetworkEventHandler { 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/key/select/SelectKeyStoreEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.key.select; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.key.select.SelectKeyStoreEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.key.select.SelectKeyStorePacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Server; 9 | 10 | @Auto 11 | @Server 12 | @AutoHandler(SelectKeyStoreEvent.class) 13 | public interface SelectKeyStoreEventHandler extends NetworkEventHandler { 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/key/select/SelectedKeyStoreEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.key.select; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.key.select.SelectedKeyStoreEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.key.select.SelectedKeyStorePacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Client; 9 | 10 | @Auto 11 | @Client 12 | @AutoHandler(SelectedKeyStoreEvent.class) 13 | public interface SelectedKeyStoreEventHandler extends NetworkEventHandler { 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/login/feedback/LoginFailureEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.login.feedback; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.login.feedback.LoginFailureEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.login.feedback.LoginFailurePacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Client; 9 | 10 | @Auto 11 | @Client 12 | @AutoHandler(LoginFailureEvent.class) 13 | public interface LoginFailureEventHandler extends NetworkEventHandler { 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/login/feedback/LoginSuccessEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.login.feedback; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.login.feedback.LoginSuccessEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.login.feedback.LoginSuccessPacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Client; 9 | 10 | @Auto 11 | @Client 12 | @AutoHandler(LoginSuccessEvent.class) 13 | public interface LoginSuccessEventHandler extends NetworkEventHandler { 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/login/password/LoginWithPasswordEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.login.password; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.login.LoginEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.login.password.LoginWithPasswordEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.login.password.LoginWithPasswordPacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Server; 9 | 10 | @Auto 11 | @Server 12 | @AutoHandler(LoginWithPasswordEvent.class) 13 | public interface LoginWithPasswordEventHandler extends LoginEventHandler { 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/login/sign/LoginWithSignEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.login.sign; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.login.LoginEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.login.sign.LoginWithSignEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.login.sign.LoginWithSignPacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Server; 9 | 10 | @Auto 11 | @Server 12 | @AutoHandler(LoginWithSignEvent.class) 13 | public interface LoginWithSignEventHandler extends LoginEventHandler { 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/login/token/LoginWithTokenEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.login.token; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.login.LoginEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.login.token.LoginWithTokenEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.login.token.LoginWithTokenPacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Server; 9 | 10 | @Auto 11 | @Server 12 | @AutoHandler(LoginWithTokenEvent.class) 13 | public interface LoginWithTokenEventHandler extends LoginEventHandler { 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/message/delete/DeleteMessageEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.message.delete; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.message.delete.DeleteMessageEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.message.delete.DeleteMessagePacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Server; 9 | 10 | @Auto 11 | @Server 12 | @AutoHandler(DeleteMessageEvent.class) 13 | public interface DeleteMessageEventHandler extends NetworkEventHandler { 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/message/delete/DeletedMessageEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.message.delete; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.message.delete.DeletedMessageEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.message.delete.DeletedMessagePacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Client; 9 | 10 | @Auto 11 | @Client 12 | @AutoHandler(DeletedMessageEvent.class) 13 | public interface DeletedMessageEventHandler extends NetworkEventHandler { 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/message/notice/NewMessageNoticeEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.message.notice; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.message.notice.NewMessageNoticeEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.message.notice.NewMessageNoticePacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Client; 9 | 10 | @Auto 11 | @Client 12 | @AutoHandler(NewMessageNoticeEvent.class) 13 | public interface NewMessageNoticeEventHandler extends NetworkEventHandler { 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/message/select/FetchMessageEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.message.select; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.message.select.FetchMessageEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.message.select.FetchMessagePacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Server; 9 | 10 | @Auto 11 | @Server 12 | @AutoHandler(FetchMessageEvent.class) 13 | public interface FetchMessageEventHandler extends NetworkEventHandler { 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/message/select/FetchedMessageEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.message.select; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.message.select.FetchedMessageEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.message.select.FetchedMessagePacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Client; 9 | 10 | @Auto 11 | @Client 12 | @AutoHandler(FetchedMessageEvent.class) 13 | public interface FetchedMessageEventHandler extends NetworkEventHandler { 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/message/select/SelectMessageEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.message.select; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.message.select.SelectMessageEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.message.select.SelectMessagePacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Server; 9 | 10 | @Auto 11 | @Server 12 | @AutoHandler(SelectMessageEvent.class) 13 | public interface SelectMessageEventHandler extends NetworkEventHandler { 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/message/select/SelectedMessageEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.message.select; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.message.select.SelectedMessageEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.message.select.SelectedMessagePacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Client; 9 | 10 | @Auto 11 | @Client 12 | @AutoHandler(SelectedMessageEvent.class) 13 | public interface SelectedMessageEventHandler extends NetworkEventHandler { 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/message/send/SendMessageEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.message.send; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.message.send.SendMessageEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.message.send.SendMessagePacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Server; 9 | 10 | @Auto 11 | @Server 12 | @AutoHandler(SendMessageEvent.class) 13 | public interface SendMessageEventHandler extends NetworkEventHandler { 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/message/send/SendMessageRefusedEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.message.send; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.message.send.SendMessageRefusedEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.message.send.SendMessageRefusedPacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Client; 9 | 10 | @Auto 11 | @Client 12 | @AutoHandler(SendMessageRefusedEvent.class) 13 | public interface SendMessageRefusedEventHandler extends NetworkEventHandler { 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/message/send/SentMessageEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.message.send; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.message.send.SentMessageEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.message.send.SentMessagePacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Client; 9 | 10 | @Auto 11 | @Client 12 | @AutoHandler(SentMessageEvent.class) 13 | public interface SentMessageEventHandler extends NetworkEventHandler { 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/ping/TryPingEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.ping; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.ping.TryPingEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.ping.TryPingPacket; 8 | 9 | @Auto 10 | @AutoHandler(TryPingEvent.class) 11 | public interface TryPingEventHandler extends NetworkEventHandler { 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/ping/TryPingResponseEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.ping; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.ping.TryPingResponseEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.ping.TryPingResponsePacket; 8 | 9 | @Auto 10 | @AutoHandler(TryPingResponseEvent.class) 11 | public interface TryPingResponseEventHandler extends NetworkEventHandler { 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/resource/write/WriteResourceEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.resource.write; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.resource.write.WriteResourceEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.resource.write.WriteResourcePacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Client; 9 | 10 | @Auto 11 | @Client 12 | @AutoHandler(WriteResourceEvent.class) 13 | public interface WriteResourceEventHandler extends NetworkEventHandler { 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/resource/write/WriteResourceNextStepEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.resource.write; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.resource.write.WriteResourceNextStepEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.resource.write.WriteResourceNextStepPacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Client; 9 | 10 | @Auto 11 | @Client 12 | @AutoHandler(WriteResourceNextStepEvent.class) 13 | public interface WriteResourceNextStepEventHandler extends NetworkEventHandler { 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/handler/network/inbound/test/RequestTestEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.test; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.NetworkEventHandler; 6 | import com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.test.RequestTestEvent; 7 | import com.github.cao.awa.kalmia.network.packet.inbound.test.RequestTestPacket; 8 | import com.github.cao.awa.modmdo.annotation.platform.Client; 9 | 10 | @Auto 11 | @Client 12 | @AutoHandler(RequestTestEvent.class) 13 | public interface RequestTestEventHandler extends NetworkEventHandler { 14 | 15 | } 16 | 17 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/launch/done/DoneLaunchEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.launch.done; 2 | 3 | import com.github.cao.awa.kalmia.event.Event; 4 | 5 | public class DoneLaunchEvent extends Event { 6 | 7 | } 8 | 9 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/NetworkEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network; 2 | 3 | import com.github.cao.awa.kalmia.event.Event; 4 | import com.github.cao.awa.kalmia.network.packet.Packet; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public abstract class NetworkEvent> extends Event { 8 | private final RequestRouter router; 9 | private final T packet; 10 | 11 | public NetworkEvent(RequestRouter router, T packet) { 12 | this.router = router; 13 | this.packet = packet; 14 | } 15 | 16 | public RequestRouter router() { 17 | return this.router; 18 | } 19 | 20 | public T packet() { 21 | return this.packet; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/chat/session/in/ChatInSessionEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.chat.session.in; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.chat.session.in.ChatInSessionPacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class ChatInSessionEvent extends NetworkEvent { 8 | public ChatInSessionEvent(RequestRouter router, ChatInSessionPacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/chat/session/in/SessionListenersUpdateEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.chat.session.in; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.chat.session.listeners.SessionListenersUpdatePacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class SessionListenersUpdateEvent extends NetworkEvent { 8 | public SessionListenersUpdateEvent(RequestRouter router, SessionListenersUpdatePacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/chat/session/request/RequestDuetSessionEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.chat.session.request; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.chat.session.request.RequestDuetSessionPacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class RequestDuetSessionEvent extends NetworkEvent { 8 | public RequestDuetSessionEvent(RequestRouter router, RequestDuetSessionPacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/chat/session/request/RequestGroupSessionEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.chat.session.request; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.chat.session.request.RequestGroupSessionPacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class RequestGroupSessionEvent extends NetworkEvent { 8 | public RequestGroupSessionEvent(RequestRouter router, RequestGroupSessionPacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/disconnect/TryDisconnectEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.disconnect; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.disconnet.TryDisconnectPacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class TryDisconnectEvent extends NetworkEvent { 8 | public TryDisconnectEvent(RequestRouter router, TryDisconnectPacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/handshake/crypto/aes/HandshakeAesCipherEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.handshake.crypto.aes; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.handshake.crypto.aes.HandshakeAesCipherPacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class HandshakeAesCipherEvent extends NetworkEvent { 8 | public HandshakeAesCipherEvent(RequestRouter router, HandshakeAesCipherPacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/handshake/crypto/ec/pubkey/HandshakePreSharedEcEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.handshake.crypto.ec.pubkey; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.handshake.crypto.ec.pubkey.HandshakePreSharedEcPacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class HandshakePreSharedEcEvent extends NetworkEvent { 8 | public HandshakePreSharedEcEvent(RequestRouter router, HandshakePreSharedEcPacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/handshake/hello/client/ClientHelloEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.handshake.hello.client; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.handshake.hello.client.ClientHelloPacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class ClientHelloEvent extends NetworkEvent { 8 | public ClientHelloEvent(RequestRouter router, ClientHelloPacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/handshake/hello/server/ServerHelloEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.handshake.hello.server; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.handshake.hello.server.ServerHelloPacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class ServerHelloEvent extends NetworkEvent { 8 | public ServerHelloEvent(RequestRouter router, ServerHelloPacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/invalid/operation/OperationInvalidEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.invalid.operation; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.invalid.operation.OperationInvalidPacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class OperationInvalidEvent extends NetworkEvent { 8 | public OperationInvalidEvent(RequestRouter router, OperationInvalidPacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/key/select/SelectKeyStoreEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.key.select; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.key.select.SelectKeyStorePacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class SelectKeyStoreEvent extends NetworkEvent { 8 | public SelectKeyStoreEvent(RequestRouter router, SelectKeyStorePacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/key/select/SelectedKeyStoreEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.key.select; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.key.select.SelectedKeyStorePacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class SelectedKeyStoreEvent extends NetworkEvent { 8 | public SelectedKeyStoreEvent(RequestRouter router, SelectedKeyStorePacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/login/feedback/LoginFailureEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.login.feedback; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.login.feedback.LoginFailurePacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class LoginFailureEvent extends NetworkEvent { 8 | public LoginFailureEvent(RequestRouter router, LoginFailurePacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | 15 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/login/feedback/LoginSuccessEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.login.feedback; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.login.feedback.LoginSuccessPacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class LoginSuccessEvent extends NetworkEvent { 8 | public LoginSuccessEvent(RequestRouter router, LoginSuccessPacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/login/password/LoginWithPasswordEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.login.password; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.login.password.LoginWithPasswordPacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class LoginWithPasswordEvent extends NetworkEvent { 8 | public LoginWithPasswordEvent(RequestRouter router, LoginWithPasswordPacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/login/sign/LoginWithSignEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.login.sign; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.login.sign.LoginWithSignPacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class LoginWithSignEvent extends NetworkEvent { 8 | public LoginWithSignEvent(RequestRouter router, LoginWithSignPacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/login/token/LoginWithTokenEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.login.token; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.login.token.LoginWithTokenPacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class LoginWithTokenEvent extends NetworkEvent { 8 | public LoginWithTokenEvent(RequestRouter router, LoginWithTokenPacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/message/delete/DeleteMessageEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.message.delete; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.message.delete.DeleteMessagePacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class DeleteMessageEvent extends NetworkEvent { 8 | public DeleteMessageEvent(RequestRouter router, DeleteMessagePacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/message/delete/DeletedMessageEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.message.delete; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.message.delete.DeletedMessagePacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class DeletedMessageEvent extends NetworkEvent { 8 | public DeletedMessageEvent(RequestRouter router, DeletedMessagePacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/message/notice/NewMessageNoticeEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.message.notice; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.message.notice.NewMessageNoticePacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class NewMessageNoticeEvent extends NetworkEvent { 8 | public NewMessageNoticeEvent(RequestRouter router, NewMessageNoticePacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/message/select/FetchMessageEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.message.select; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.message.select.FetchMessagePacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class FetchMessageEvent extends NetworkEvent { 8 | public FetchMessageEvent(RequestRouter router, FetchMessagePacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/message/select/FetchedMessageEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.message.select; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.message.select.FetchedMessagePacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class FetchedMessageEvent extends NetworkEvent { 8 | public FetchedMessageEvent(RequestRouter router, FetchedMessagePacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/message/select/SelectMessageEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.message.select; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.message.select.SelectMessagePacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class SelectMessageEvent extends NetworkEvent { 8 | public SelectMessageEvent(RequestRouter router, SelectMessagePacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/message/select/SelectedMessageEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.message.select; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.message.select.SelectedMessagePacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class SelectedMessageEvent extends NetworkEvent { 8 | public SelectedMessageEvent(RequestRouter router, SelectedMessagePacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/message/send/SendMessageEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.message.send; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.message.send.SendMessageEventHandler; 4 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 5 | import com.github.cao.awa.kalmia.network.packet.inbound.message.send.SendMessagePacket; 6 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 7 | 8 | /** 9 | * @see SendMessageEventHandler 10 | */ 11 | public class SendMessageEvent extends NetworkEvent { 12 | public SendMessageEvent(RequestRouter router, SendMessagePacket packet) { 13 | super(router, 14 | packet 15 | ); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/message/send/SendMessageRefusedEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.message.send; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.message.send.SendMessageRefusedPacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class SendMessageRefusedEvent extends NetworkEvent { 8 | public SendMessageRefusedEvent(RequestRouter router, SendMessageRefusedPacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/message/send/SentMessageEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.message.send; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.message.send.SentMessagePacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class SentMessageEvent extends NetworkEvent { 8 | public SentMessageEvent(RequestRouter router, SentMessagePacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/ping/TryPingEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.ping; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.ping.TryPingPacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class TryPingEvent extends NetworkEvent { 8 | public TryPingEvent(RequestRouter router, TryPingPacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/ping/TryPingResponseEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.ping; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.ping.TryPingResponsePacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class TryPingResponseEvent extends NetworkEvent { 8 | public TryPingResponseEvent(RequestRouter router, TryPingResponsePacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/resource/write/WriteResourceEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.resource.write; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.resource.write.WriteResourcePacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class WriteResourceEvent extends NetworkEvent { 8 | public WriteResourceEvent(RequestRouter router, WriteResourcePacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/resource/write/WriteResourceNextStepEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.resource.write; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.resource.write.WriteResourceNextStepPacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class WriteResourceNextStepEvent extends NetworkEvent { 8 | public WriteResourceNextStepEvent(RequestRouter router, WriteResourceNextStepPacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/event/kalmiagram/network/inbound/test/RequestTestEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.event.kalmiagram.network.inbound.test; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.network.NetworkEvent; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.test.RequestTestPacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class RequestTestEvent extends NetworkEvent { 8 | public RequestTestEvent(RequestRouter router, RequestTestPacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/exception/network/attck/ReplayAttackException.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.exception.network.attck; 2 | 3 | public class ReplayAttackException extends RuntimeException { 4 | public ReplayAttackException() { 5 | super(); 6 | } 7 | 8 | public ReplayAttackException(String message) { 9 | super(message); 10 | } 11 | 12 | public ReplayAttackException(String message, Throwable cause) { 13 | super(message, 14 | cause 15 | ); 16 | } 17 | 18 | public ReplayAttackException(Throwable cause) { 19 | super(cause); 20 | } 21 | 22 | protected ReplayAttackException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { 23 | super(message, 24 | cause, 25 | enableSuppression, 26 | writableStackTrace 27 | ); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/exception/network/invalid/InvalidPacketException.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.exception.network.invalid; 2 | 3 | public class InvalidPacketException extends RuntimeException { 4 | public InvalidPacketException() { 5 | super(); 6 | } 7 | 8 | public InvalidPacketException(String message) { 9 | super(message); 10 | } 11 | 12 | public InvalidPacketException(String message, Throwable cause) { 13 | super(message, 14 | cause 15 | ); 16 | } 17 | 18 | public InvalidPacketException(Throwable cause) { 19 | super(cause); 20 | } 21 | 22 | protected InvalidPacketException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { 23 | super(message, 24 | cause, 25 | enableSuppression, 26 | writableStackTrace 27 | ); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/exception/network/invalid/InvalidStatusException.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.exception.network.invalid; 2 | 3 | public class InvalidStatusException extends RuntimeException { 4 | public InvalidStatusException() { 5 | super(); 6 | } 7 | 8 | public InvalidStatusException(String message) { 9 | super(message); 10 | } 11 | 12 | public InvalidStatusException(String message, Throwable cause) { 13 | super(message, 14 | cause 15 | ); 16 | } 17 | 18 | public InvalidStatusException(Throwable cause) { 19 | super(cause); 20 | } 21 | 22 | protected InvalidStatusException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { 23 | super(message, 24 | cause, 25 | enableSuppression, 26 | writableStackTrace 27 | ); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/framework/serialize/bytes/BytesSerializable.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.framework.serialize.bytes; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.apricot.io.bytes.reader.BytesReader; 5 | 6 | public interface BytesSerializable { 7 | @Auto 8 | byte[] serialize(); 9 | 10 | @Auto 11 | T deserialize(BytesReader reader); 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/framework/serialize/bytes/BytesSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.framework.serialize.bytes; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.apricot.io.bytes.reader.BytesReader; 5 | import com.github.cao.awa.kalmia.env.KalmiaEnv; 6 | import com.github.cao.awa.sinuatum.manipulate.Manipulate; 7 | 8 | @Auto 9 | public interface BytesSerializer { 10 | @Auto 11 | byte[] serialize(T target); 12 | 13 | @Auto 14 | T deserialize(BytesReader reader); 15 | 16 | default Class[] target() { 17 | return Manipulate.cast(KalmiaEnv.BYTES_SERIALIZE_FRAMEWORK.target(this)); 18 | } 19 | 20 | default long id() { 21 | return KalmiaEnv.BYTES_SERIALIZE_FRAMEWORK.id(this); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/framework/serialize/bytes/type/primitive/BytesBooleanSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.framework.serialize.bytes.type.primitive; 2 | 3 | import com.github.cao.awa.apricot.io.bytes.reader.BytesReader; 4 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoBytesSerializer; 5 | import com.github.cao.awa.kalmia.framework.serialize.bytes.BytesSerializer; 6 | 7 | @AutoBytesSerializer(value = 0, target = {Boolean.class, boolean.class}) 8 | public class BytesBooleanSerializer implements BytesSerializer { 9 | @Override 10 | public byte[] serialize(Boolean b) { 11 | return new byte[]{(byte) (b ? 1 : 0)}; 12 | } 13 | 14 | @Override 15 | public Boolean deserialize(BytesReader reader) { 16 | return reader.read() == 1; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/framework/serialize/bytes/type/primitive/BytesByteSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.framework.serialize.bytes.type.primitive; 2 | 3 | import com.github.cao.awa.apricot.io.bytes.reader.BytesReader; 4 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoBytesSerializer; 5 | import com.github.cao.awa.kalmia.framework.serialize.bytes.BytesSerializer; 6 | 7 | @AutoBytesSerializer(value = 1, target = {Byte.class, byte.class}) 8 | public class BytesByteSerializer implements BytesSerializer { 9 | @Override 10 | public byte[] serialize(Byte b) { 11 | return new byte[]{b}; 12 | } 13 | 14 | @Override 15 | public Byte deserialize(BytesReader reader) { 16 | return reader.read(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/framework/serialize/bytes/type/primitive/BytesCharSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.framework.serialize.bytes.type.primitive; 2 | 3 | import com.github.cao.awa.apricot.io.bytes.reader.BytesReader; 4 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoBytesSerializer; 5 | import com.github.cao.awa.kalmia.framework.serialize.bytes.BytesSerializer; 6 | import com.github.cao.awa.kalmia.mathematic.base.Base256; 7 | 8 | @AutoBytesSerializer(value = 2, target = {Character.class, char.class}) 9 | public class BytesCharSerializer implements BytesSerializer { 10 | @Override 11 | public byte[] serialize(Character c) { 12 | return Base256.tagToBuf(c); 13 | } 14 | 15 | @Override 16 | public Character deserialize(BytesReader reader) { 17 | return (char) Base256.tagFromBuf(reader.read(2)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/framework/serialize/bytes/type/primitive/BytesDoubleSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.framework.serialize.bytes.type.primitive; 2 | 3 | import com.github.cao.awa.apricot.io.bytes.reader.BytesReader; 4 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoBytesSerializer; 5 | import com.github.cao.awa.kalmia.framework.serialize.bytes.BytesSerializer; 6 | 7 | import java.nio.ByteBuffer; 8 | 9 | @AutoBytesSerializer(value = 7, target = {Double.class, double.class}) 10 | public class BytesDoubleSerializer implements BytesSerializer { 11 | @Override 12 | public byte[] serialize(Double d) { 13 | return ByteBuffer.allocate(8) 14 | .putDouble(d) 15 | .array(); 16 | } 17 | 18 | @Override 19 | public Double deserialize(BytesReader reader) { 20 | return ByteBuffer.wrap(reader.read(8)) 21 | .getDouble(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/framework/serialize/bytes/type/primitive/BytesFloatSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.framework.serialize.bytes.type.primitive; 2 | 3 | import com.github.cao.awa.apricot.io.bytes.reader.BytesReader; 4 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoBytesSerializer; 5 | import com.github.cao.awa.kalmia.framework.serialize.bytes.BytesSerializer; 6 | 7 | import java.nio.ByteBuffer; 8 | 9 | @AutoBytesSerializer(value = 6, target = {Float.class, float.class}) 10 | public class BytesFloatSerializer implements BytesSerializer { 11 | @Override 12 | public byte[] serialize(Float f) { 13 | return ByteBuffer.allocate(4) 14 | .putFloat(f) 15 | .array(); 16 | } 17 | 18 | @Override 19 | public Float deserialize(BytesReader reader) { 20 | return ByteBuffer.wrap(reader.read(4)) 21 | .getFloat(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/framework/serialize/bytes/type/primitive/BytesIntSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.framework.serialize.bytes.type.primitive; 2 | 3 | import com.github.cao.awa.apricot.io.bytes.reader.BytesReader; 4 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoBytesSerializer; 5 | import com.github.cao.awa.kalmia.framework.serialize.bytes.BytesSerializer; 6 | import com.github.cao.awa.kalmia.mathematic.base.SkippedBase256; 7 | 8 | @AutoBytesSerializer(value = 4, target = {Integer.class, int.class}) 9 | public class BytesIntSerializer implements BytesSerializer { 10 | @Override 11 | public byte[] serialize(Integer i) { 12 | return SkippedBase256.intToBuf(i); 13 | } 14 | 15 | @Override 16 | public Integer deserialize(BytesReader reader) { 17 | return SkippedBase256.readInt(reader); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/framework/serialize/bytes/type/primitive/BytesLongSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.framework.serialize.bytes.type.primitive; 2 | 3 | import com.github.cao.awa.apricot.io.bytes.reader.BytesReader; 4 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoBytesSerializer; 5 | import com.github.cao.awa.kalmia.framework.serialize.bytes.BytesSerializer; 6 | import com.github.cao.awa.kalmia.mathematic.base.SkippedBase256; 7 | 8 | @AutoBytesSerializer(value = 5, target = {Long.class, long.class}) 9 | public class BytesLongSerializer implements BytesSerializer { 10 | @Override 11 | public byte[] serialize(Long l) { 12 | return SkippedBase256.longToBuf(l); 13 | } 14 | 15 | @Override 16 | public Long deserialize(BytesReader reader) { 17 | return SkippedBase256.readLong(reader); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/framework/serialize/bytes/type/primitive/BytesShortSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.framework.serialize.bytes.type.primitive; 2 | 3 | import com.github.cao.awa.apricot.io.bytes.reader.BytesReader; 4 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoBytesSerializer; 5 | import com.github.cao.awa.kalmia.framework.serialize.bytes.BytesSerializer; 6 | import com.github.cao.awa.kalmia.mathematic.base.Base256; 7 | 8 | @AutoBytesSerializer(value = 3, target = {Short.class, short.class}) 9 | public class BytesShortSerializer implements BytesSerializer { 10 | @Override 11 | public byte[] serialize(Short s) { 12 | return Base256.tagToBuf(s); 13 | } 14 | 15 | @Override 16 | public Short deserialize(BytesReader reader) { 17 | return (short) Base256.tagFromBuf(reader.read(2)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/framework/serialize/json/JsonSerializable.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.framework.serialize.json; 2 | 3 | import com.alibaba.fastjson2.JSONObject; 4 | import com.github.cao.awa.apricot.annotations.auto.Auto; 5 | 6 | public interface JsonSerializable { 7 | @Auto 8 | JSONObject serialize(); 9 | 10 | @Auto 11 | T deserialize(JSONObject json); 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/framework/serialize/json/test/TestSerializable.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.framework.serialize.json.test; 2 | 3 | import com.alibaba.fastjson2.JSONObject; 4 | import com.github.cao.awa.apricot.annotations.auto.Auto; 5 | import com.github.cao.awa.kalmia.framework.serialize.json.JsonSerializable; 6 | 7 | public class TestSerializable implements JsonSerializable { 8 | private String testAwa; 9 | 10 | public TestSerializable(String testAwa) { 11 | this.testAwa = testAwa; 12 | } 13 | 14 | @Auto 15 | public TestSerializable() { 16 | 17 | } 18 | 19 | @Override 20 | public JSONObject serialize() { 21 | JSONObject json = new JSONObject(); 22 | json.put("test", 23 | this.testAwa 24 | ); 25 | return json; 26 | } 27 | 28 | @Override 29 | public TestSerializable deserialize(JSONObject json) { 30 | this.testAwa = json.getString("test"); 31 | return this; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/framework/serialize/json/type/math/JsonBigDecimalSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.framework.serialize.json.type.math; 2 | 3 | import com.alibaba.fastjson2.JSONObject; 4 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoJsonSerializer; 5 | import com.github.cao.awa.kalmia.framework.serialize.json.JsonSerializer; 6 | 7 | import java.math.BigDecimal; 8 | 9 | @AutoJsonSerializer(target = BigDecimal.class) 10 | public class JsonBigDecimalSerializer implements JsonSerializer { 11 | @Override 12 | public void serialize(JSONObject json, String key, BigDecimal target) { 13 | json.put(key, 14 | target 15 | ); 16 | } 17 | 18 | @Override 19 | public BigDecimal deserialize(JSONObject json, String key) { 20 | return json.getBigDecimal(key); 21 | } 22 | } -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/framework/serialize/json/type/math/JsonBigIntegerSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.framework.serialize.json.type.math; 2 | 3 | import com.alibaba.fastjson2.JSONObject; 4 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoJsonSerializer; 5 | import com.github.cao.awa.kalmia.framework.serialize.json.JsonSerializer; 6 | 7 | import java.math.BigInteger; 8 | 9 | @AutoJsonSerializer(target = BigInteger.class) 10 | public class JsonBigIntegerSerializer implements JsonSerializer { 11 | @Override 12 | public void serialize(JSONObject json, String key, BigInteger target) { 13 | json.put(key, 14 | target 15 | ); 16 | } 17 | 18 | @Override 19 | public BigInteger deserialize(JSONObject json, String key) { 20 | return json.getBigInteger(key); 21 | } 22 | } -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/framework/serialize/json/type/primitive/JsonBooleanSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.framework.serialize.json.type.primitive; 2 | 3 | import com.alibaba.fastjson2.JSONObject; 4 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoJsonSerializer; 5 | import com.github.cao.awa.kalmia.framework.serialize.json.JsonSerializer; 6 | 7 | @AutoJsonSerializer(target = {Boolean.class, boolean.class}) 8 | public class JsonBooleanSerializer implements JsonSerializer { 9 | @Override 10 | public void serialize(JSONObject json, String key, Boolean target) { 11 | json.put(key, 12 | target 13 | ); 14 | } 15 | 16 | @Override 17 | public Boolean deserialize(JSONObject json, String key) { 18 | return json.getBoolean(key); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/framework/serialize/json/type/primitive/JsonByteSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.framework.serialize.json.type.primitive; 2 | 3 | import com.alibaba.fastjson2.JSONObject; 4 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoJsonSerializer; 5 | import com.github.cao.awa.kalmia.framework.serialize.json.JsonSerializer; 6 | 7 | @AutoJsonSerializer(target = {Byte.class, byte.class}) 8 | public class JsonByteSerializer implements JsonSerializer { 9 | @Override 10 | public void serialize(JSONObject json, String key, Byte target) { 11 | json.put(key, 12 | target 13 | ); 14 | } 15 | 16 | @Override 17 | public Byte deserialize(JSONObject json, String key) { 18 | return json.getByte(key); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/framework/serialize/json/type/primitive/JsonCharSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.framework.serialize.json.type.primitive; 2 | 3 | import com.alibaba.fastjson2.JSONObject; 4 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoJsonSerializer; 5 | import com.github.cao.awa.kalmia.framework.serialize.json.JsonSerializer; 6 | 7 | @AutoJsonSerializer(target = {Character.class, char.class}) 8 | public class JsonCharSerializer implements JsonSerializer { 9 | @Override 10 | public void serialize(JSONObject json, String key, Character target) { 11 | json.put(key, 12 | target 13 | ); 14 | } 15 | 16 | @Override 17 | public Character deserialize(JSONObject json, String key) { 18 | return json.getString(key) 19 | .charAt(0); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/framework/serialize/json/type/primitive/JsonDoubleSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.framework.serialize.json.type.primitive; 2 | 3 | import com.alibaba.fastjson2.JSONObject; 4 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoJsonSerializer; 5 | import com.github.cao.awa.kalmia.framework.serialize.json.JsonSerializer; 6 | 7 | @AutoJsonSerializer(target = {Double.class, double.class}) 8 | public class JsonDoubleSerializer implements JsonSerializer { 9 | @Override 10 | public void serialize(JSONObject json, String key, Double target) { 11 | json.put(key, 12 | target 13 | ); 14 | } 15 | 16 | @Override 17 | public Double deserialize(JSONObject json, String key) { 18 | return json.getDouble(key); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/framework/serialize/json/type/primitive/JsonFloatSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.framework.serialize.json.type.primitive; 2 | 3 | import com.alibaba.fastjson2.JSONObject; 4 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoJsonSerializer; 5 | import com.github.cao.awa.kalmia.framework.serialize.json.JsonSerializer; 6 | 7 | @AutoJsonSerializer(target = {Float.class, float.class}) 8 | public class JsonFloatSerializer implements JsonSerializer { 9 | @Override 10 | public void serialize(JSONObject json, String key, Float target) { 11 | json.put(key, 12 | target 13 | ); 14 | } 15 | 16 | @Override 17 | public Float deserialize(JSONObject json, String key) { 18 | return json.getFloat(key); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/framework/serialize/json/type/primitive/JsonIntSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.framework.serialize.json.type.primitive; 2 | 3 | import com.alibaba.fastjson2.JSONObject; 4 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoJsonSerializer; 5 | import com.github.cao.awa.kalmia.framework.serialize.json.JsonSerializer; 6 | 7 | @AutoJsonSerializer(target = {Integer.class, int.class}) 8 | public class JsonIntSerializer implements JsonSerializer { 9 | @Override 10 | public void serialize(JSONObject json, String key, Integer target) { 11 | json.put(key, 12 | target 13 | ); 14 | } 15 | 16 | @Override 17 | public Integer deserialize(JSONObject json, String key) { 18 | return json.getInteger(key); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/framework/serialize/json/type/primitive/JsonLongSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.framework.serialize.json.type.primitive; 2 | 3 | import com.alibaba.fastjson2.JSONObject; 4 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoJsonSerializer; 5 | import com.github.cao.awa.kalmia.framework.serialize.json.JsonSerializer; 6 | 7 | @AutoJsonSerializer(target = {Long.class, long.class}) 8 | public class JsonLongSerializer implements JsonSerializer { 9 | @Override 10 | public void serialize(JSONObject json, String key, Long target) { 11 | json.put(key, 12 | target 13 | ); 14 | } 15 | 16 | @Override 17 | public Long deserialize(JSONObject json, String key) { 18 | return json.getLong(key); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/framework/serialize/json/type/primitive/JsonShortSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.framework.serialize.json.type.primitive; 2 | 3 | import com.alibaba.fastjson2.JSONObject; 4 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoJsonSerializer; 5 | import com.github.cao.awa.kalmia.framework.serialize.json.JsonSerializer; 6 | 7 | @AutoJsonSerializer(target = {Short.class, short.class}) 8 | public class JsonShortSerializer implements JsonSerializer { 9 | @Override 10 | public void serialize(JSONObject json, String key, Short target) { 11 | json.put(key, 12 | target 13 | ); 14 | } 15 | 16 | @Override 17 | public Short deserialize(JSONObject json, String key) { 18 | return json.getShort(key); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/framework/serialize/json/type/string/JsonStringSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.framework.serialize.json.type.string; 2 | 3 | import com.alibaba.fastjson2.JSONObject; 4 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoJsonSerializer; 5 | import com.github.cao.awa.kalmia.framework.serialize.json.JsonSerializer; 6 | 7 | @AutoJsonSerializer(target = String.class) 8 | public class JsonStringSerializer implements JsonSerializer { 9 | @Override 10 | public void serialize(JSONObject json, String key, String target) { 11 | json.put(key, 12 | target 13 | ); 14 | } 15 | 16 | @Override 17 | public String deserialize(JSONObject json, String key) { 18 | return json.getString(key); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/function/provider/Consumers.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.function.provider; 2 | 3 | import java.util.function.Consumer; 4 | 5 | public class Consumers { 6 | public static final Consumer DO_NOTHING = e -> { 7 | }; 8 | public static final Consumer DO_PRINT = System.out :: println; 9 | 10 | @SuppressWarnings("unchecked") 11 | public static Consumer doNothing() { 12 | return (Consumer) DO_NOTHING; 13 | } 14 | 15 | @SuppressWarnings("unchecked") 16 | public static Consumer doPrint() { 17 | return (Consumer) DO_PRINT; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/identity/serializer/LongAndExtraIdentityExternalSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.identity.serializer; 2 | 3 | 4 | import com.alibaba.fastjson2.JSONObject; 5 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoJsonSerializer; 6 | import com.github.cao.awa.kalmia.framework.serialize.json.JsonSerializer; 7 | import com.github.cao.awa.kalmia.identity.LongAndExtraIdentity; 8 | 9 | @AutoJsonSerializer(target = {LongAndExtraIdentity.class}) 10 | public class LongAndExtraIdentityExternalSerializer implements JsonSerializer { 11 | @Override 12 | public void serialize(JSONObject json, String key, LongAndExtraIdentity target) { 13 | json.put(key, 14 | target.toJSON() 15 | ); 16 | } 17 | 18 | @Override 19 | public LongAndExtraIdentity deserialize(JSONObject json, String key) { 20 | return LongAndExtraIdentity.create(json.getJSONObject(key)); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/identity/serializer/LongAndExtraIdentitySerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.identity.serializer; 2 | 3 | import com.github.cao.awa.apricot.io.bytes.reader.BytesReader; 4 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoBytesSerializer; 5 | import com.github.cao.awa.kalmia.framework.serialize.bytes.BytesSerializer; 6 | import com.github.cao.awa.kalmia.identity.LongAndExtraIdentity; 7 | 8 | @AutoBytesSerializer(value = 4001, target = LongAndExtraIdentity.class) 9 | public class LongAndExtraIdentitySerializer implements BytesSerializer { 10 | @Override 11 | public byte[] serialize(LongAndExtraIdentity target) { 12 | return target.toBytes(); 13 | } 14 | 15 | @Override 16 | public LongAndExtraIdentity deserialize(BytesReader reader) { 17 | return LongAndExtraIdentity.read(reader); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/identity/serializer/PureExtraIdentitySerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.identity.serializer; 2 | 3 | import com.github.cao.awa.apricot.io.bytes.reader.BytesReader; 4 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoBytesSerializer; 5 | import com.github.cao.awa.kalmia.framework.serialize.bytes.BytesSerializer; 6 | import com.github.cao.awa.kalmia.identity.PureExtraIdentity; 7 | 8 | @AutoBytesSerializer(value = 4000, target = PureExtraIdentity.class) 9 | public class PureExtraIdentitySerializer implements BytesSerializer { 10 | @Override 11 | public byte[] serialize(PureExtraIdentity target) { 12 | return target.toBytes(); 13 | } 14 | 15 | @Override 16 | public PureExtraIdentity deserialize(BytesReader reader) { 17 | return PureExtraIdentity.read(reader); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/information/compressor/InformationCompressor.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.information.compressor; 2 | 3 | import com.github.cao.awa.apricot.annotations.Stable; 4 | 5 | /** 6 | * Information compress. 7 | * 8 | * @author cao_awa 9 | * @since 1.0.0 10 | */ 11 | @Stable 12 | public interface InformationCompressor { 13 | byte[] EMPTY_BYTES = new byte[0]; 14 | 15 | /** 16 | * Compress for a data 17 | * 18 | * @param bytes Data source 19 | * @return Compress result 20 | */ 21 | byte[] compress(byte[] bytes); 22 | 23 | /** 24 | * Decompress for a data 25 | * 26 | * @param bytes Data source 27 | * @return Decompress result 28 | */ 29 | byte[] decompress(byte[] bytes); 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/information/compressor/inaction/InactionCompressor.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.information.compressor.inaction; 2 | 3 | import com.github.cao.awa.kalmia.information.compressor.InformationCompressor; 4 | 5 | public class InactionCompressor implements InformationCompressor { 6 | public static final InactionCompressor INSTANCE = new InactionCompressor(); 7 | 8 | /** 9 | * Return the source back, because inaction compressor will not compress the data. 10 | * 11 | * @param bytes Data source 12 | * @return Decompress result 13 | */ 14 | @Override 15 | public byte[] compress(byte[] bytes) { 16 | return bytes; 17 | } 18 | 19 | /** 20 | * Return the source back, because inaction compressor will not compress the data. 21 | * 22 | * @param bytes Data source 23 | * @return Decompress result 24 | */ 25 | @Override 26 | public byte[] decompress(byte[] bytes) { 27 | return bytes; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/keypair/exception/NotEncryptedException.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.keypair.exception; 2 | 3 | public class NotEncryptedException extends RuntimeException { 4 | public NotEncryptedException() { 5 | super(); 6 | } 7 | 8 | public NotEncryptedException(String message) { 9 | super(message); 10 | } 11 | 12 | public NotEncryptedException(String message, Throwable cause) { 13 | super(message, 14 | cause 15 | ); 16 | } 17 | 18 | public NotEncryptedException(Throwable cause) { 19 | super(cause); 20 | } 21 | 22 | protected NotEncryptedException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { 23 | super(message, 24 | cause, 25 | enableSuppression, 26 | writableStackTrace 27 | ); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/keypair/exception/UnableToDecodeException.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.keypair.exception; 2 | 3 | public class UnableToDecodeException extends RuntimeException { 4 | public UnableToDecodeException() { 5 | super(); 6 | } 7 | 8 | public UnableToDecodeException(String message) { 9 | super(message); 10 | } 11 | 12 | public UnableToDecodeException(String message, Throwable cause) { 13 | super(message, 14 | cause 15 | ); 16 | } 17 | 18 | public UnableToDecodeException(Throwable cause) { 19 | super(cause); 20 | } 21 | 22 | protected UnableToDecodeException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { 23 | super(message, 24 | cause, 25 | enableSuppression, 26 | writableStackTrace 27 | ); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/keypair/store/key/KeyStore.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.keypair.store.key; 2 | 3 | import com.github.cao.awa.kalmia.keypair.store.KeyPairStore; 4 | 5 | import java.security.Key; 6 | 7 | public abstract class KeyStore { 8 | public T decode() { 9 | return decode(false); 10 | } 11 | 12 | public abstract T decode(boolean requireFailure); 13 | 14 | public abstract KeyPairStore keypairStore(); 15 | 16 | public abstract byte[] key(); 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/keypair/store/key/empty/EmptyPrivateKeyStore.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.keypair.store.key.empty; 2 | 3 | import com.github.cao.awa.kalmia.keypair.store.KeyPairStore; 4 | import com.github.cao.awa.kalmia.keypair.store.key.KeyStore; 5 | 6 | import java.security.interfaces.ECPrivateKey; 7 | 8 | public class EmptyPrivateKeyStore extends KeyStore { 9 | private final KeyPairStore store; 10 | private final byte[] prikey; 11 | 12 | public EmptyPrivateKeyStore(KeyPairStore store, byte[] prikey) { 13 | this.store = store; 14 | this.prikey = prikey; 15 | } 16 | 17 | @Override 18 | public ECPrivateKey decode(boolean requireFailure) { 19 | return null; 20 | } 21 | 22 | @Override 23 | public KeyPairStore keypairStore() { 24 | return this.store; 25 | } 26 | 27 | @Override 28 | public byte[] key() { 29 | return this.prikey; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/keypair/store/key/empty/EmptyPublicKeyStore.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.keypair.store.key.empty; 2 | 3 | import com.github.cao.awa.kalmia.keypair.store.KeyPairStore; 4 | import com.github.cao.awa.kalmia.keypair.store.key.KeyStore; 5 | 6 | import java.security.interfaces.ECPublicKey; 7 | 8 | public class EmptyPublicKeyStore extends KeyStore { 9 | private final KeyPairStore store; 10 | private final byte[] pubkey; 11 | 12 | public EmptyPublicKeyStore(KeyPairStore store, byte[] pubkey) { 13 | this.store = store; 14 | this.pubkey = pubkey; 15 | } 16 | 17 | @Override 18 | public ECPublicKey decode(boolean requireFailure) { 19 | return null; 20 | } 21 | 22 | @Override 23 | public KeyPairStore keypairStore() { 24 | return this.store; 25 | } 26 | 27 | @Override 28 | public byte[] key() { 29 | return this.pubkey; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/login/LoginCommon.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.login; 2 | 3 | import com.github.cao.awa.kalmia.bootstrap.Kalmia; 4 | import com.github.cao.awa.kalmia.identity.LongAndExtraIdentity; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class LoginCommon { 8 | public static void login(LongAndExtraIdentity accessIdentity, RequestRouter router) { 9 | Kalmia.SERVER.login(accessIdentity, 10 | router 11 | ); 12 | 13 | router.accessIdentity(accessIdentity); 14 | } 15 | 16 | public static void logout(LongAndExtraIdentity accessIdentity, RequestRouter router) { 17 | Kalmia.SERVER.logout(accessIdentity, 18 | router 19 | ); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/message/cover/processor/MessageProcessor.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.message.cover.processor; 2 | 3 | import com.github.cao.awa.kalmia.identity.LongAndExtraIdentity; 4 | 5 | import java.util.UUID; 6 | 7 | public abstract class MessageProcessor { 8 | public abstract byte[] process(byte[] bytes, LongAndExtraIdentity sender); 9 | 10 | public abstract UUID id(); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/message/display/serializer/ClientMessageExternalSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.message.display.serializer; 2 | 3 | 4 | import com.alibaba.fastjson2.JSONObject; 5 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoJsonSerializer; 6 | import com.github.cao.awa.kalmia.framework.serialize.json.JsonSerializer; 7 | import com.github.cao.awa.kalmia.message.display.ClientMessage; 8 | 9 | @AutoJsonSerializer(target = {ClientMessage.class}) 10 | public class ClientMessageExternalSerializer implements JsonSerializer { 11 | @Override 12 | public void serialize(JSONObject json, String key, ClientMessage target) { 13 | json.put(key, 14 | target.export() 15 | ); 16 | 17 | System.out.println(target.export()); 18 | } 19 | 20 | @Override 21 | public ClientMessage deserialize(JSONObject json, String key) { 22 | return ClientMessage.create(json.getJSONObject(key)); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/message/factor/MessageFactor.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.message.factor; 2 | 3 | import com.github.cao.awa.apricot.io.bytes.reader.BytesReader; 4 | import com.github.cao.awa.apricot.util.collection.ApricotCollectionFactor; 5 | import com.github.cao.awa.kalmia.message.Message; 6 | 7 | import java.util.Map; 8 | import java.util.function.Function; 9 | 10 | public class MessageFactor { 11 | private static final Map> factories = ApricotCollectionFactor.hashMap(); 12 | 13 | public static void register(int id, Function factor) { 14 | factories.put(id, 15 | factor 16 | ); 17 | } 18 | 19 | public static Message create(int id, BytesReader reader) { 20 | Function factor = factories.get(id); 21 | if (factor == null) { 22 | return null; 23 | } 24 | return factor.apply(reader); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/message/serializer/CoverMessageSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.message.serializer; 2 | 3 | import com.github.cao.awa.apricot.io.bytes.reader.BytesReader; 4 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoBytesSerializer; 5 | import com.github.cao.awa.kalmia.framework.serialize.bytes.BytesSerializer; 6 | import com.github.cao.awa.kalmia.message.cover.CoverMessage; 7 | 8 | @AutoBytesSerializer(value = 1003, target = CoverMessage.class) 9 | public class CoverMessageSerializer implements BytesSerializer { 10 | @Override 11 | public byte[] serialize(CoverMessage target) { 12 | return target.toBytes(); 13 | } 14 | 15 | @Override 16 | public CoverMessage deserialize(BytesReader reader) { 17 | return CoverMessage.create(reader); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/message/serializer/DeletedMessageSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.message.serializer; 2 | 3 | import com.github.cao.awa.apricot.io.bytes.reader.BytesReader; 4 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoBytesSerializer; 5 | import com.github.cao.awa.kalmia.framework.serialize.bytes.BytesSerializer; 6 | import com.github.cao.awa.kalmia.message.deleted.DeletedMessage; 7 | 8 | @AutoBytesSerializer(value = 1000, target = DeletedMessage.class) 9 | public class DeletedMessageSerializer implements BytesSerializer { 10 | @Override 11 | public byte[] serialize(DeletedMessage target) { 12 | return target.toBytes(); 13 | } 14 | 15 | @Override 16 | public DeletedMessage deserialize(BytesReader reader) { 17 | return DeletedMessage.create(reader); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/message/serializer/UnknownMessageSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.message.serializer; 2 | 3 | import com.github.cao.awa.apricot.io.bytes.reader.BytesReader; 4 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoBytesSerializer; 5 | import com.github.cao.awa.kalmia.framework.serialize.bytes.BytesSerializer; 6 | import com.github.cao.awa.kalmia.message.unknown.UnknownMessage; 7 | 8 | @AutoBytesSerializer(value = 1001, target = UnknownMessage.class) 9 | public class UnknownMessageSerializer implements BytesSerializer { 10 | @Override 11 | public byte[] serialize(UnknownMessage target) { 12 | return target.toBytes(); 13 | } 14 | 15 | @Override 16 | public UnknownMessage deserialize(BytesReader reader) { 17 | return UnknownMessage.create(reader); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/message/serializer/UserMessageSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.message.serializer; 2 | 3 | import com.github.cao.awa.apricot.io.bytes.reader.BytesReader; 4 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoBytesSerializer; 5 | import com.github.cao.awa.kalmia.framework.serialize.bytes.BytesSerializer; 6 | import com.github.cao.awa.kalmia.message.user.UserMessage; 7 | 8 | @AutoBytesSerializer(value = 1002, target = UserMessage.class) 9 | public class UserMessageSerializer implements BytesSerializer { 10 | @Override 11 | public byte[] serialize(UserMessage target) { 12 | return target.toBytes(); 13 | } 14 | 15 | @Override 16 | public UserMessage deserialize(BytesReader reader) { 17 | return UserMessage.create(reader); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/network/encode/kalmiagram/compress/RequestCompressor.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.network.encode.kalmiagram.compress; 2 | 3 | public class RequestCompressor { 4 | private RequestCompressorType compressor = RequestCompressorType.DEFLATE; 5 | 6 | public void setCompressor(RequestCompressorType compressor) { 7 | this.compressor = compressor; 8 | } 9 | 10 | public int id() { 11 | return this.compressor.id(); 12 | } 13 | 14 | public byte[] compress(byte[] data) { 15 | return this.compressor.compressor() 16 | .compress(data); 17 | } 18 | 19 | public byte[] decompress(byte[] data) { 20 | return this.compressor.compressor() 21 | .decompress(data); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/network/encode/kalmiagram/crypto/TransportLayerCrypto.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.network.encode.kalmiagram.crypto; 2 | 3 | public abstract class TransportLayerCrypto { 4 | public abstract byte[] encode(byte[] plains) throws Exception; 5 | 6 | public abstract byte[] decode(byte[] ciphertext) throws Exception; 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/network/encode/kalmiagram/crypto/asymmetric/AsymmetricCrypto.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.network.encode.kalmiagram.crypto.asymmetric; 2 | 3 | import com.github.cao.awa.kalmia.network.encode.kalmiagram.crypto.TransportLayerCrypto; 4 | 5 | import java.security.PrivateKey; 6 | import java.security.PublicKey; 7 | 8 | public abstract class AsymmetricCrypto extends TransportLayerCrypto { 9 | private PublicKey pubkey; 10 | private PrivateKey prikey; 11 | 12 | public AsymmetricCrypto(PublicKey pubkey, PrivateKey prikey) { 13 | this.pubkey = pubkey; 14 | this.prikey = prikey; 15 | } 16 | 17 | public PublicKey pubkey() { 18 | return this.pubkey; 19 | } 20 | 21 | public void pubkey(PublicKey pubkey) { 22 | this.pubkey = pubkey; 23 | } 24 | 25 | public PrivateKey prikey() { 26 | return this.prikey; 27 | } 28 | 29 | public void prikey(PrivateKey prikey) { 30 | this.prikey = prikey; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/network/encode/kalmiagram/crypto/symmetric/no/NoCrypto.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.network.encode.kalmiagram.crypto.symmetric.no; 2 | 3 | import com.github.cao.awa.kalmia.network.encode.kalmiagram.crypto.symmetric.SymmetricCrypto; 4 | import com.github.cao.awa.viburnum.util.bytes.BytesUtil; 5 | 6 | public class NoCrypto extends SymmetricCrypto { 7 | public NoCrypto() { 8 | super(BytesUtil.EMPTY); 9 | } 10 | 11 | @Override 12 | public byte[] encode(byte[] plains) throws Exception { 13 | return plains; 14 | } 15 | 16 | @Override 17 | public byte[] decode(byte[] ciphertext) throws Exception { 18 | return ciphertext; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/network/encode/kalmiagram/exception/ReplayAttackException.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.network.encode.kalmiagram.exception; 2 | 3 | public class ReplayAttackException extends RuntimeException { 4 | public ReplayAttackException() { 5 | super(); 6 | } 7 | 8 | public ReplayAttackException(String message) { 9 | super(message); 10 | } 11 | 12 | public ReplayAttackException(String message, Throwable cause) { 13 | super(message, 14 | cause 15 | ); 16 | } 17 | 18 | public ReplayAttackException(Throwable cause) { 19 | super(cause); 20 | } 21 | 22 | protected ReplayAttackException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { 23 | super(message, 24 | cause, 25 | enableSuppression, 26 | writableStackTrace 27 | ); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/network/exception/InvalidPacketException.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.network.exception; 2 | 3 | public class InvalidPacketException extends RuntimeException { 4 | public InvalidPacketException() { 5 | super(); 6 | } 7 | 8 | public InvalidPacketException(String message) { 9 | super(message); 10 | } 11 | 12 | public InvalidPacketException(String message, Throwable cause) { 13 | super(message, 14 | cause 15 | ); 16 | } 17 | 18 | public InvalidPacketException(Throwable cause) { 19 | super(cause); 20 | } 21 | 22 | protected InvalidPacketException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { 23 | super(message, 24 | cause, 25 | enableSuppression, 26 | writableStackTrace 27 | ); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/network/exception/InvalidStatusException.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.network.exception; 2 | 3 | public class InvalidStatusException extends RuntimeException { 4 | public InvalidStatusException() { 5 | super(); 6 | } 7 | 8 | public InvalidStatusException(String message) { 9 | super(message); 10 | } 11 | 12 | public InvalidStatusException(String message, Throwable cause) { 13 | super(message, 14 | cause 15 | ); 16 | } 17 | 18 | public InvalidStatusException(Throwable cause) { 19 | super(cause); 20 | } 21 | 22 | protected InvalidStatusException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { 23 | super(message, 24 | cause, 25 | enableSuppression, 26 | writableStackTrace 27 | ); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/network/packet/unsolve/ping/UnsolvedPingPacket.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.network.packet.unsolve.ping; 2 | 3 | import com.github.cao.awa.kalmia.network.packet.UnsolvedPacket; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.ping.PingPacket; 5 | 6 | public abstract class UnsolvedPingPacket extends UnsolvedPacket { 7 | public UnsolvedPingPacket(byte[] data) { 8 | super(data); 9 | } 10 | 11 | public boolean isStateless() { 12 | return true; 13 | } 14 | 15 | public boolean requireCrypto() { 16 | return false; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/network/packet/unsolve/ping/UnsolvedTryPingPacket.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.network.packet.unsolve.ping; 2 | 3 | import com.github.cao.awa.kalmia.network.packet.inbound.ping.TryPingPacket; 4 | import com.github.cao.awa.modmdo.annotation.platform.Server; 5 | 6 | /** 7 | * @see TryPingPacket 8 | */ 9 | @Server 10 | public class UnsolvedTryPingPacket extends UnsolvedPingPacket { 11 | public UnsolvedTryPingPacket(byte[] data) { 12 | super(data); 13 | } 14 | 15 | @Override 16 | public TryPingPacket packet() { 17 | return new TryPingPacket(reader()).receipt(receipt()); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/network/packet/unsolve/ping/UnsolvedTryPingResponsePacket.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.network.packet.unsolve.ping; 2 | 3 | import com.github.cao.awa.kalmia.network.packet.inbound.ping.TryPingResponsePacket; 4 | import com.github.cao.awa.modmdo.annotation.platform.Client; 5 | 6 | /** 7 | * @see TryPingResponsePacket 8 | */ 9 | @Client 10 | public class UnsolvedTryPingResponsePacket extends UnsolvedPingPacket { 11 | public UnsolvedTryPingResponsePacket(byte[] data) { 12 | super(data); 13 | } 14 | 15 | @Override 16 | public TryPingResponsePacket packet() { 17 | return new TryPingResponsePacket(reader()).receipt(receipt()); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/network/router/NetworkRouter.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.network.router; 2 | 3 | import io.netty.channel.SimpleChannelInboundHandler; 4 | 5 | public abstract class NetworkRouter extends SimpleChannelInboundHandler { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/EventBus.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus; 2 | 3 | import com.github.cao.awa.apricot.util.collection.ApricotCollectionFactor; 4 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 5 | 6 | import java.util.List; 7 | import java.util.function.Consumer; 8 | 9 | public abstract class EventBus { 10 | private final List handlers = ApricotCollectionFactor.arrayList(); 11 | 12 | public void trigger(T handler) { 13 | this.handlers.add(handler); 14 | } 15 | 16 | public void trigger(Consumer consumer) { 17 | this.handlers.forEach(consumer); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/EventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler; 2 | 3 | public interface EventBusHandler { 4 | } 5 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/chat/session/in/ChatInSessionEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.chat.session.in; 2 | 3 | import com.github.cao.awa.kalmia.identity.LongAndExtraIdentity; 4 | import com.github.cao.awa.kalmia.identity.PureExtraIdentity; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 7 | 8 | public interface ChatInSessionEventBusHandler extends EventBusHandler { 9 | void handle(RequestRouter router, byte[] receipt, LongAndExtraIdentity targetUser, PureExtraIdentity sessionIdentity); 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/chat/session/listeners/SessionListenersUpdateEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.chat.session.listeners; 2 | 3 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 4 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 5 | import com.github.cao.awa.kalmia.session.Session; 6 | 7 | import java.util.List; 8 | 9 | public interface SessionListenersUpdateEventBusHandler extends EventBusHandler { 10 | void handle(RequestRouter router, byte[] receipt, List sessions); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/chat/session/request/RequestDuetSessionEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.chat.session.request; 2 | 3 | import com.github.cao.awa.kalmia.identity.LongAndExtraIdentity; 4 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 5 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 6 | 7 | public interface RequestDuetSessionEventBusHandler extends EventBusHandler { 8 | void handle(RequestRouter router, byte[] receipt, LongAndExtraIdentity targetUser); 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/chat/session/request/RequestGroupSessionEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.chat.session.request; 2 | 3 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 4 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 5 | 6 | public interface RequestGroupSessionEventBusHandler extends EventBusHandler { 7 | void handle(RequestRouter router, byte[] receipt, String name); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/disconnect/TryDisconnectEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.disconnect; 2 | 3 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 4 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 5 | 6 | public interface TryDisconnectEventBusHandler extends EventBusHandler { 7 | void handle(RequestRouter router, byte[] receipt, String reason); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/handshake/crypto/aes/HandshakeAesCipherEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.handshake.crypto.aes; 2 | 3 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 4 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 5 | 6 | public interface HandshakeAesCipherEventBusHandler extends EventBusHandler { 7 | void handle(RequestRouter router, byte[] receipt, byte[] cipher); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/handshake/crypto/ec/HandshakePreSharedEcEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.handshake.crypto.ec; 2 | 3 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 4 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 5 | 6 | public interface HandshakePreSharedEcEventBusHandler extends EventBusHandler { 7 | void handle(RequestRouter router, byte[] receipt, String cipherField); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/handshake/hello/ClientHelloEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.handshake.hello; 2 | 3 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 4 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 5 | import com.github.cao.awa.kalmia.protocol.RequestProtocol; 6 | 7 | public interface ClientHelloEventBusHandler extends EventBusHandler { 8 | void handle(RequestRouter router, byte[] receipt, RequestProtocol majorProtocol, String clientVersion, String expectCipherField); 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/handshake/hello/ServerHelloEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.handshake.hello; 2 | 3 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 4 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 5 | 6 | public interface ServerHelloEventBusHandler extends EventBusHandler { 7 | void handle(RequestRouter router, byte[] receipt, String serverName, String serverVersion, byte[] iv); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/invalid/operation/DeleteMessageEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.invalid.operation; 2 | 3 | import com.github.cao.awa.kalmia.identity.PureExtraIdentity; 4 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 5 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 6 | 7 | public interface DeleteMessageEventBusHandler extends EventBusHandler { 8 | void handle(RequestRouter router, byte[] receipt, PureExtraIdentity sessionIdentity, long seq); 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/key/select/SelectKeyStoreEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.key.select; 2 | 3 | import com.github.cao.awa.kalmia.identity.PureExtraIdentity; 4 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 5 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 6 | 7 | import java.util.List; 8 | 9 | public interface SelectKeyStoreEventBusHandler extends EventBusHandler { 10 | void handle(RequestRouter router, byte[] receipt, List keyIdentities); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/key/select/SelectedKeyStoreEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.key.select; 2 | 3 | import com.github.cao.awa.kalmia.identity.PureExtraIdentity; 4 | import com.github.cao.awa.kalmia.keypair.store.KeyPairStore; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 7 | 8 | import java.util.Map; 9 | 10 | public interface SelectedKeyStoreEventBusHandler extends EventBusHandler { 11 | void handle(RequestRouter router, byte[] receipt, Map keys); 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/launch/DoneLaunchEventBus.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.launch; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.launch.done.DoneLaunchEventHandler; 4 | import com.github.cao.awa.kalmia.event.kalmiagram.launch.done.DoneLaunchEvent; 5 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.EventBus; 6 | 7 | public class DoneLaunchEventBus extends EventBus implements DoneLaunchEventHandler { 8 | @Override 9 | public void handle(DoneLaunchEvent event) { 10 | trigger(DoneLaunchEventBusHandler :: handle); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/launch/DoneLaunchEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.launch; 2 | 3 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 4 | 5 | public interface DoneLaunchEventBusHandler extends EventBusHandler { 6 | void handle(); 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/login/feedback/LoginFailureEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.login.feedback; 2 | 3 | import com.github.cao.awa.kalmia.identity.LongAndExtraIdentity; 4 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 5 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 6 | 7 | public interface LoginFailureEventBusHandler extends EventBusHandler { 8 | void handle(RequestRouter router, byte[] receipt, LongAndExtraIdentity accessIdentity, String reason); 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/login/feedback/LoginSuccessEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.login.feedback; 2 | 3 | import com.github.cao.awa.kalmia.identity.LongAndExtraIdentity; 4 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 5 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 6 | 7 | public interface LoginSuccessEventBusHandler extends EventBusHandler { 8 | void handle(RequestRouter router, byte[] receipt, LongAndExtraIdentity accessIdentity, byte[] token); 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/login/password/LoginWithPasswordEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.login.password; 2 | 3 | import com.github.cao.awa.kalmia.identity.LongAndExtraIdentity; 4 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 5 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 6 | 7 | public interface LoginWithPasswordEventBusHandler extends EventBusHandler { 8 | void handle(RequestRouter router, byte[] receipt, LongAndExtraIdentity accessIdentity, String password); 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/login/sign/LoginWithSignEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.login.sign; 2 | 3 | import com.github.cao.awa.kalmia.identity.LongAndExtraIdentity; 4 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 5 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 6 | 7 | public interface LoginWithSignEventBusHandler extends EventBusHandler { 8 | void handle(RequestRouter router, byte[] receipt, LongAndExtraIdentity accessIdentity, byte[] challengeData); 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/login/token/LoginWithTokenEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.login.token; 2 | 3 | import com.github.cao.awa.kalmia.identity.LongAndExtraIdentity; 4 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 5 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 6 | 7 | public interface LoginWithTokenEventBusHandler extends EventBusHandler { 8 | void handle(RequestRouter router, byte[] receipt, LongAndExtraIdentity accessIdentity, byte[] token); 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/message/delete/DeleteMessageEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.message.delete; 2 | 3 | import com.github.cao.awa.kalmia.identity.PureExtraIdentity; 4 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 5 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 6 | 7 | public interface DeleteMessageEventBusHandler extends EventBusHandler { 8 | void handle(RequestRouter router, byte[] receipt, PureExtraIdentity sessionIdentity, long seq); 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/message/delete/DeletedMessageEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.message.delete; 2 | 3 | import com.github.cao.awa.kalmia.identity.PureExtraIdentity; 4 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 5 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 6 | 7 | public interface DeletedMessageEventBusHandler extends EventBusHandler { 8 | void handle(RequestRouter router, byte[] receipt, PureExtraIdentity sessionIdentity, long seq); 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/message/notice/NewMessageNoticeEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.message.notice; 2 | 3 | import com.github.cao.awa.kalmia.identity.PureExtraIdentity; 4 | import com.github.cao.awa.kalmia.message.Message; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 7 | 8 | public interface NewMessageNoticeEventBusHandler extends EventBusHandler { 9 | void handle(RequestRouter router, byte[] receipt, PureExtraIdentity sessionIdentity, long seq, Message message); 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/message/select/SelectMessageEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.message.select; 2 | 3 | import com.github.cao.awa.kalmia.identity.PureExtraIdentity; 4 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 5 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 6 | 7 | public interface SelectMessageEventBusHandler extends EventBusHandler { 8 | void handle(RequestRouter router, byte[] receipt, PureExtraIdentity sessionId, long from, long to); 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/message/select/SelectedMessageEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.message.select; 2 | 3 | import com.github.cao.awa.kalmia.identity.PureExtraIdentity; 4 | import com.github.cao.awa.kalmia.message.Message; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 7 | 8 | import java.util.List; 9 | 10 | public interface SelectedMessageEventBusHandler extends EventBusHandler { 11 | void handle(RequestRouter router, byte[] receipt, PureExtraIdentity sessionIdentity, long from, long to, long sessionCurSeq, List messages); 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/message/send/SendMessageEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.message.send; 2 | 3 | import com.github.cao.awa.kalmia.identity.PureExtraIdentity; 4 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 5 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 6 | 7 | public interface SendMessageEventBusHandler extends EventBusHandler { 8 | void handle(RequestRouter router, byte[] receipt, PureExtraIdentity sessionIdentity, PureExtraIdentity keyIdentity, PureExtraIdentity signIdentity, byte[] message, byte[] sign); 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/message/send/SendMessageRefusedEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.message.send; 2 | 3 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 4 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 5 | 6 | public interface SendMessageRefusedEventBusHandler extends EventBusHandler { 7 | void handle(RequestRouter router, byte[] receipt, String reason); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/message/send/SentMessageEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.message.send; 2 | 3 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 4 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 5 | 6 | public interface SentMessageEventBusHandler extends EventBusHandler { 7 | void handle(RequestRouter router, byte[] receipt, long seq); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/ping/TryPingEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.ping; 2 | 3 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 4 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 5 | 6 | public interface TryPingEventBusHandler extends EventBusHandler { 7 | void handle(RequestRouter router, byte[] receipt, long startTime); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/ping/TryPingResponseEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.ping; 2 | 3 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 4 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 5 | 6 | public interface TryPingResponseEventBusHandler extends EventBusHandler { 7 | void handle(RequestRouter router, byte[] receipt, long startTime); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/resource/write/RequestNextResourceShardEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.resource.write; 2 | 3 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 4 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 5 | 6 | public interface RequestNextResourceShardEventBusHandler extends EventBusHandler { 7 | void handle(RequestRouter router, byte[] receipt); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/eventbus/handler/resource/write/WriteResourceEventBusHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.resource.write; 2 | 3 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 4 | import com.github.cao.awa.kalmia.plugin.internal.eventbus.handler.EventBusHandler; 5 | 6 | public interface WriteResourceEventBusHandler extends EventBusHandler { 7 | void handle(RequestRouter router, byte[] receipt, byte[] data, boolean isFinal); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/kalmia/core/test/KalmiaTest.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.kalmia.core.test; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.apricot.annotations.auto.AutoPlugin; 5 | import com.github.cao.awa.kalmia.env.KalmiaEnv; 6 | import com.github.cao.awa.kalmia.plugin.Plugin; 7 | import org.apache.logging.log4j.LogManager; 8 | import org.apache.logging.log4j.Logger; 9 | 10 | @Auto 11 | @AutoPlugin( 12 | name = "kalmia_test", 13 | uuid = "C942B874-2E65-CCB4-8B8C-0C743E7BE816" 14 | ) 15 | public class KalmiaTest extends Plugin { 16 | private static final Logger LOGGER = LogManager.getLogger("KalmiaTestPlugin"); 17 | 18 | @Override 19 | public void onLoad() { 20 | LOGGER.info("Loading kalmia test plugin"); 21 | } 22 | 23 | @Override 24 | public boolean canLoad() { 25 | return ! KalmiaEnv.globalConfig.get().enabledTranslation.get(); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/plugin/internal/kalmia/core/uni/handler/resource/write/WriteResourceNextStepHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.plugin.internal.kalmia.core.uni.handler.resource.write; 2 | 3 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.network.inbound.resource.write.WriteResourceNextStepEventHandler; 4 | import com.github.cao.awa.kalmia.network.packet.inbound.resource.write.WriteResourceNextStepPacket; 5 | import com.github.cao.awa.kalmia.network.router.kalmia.RequestRouter; 6 | 7 | public class WriteResourceNextStepHandler implements WriteResourceNextStepEventHandler { 8 | @Override 9 | public void handle(RequestRouter router, WriteResourceNextStepPacket packet) { 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/profile/UserProfile.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.profile; 2 | 3 | import com.github.cao.awa.apricot.util.encryption.Crypto; 4 | 5 | import java.security.interfaces.ECPublicKey; 6 | 7 | public class UserProfile { 8 | private final ECPublicKey publicKey; 9 | 10 | public UserProfile(byte[] publicKey) { 11 | this.publicKey = Crypto.decodeEcPubkey(publicKey); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/resource/manager/writer/ResourceWriter.kt: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.resource.manager.writer 2 | 3 | import com.github.cao.awa.apricot.util.time.TimeUtil 4 | import java.io.BufferedOutputStream 5 | 6 | class ResourceWriter(private val output: BufferedOutputStream) { 7 | private val openingTimestamp = TimeUtil.millions() 8 | private var lastActive = openingTimestamp 9 | fun write(data: ByteArray) { 10 | lastActive = TimeUtil.millions() 11 | output.write(data) 12 | output.flush() 13 | } 14 | 15 | fun close() = this.output.close() 16 | 17 | fun openingTimestamp(): Long = this.openingTimestamp 18 | 19 | fun output(): BufferedOutputStream = this.output 20 | 21 | fun lastActive(): Long = this.lastActive 22 | } -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/security/cipher/manager/KeyManager.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.security.cipher.manager; 2 | 3 | import com.github.cao.awa.apricot.util.collection.ApricotCollectionFactor; 4 | 5 | import java.util.Map; 6 | 7 | public abstract class KeyManager { 8 | private final Map keys = ApricotCollectionFactor.hashMap(); 9 | 10 | public void add(String field, T key) { 11 | this.keys.put(field, 12 | key 13 | ); 14 | } 15 | 16 | public void delete(String field) { 17 | this.keys.remove(field); 18 | } 19 | 20 | public T get(String field) { 21 | return this.keys.get(field); 22 | } 23 | 24 | public boolean has(String field) { 25 | return get(field) != null; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/security/cipher/manager/ec/EcPrikeyManager.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.security.cipher.manager.ec; 2 | 3 | import com.github.cao.awa.kalmia.security.cipher.manager.KeyManager; 4 | 5 | import java.security.interfaces.ECPrivateKey; 6 | 7 | public class EcPrikeyManager extends KeyManager { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/security/cipher/manager/ec/EcPubkeyManager.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.security.cipher.manager.ec; 2 | 3 | import com.github.cao.awa.kalmia.security.cipher.manager.KeyManager; 4 | 5 | import java.security.interfaces.ECPublicKey; 6 | 7 | public class EcPubkeyManager extends KeyManager { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/security/cipher/manager/rsa/RsaPrikeyManager.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.security.cipher.manager.rsa; 2 | 3 | import com.github.cao.awa.kalmia.security.cipher.manager.KeyManager; 4 | 5 | import java.security.interfaces.RSAPrivateKey; 6 | 7 | public class RsaPrikeyManager extends KeyManager { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/security/cipher/manager/rsa/RsaPubkeyManager.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.security.cipher.manager.rsa; 2 | 3 | import com.github.cao.awa.kalmia.security.cipher.manager.KeyManager; 4 | 5 | import java.security.interfaces.RSAPublicKey; 6 | 7 | public class RsaPubkeyManager extends KeyManager { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/session/SessionAccessibleData.kt: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.session 2 | 3 | class SessionAccessibleData(private val accessible: ByteArray) { 4 | fun accessibleChat(isWhitelist: Boolean): Boolean { 5 | return if (isWhitelist) this.accessible[0] == 1.toByte() else this.accessible[0] != 0.toByte(); 6 | } 7 | 8 | fun accessibleChat() { 9 | this.accessible[0] = 1 10 | } 11 | 12 | fun banChat() { 13 | this.accessible[0] = 0 14 | } 15 | 16 | fun bytes(): ByteArray = this.accessible 17 | } -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/session/factor/SessionFactor.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.session.factor; 2 | 3 | import com.github.cao.awa.apricot.io.bytes.reader.BytesReader; 4 | import com.github.cao.awa.apricot.util.collection.ApricotCollectionFactor; 5 | import com.github.cao.awa.kalmia.session.Session; 6 | 7 | import java.util.Map; 8 | import java.util.function.Function; 9 | 10 | public class SessionFactor { 11 | private static final Map> factories = ApricotCollectionFactor.hashMap(); 12 | 13 | public static void register(int id, Function factor) { 14 | factories.put(id, 15 | factor 16 | ); 17 | } 18 | 19 | public static Session create(int id, BytesReader reader) { 20 | Function factor = factories.get(id); 21 | if (factor == null) { 22 | return null; 23 | } 24 | return factor.apply(reader); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/session/serializer/CommunalSessionSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.session.serializer; 2 | 3 | import com.github.cao.awa.apricot.io.bytes.reader.BytesReader; 4 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoBytesSerializer; 5 | import com.github.cao.awa.kalmia.framework.serialize.bytes.BytesSerializer; 6 | import com.github.cao.awa.kalmia.session.communal.CommunalSession; 7 | 8 | @AutoBytesSerializer(value = 3000, target = CommunalSession.class) 9 | public class CommunalSessionSerializer implements BytesSerializer { 10 | @Override 11 | public byte[] serialize(CommunalSession target) { 12 | return target.bytes(); 13 | } 14 | 15 | @Override 16 | public CommunalSession deserialize(BytesReader reader) { 17 | return CommunalSession.create(reader); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/session/serializer/DuetSessionSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.session.serializer; 2 | 3 | import com.github.cao.awa.apricot.io.bytes.reader.BytesReader; 4 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoBytesSerializer; 5 | import com.github.cao.awa.kalmia.framework.serialize.bytes.BytesSerializer; 6 | import com.github.cao.awa.kalmia.session.duet.DuetSession; 7 | 8 | @AutoBytesSerializer(value = 3002, target = DuetSession.class) 9 | public class DuetSessionSerializer implements BytesSerializer { 10 | @Override 11 | public byte[] serialize(DuetSession target) { 12 | return target.bytes(); 13 | } 14 | 15 | @Override 16 | public DuetSession deserialize(BytesReader reader) { 17 | return DuetSession.create(reader); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/session/serializer/GroupSessionSerializer.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.session.serializer; 2 | 3 | import com.github.cao.awa.apricot.io.bytes.reader.BytesReader; 4 | import com.github.cao.awa.kalmia.annotations.auto.serializer.AutoBytesSerializer; 5 | import com.github.cao.awa.kalmia.framework.serialize.bytes.BytesSerializer; 6 | import com.github.cao.awa.kalmia.session.group.GroupSession; 7 | 8 | @AutoBytesSerializer(value = 3001, target = GroupSession.class) 9 | public class GroupSessionSerializer implements BytesSerializer { 10 | @Override 11 | public byte[] serialize(GroupSession target) { 12 | return target.bytes(); 13 | } 14 | 15 | @Override 16 | public GroupSession deserialize(BytesReader reader) { 17 | return GroupSession.create(reader); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/setting/Setting.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.setting; 2 | 3 | public abstract class Setting { 4 | public abstract String settingKey(); 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/setting/key/lang/LanguageSetting.kt: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.setting.key.lang 2 | 3 | import com.github.cao.awa.kalmia.setting.Setting 4 | 5 | class LanguageSetting(private val languageKey: String) : Setting() { 6 | fun languageKey(): String = this.languageKey 7 | 8 | override fun settingKey(): String = "lang" 9 | } -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/setting/key/session/message/processor/SessionEnabledProcessorsSetting.kt: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.setting.key.session.message.processor 2 | 3 | import com.github.cao.awa.apricot.util.collection.ApricotCollectionFactor 4 | import com.github.cao.awa.kalmia.setting.Setting 5 | import java.util.* 6 | 7 | class SessionEnabledProcessorsSetting(private val processors: List = ApricotCollectionFactor.arrayList()) : 8 | Setting() { 9 | fun processors(): List = this.processors 10 | 11 | override fun settingKey(): String = "enabled-message-processor" 12 | } -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/setting/session/SessionSettings.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.setting.session; 2 | 3 | import com.github.cao.awa.apricot.util.collection.ApricotCollectionFactor; 4 | import com.github.cao.awa.kalmia.setting.key.session.message.processor.SessionEnabledProcessorsSetting; 5 | 6 | public class SessionSettings { 7 | public static final SessionEnabledProcessorsSetting ENABLED_PROCESSORS = new SessionEnabledProcessorsSetting(ApricotCollectionFactor.arrayList()); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/setting/user/UserSettings.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.setting.user; 2 | 3 | import com.github.cao.awa.kalmia.setting.key.lang.LanguageSetting; 4 | 5 | public class UserSettings { 6 | public static final LanguageSetting LANGUAGE = new LanguageSetting("en_us"); 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/threading/ThreadingUtil.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.threading; 2 | 3 | import com.github.cao.awa.kalmia.annotations.threading.ForceMainThread; 4 | 5 | public class ThreadingUtil { 6 | public static boolean forceMainThread(Class clazz) { 7 | return clazz.isAnnotationPresent(ForceMainThread.class); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/token/TokenRecorder.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.token; 2 | 3 | public class TokenRecorder { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/translation/event/TranslationEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.translation.event; 2 | 3 | import com.github.cao.awa.kalmia.event.Event; 4 | import com.github.cao.awa.kalmia.translation.network.packet.TranslationPacket; 5 | import com.github.cao.awa.kalmia.translation.network.router.TranslationRouter; 6 | 7 | public class TranslationEvent extends Event { 8 | private final TranslationRouter router; 9 | private final T packet; 10 | 11 | public TranslationEvent(TranslationRouter router, T packet) { 12 | this.router = router; 13 | this.packet = packet; 14 | } 15 | 16 | public TranslationRouter router() { 17 | return this.router; 18 | } 19 | 20 | public T packet() { 21 | return this.packet; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/translation/event/handler/TranslationEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.translation.event.handler; 2 | 3 | import com.github.cao.awa.kalmia.annotations.inaction.DoNotOverride; 4 | import com.github.cao.awa.kalmia.event.kalmiagram.handler.EventHandler; 5 | import com.github.cao.awa.kalmia.translation.event.TranslationEvent; 6 | import com.github.cao.awa.kalmia.translation.network.packet.TranslationPacket; 7 | import com.github.cao.awa.kalmia.translation.network.router.TranslationRouter; 8 | 9 | public interface TranslationEventHandler

> extends EventHandler { 10 | void handle(TranslationRouter router, P packet); 11 | 12 | @Override 13 | @DoNotOverride 14 | default void handle(E event) { 15 | handle( 16 | event.router(), 17 | event.packet() 18 | ); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/translation/event/handler/inbound/login/password/TranslationLoginWithPasswordEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.translation.event.handler.inbound.login.password; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.translation.event.handler.TranslationEventHandler; 6 | import com.github.cao.awa.kalmia.translation.event.inbound.login.password.TranslationLoginWithPasswordEvent; 7 | import com.github.cao.awa.kalmia.translation.network.packet.login.TranslationLoginWithPasswordPacket; 8 | 9 | @Auto 10 | @AutoHandler(TranslationLoginWithPasswordEvent.class) 11 | public interface TranslationLoginWithPasswordEventHandler extends TranslationEventHandler { 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/translation/event/handler/inbound/message/select/TranslationSelectMessageEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.translation.event.handler.inbound.message.select; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.translation.event.handler.TranslationEventHandler; 6 | import com.github.cao.awa.kalmia.translation.event.inbound.message.select.TranslationSelectMessageEvent; 7 | import com.github.cao.awa.kalmia.translation.network.packet.message.select.TranslationSelectMessagePacket; 8 | 9 | @Auto 10 | @AutoHandler(TranslationSelectMessageEvent.class) 11 | public interface TranslationSelectMessageEventHandler extends TranslationEventHandler { 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/translation/event/handler/inbound/meta/connect/TranslationProxyConnectEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.translation.event.handler.inbound.meta.connect; 2 | 3 | import com.github.cao.awa.apricot.annotations.auto.Auto; 4 | import com.github.cao.awa.kalmia.annotations.auto.event.AutoHandler; 5 | import com.github.cao.awa.kalmia.translation.event.handler.TranslationEventHandler; 6 | import com.github.cao.awa.kalmia.translation.event.inbound.meta.connect.TranslationProxyConnectEvent; 7 | import com.github.cao.awa.kalmia.translation.network.packet.meta.connect.TranslationProxyConnectPacket; 8 | 9 | @Auto 10 | @AutoHandler(TranslationProxyConnectEvent.class) 11 | public interface TranslationProxyConnectEventHandler extends TranslationEventHandler { 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/translation/event/inbound/login/password/TranslationLoginWithPasswordEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.translation.event.inbound.login.password; 2 | 3 | import com.github.cao.awa.kalmia.translation.event.TranslationEvent; 4 | import com.github.cao.awa.kalmia.translation.network.packet.login.TranslationLoginWithPasswordPacket; 5 | import com.github.cao.awa.kalmia.translation.network.router.TranslationRouter; 6 | 7 | public class TranslationLoginWithPasswordEvent extends TranslationEvent { 8 | public TranslationLoginWithPasswordEvent(TranslationRouter router, TranslationLoginWithPasswordPacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/translation/event/inbound/message/select/TranslationSelectMessageEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.translation.event.inbound.message.select; 2 | 3 | import com.github.cao.awa.kalmia.translation.event.TranslationEvent; 4 | import com.github.cao.awa.kalmia.translation.network.packet.message.select.TranslationSelectMessagePacket; 5 | import com.github.cao.awa.kalmia.translation.network.router.TranslationRouter; 6 | 7 | public class TranslationSelectMessageEvent extends TranslationEvent { 8 | public TranslationSelectMessageEvent(TranslationRouter router, TranslationSelectMessagePacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/translation/event/inbound/meta/connect/TranslationProxyConnectEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.translation.event.inbound.meta.connect; 2 | 3 | import com.github.cao.awa.kalmia.translation.event.TranslationEvent; 4 | import com.github.cao.awa.kalmia.translation.network.packet.meta.connect.TranslationProxyConnectPacket; 5 | import com.github.cao.awa.kalmia.translation.network.router.TranslationRouter; 6 | 7 | public class TranslationProxyConnectEvent extends TranslationEvent { 8 | public TranslationProxyConnectEvent(TranslationRouter router, TranslationProxyConnectPacket packet) { 9 | super(router, 10 | packet 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/kalmia/user/factor/UserFactor.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.kalmia.user.factor; 2 | 3 | import com.github.cao.awa.apricot.io.bytes.reader.BytesReader; 4 | import com.github.cao.awa.apricot.util.collection.ApricotCollectionFactor; 5 | import com.github.cao.awa.kalmia.user.User; 6 | 7 | import java.util.Map; 8 | import java.util.function.Function; 9 | 10 | public class UserFactor { 11 | private static final Map> factories = ApricotCollectionFactor.hashMap(); 12 | 13 | public static void register(int id, Function factor) { 14 | factories.put(id, 15 | factor 16 | ); 17 | } 18 | 19 | public static User create(int id, BytesReader reader) { 20 | Function factor = factories.get(id); 21 | if (factor == null) { 22 | return null; 23 | } 24 | return factor.apply(reader); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/modmdo/annotation/platform/Client.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.modmdo.annotation.platform; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | 6 | @Retention(RetentionPolicy.RUNTIME) 7 | public @interface Client { 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/modmdo/annotation/platform/External.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.modmdo.annotation.platform; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | 6 | @Retention(RetentionPolicy.RUNTIME) 7 | public @interface External { 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/modmdo/annotation/platform/Generic.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.modmdo.annotation.platform; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | 6 | @Retention(RetentionPolicy.RUNTIME) 7 | public @interface Generic { 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/modmdo/annotation/platform/Server.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.modmdo.annotation.platform; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | 6 | @Retention(RetentionPolicy.RUNTIME) 7 | public @interface Server { 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/trtr/framework/exception/InvertOfControlException.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.trtr.framework.exception; 2 | 3 | public abstract class InvertOfControlException extends RuntimeException { 4 | public InvertOfControlException(String message) { 5 | super(message); 6 | } 7 | 8 | public InvertOfControlException(String message, Throwable cause) { 9 | super(message, 10 | cause 11 | ); 12 | } 13 | 14 | public InvertOfControlException(Throwable cause) { 15 | super(cause); 16 | } 17 | 18 | protected InvertOfControlException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { 19 | super(message, 20 | cause, 21 | enableSuppression, 22 | writableStackTrace 23 | ); 24 | } 25 | 26 | public InvertOfControlException() { 27 | super(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/trtr/framework/exception/NoAutoAnnotationException.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.trtr.framework.exception; 2 | 3 | public class NoAutoAnnotationException extends InvertOfControlException { 4 | public NoAutoAnnotationException(String message) { 5 | super(message); 6 | } 7 | 8 | public NoAutoAnnotationException(String message, Throwable cause) { 9 | super(message, 10 | cause 11 | ); 12 | } 13 | 14 | public NoAutoAnnotationException(Throwable cause) { 15 | super(cause); 16 | } 17 | 18 | protected NoAutoAnnotationException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { 19 | super(message, 20 | cause, 21 | enableSuppression, 22 | writableStackTrace 23 | ); 24 | } 25 | 26 | public NoAutoAnnotationException() { 27 | super(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/trtr/framework/exception/NotStaticFieldException.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.trtr.framework.exception; 2 | 3 | public class NotStaticFieldException extends InvertOfControlException { 4 | public NotStaticFieldException() { 5 | super(); 6 | } 7 | 8 | public NotStaticFieldException(String message) { 9 | super(message); 10 | } 11 | 12 | public NotStaticFieldException(String message, Throwable cause) { 13 | super(message, 14 | cause 15 | ); 16 | } 17 | 18 | public NotStaticFieldException(Throwable cause) { 19 | super(cause); 20 | } 21 | 22 | protected NotStaticFieldException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { 23 | super(message, 24 | cause, 25 | enableSuppression, 26 | writableStackTrace 27 | ); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/trtr/framework/exception/SetFinalFieldException.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.trtr.framework.exception; 2 | 3 | public class SetFinalFieldException extends InvertOfControlException { 4 | public SetFinalFieldException() { 5 | super(); 6 | } 7 | 8 | public SetFinalFieldException(String message) { 9 | super(message); 10 | } 11 | 12 | public SetFinalFieldException(String message, Throwable cause) { 13 | super(message, 14 | cause 15 | ); 16 | } 17 | 18 | public SetFinalFieldException(Throwable cause) { 19 | super(cause); 20 | } 21 | 22 | protected SetFinalFieldException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { 23 | super(message, 24 | cause, 25 | enableSuppression, 26 | writableStackTrace 27 | ); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/github/cao/awa/trtr/util/string/StringConcat.java: -------------------------------------------------------------------------------- 1 | package com.github.cao.awa.trtr.util.string; 2 | 3 | public class StringConcat { 4 | public static String concat(String s1, Object... concat) { 5 | StringBuilder s1Builder = new StringBuilder(s1); 6 | for (Object o : concat) { 7 | s1Builder.append(o); 8 | } 9 | s1 = s1Builder.toString(); 10 | return s1; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/github/zhuaidadaya/rikaishinikui/handler/universal/affair/Affair.java: -------------------------------------------------------------------------------- 1 | package com.github.zhuaidadaya.rikaishinikui.handler.universal.affair; 2 | 3 | import com.github.cao.awa.apricot.annotations.Stable; 4 | import com.github.cao.awa.apricot.util.collection.ApricotCollectionFactor; 5 | 6 | import java.util.List; 7 | 8 | @Stable 9 | public class Affair { 10 | private final List actions = ApricotCollectionFactor.linkedList(); 11 | 12 | public static Affair of(Runnable action) { 13 | return new Affair().add(action); 14 | } 15 | 16 | public static Affair empty() { 17 | return new Affair(); 18 | } 19 | 20 | public Affair add(Runnable action) { 21 | this.actions.add(action); 22 | return this; 23 | } 24 | 25 | public void done() { 26 | this.actions.forEach(Runnable::run); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/resources/configs/client/bootstrap/network/kalmia-client-bootstrap-network.json: -------------------------------------------------------------------------------- 1 | { 2 | "metadata": { 3 | "version": 0 4 | }, 5 | "connect_host": "127.0.0.1", 6 | "connect_port": 12345, 7 | "use_epoll": true 8 | } -------------------------------------------------------------------------------- /src/main/resources/configs/client/client-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "metadata": { 3 | "version": 0 4 | }, 5 | "network": { 6 | "metadata": { 7 | "version": 0 8 | }, 9 | "connect_host": "127.0.0.1", 10 | "connect_port": 12345, 11 | "use_epoll": true 12 | }, 13 | "use_cipher": "Kalmia/Main" 14 | } -------------------------------------------------------------------------------- /src/main/resources/configs/config-metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 0 3 | } 4 | 5 | -------------------------------------------------------------------------------- /src/main/resources/configs/constant/kalmia-constants.json: -------------------------------------------------------------------------------- 1 | { 2 | "true": true, 3 | "false": false, 4 | "k": 1024, 5 | "k16": 16384, 6 | "int_max": 2147483647, 7 | "long_max": 9223372036854775807, 8 | "server_port": 12345, 9 | "ciphers_directory": "./ciphers/" 10 | } -------------------------------------------------------------------------------- /src/main/resources/configs/global/kalmia-globals.json: -------------------------------------------------------------------------------- 1 | { 2 | "enabled_translation": false 3 | } -------------------------------------------------------------------------------- /src/main/resources/configs/network/router/router-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "metadata": { 3 | "version": 0 4 | }, 5 | "compress_threshold": 1423 6 | } -------------------------------------------------------------------------------- /src/main/resources/configs/server/bootstrap/network/kalmia-server-bootstrap-network.json: -------------------------------------------------------------------------------- 1 | { 2 | "metadata": { 3 | "version": 0 4 | }, 5 | "bind_host": "127.0.0.1", 6 | "bind_port": 12345, 7 | "use_epoll": true 8 | } -------------------------------------------------------------------------------- /src/main/resources/configs/server/server-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "metadata": { 3 | "version": 0 4 | }, 5 | "network": { 6 | "metadata": { 7 | "version": 0 8 | }, 9 | "bind_host": "127.0.0.1", 10 | "bind_port": 12345, 11 | "use_epoll": true 12 | }, 13 | "translation": { 14 | "metadata": { 15 | "version": 0 16 | }, 17 | "enabled": "@INHERITED:G#enabled_translation" 18 | }, 19 | "name": "Kalmia server", 20 | "use_cipher": "Kalmia/Main" 21 | } -------------------------------------------------------------------------------- /src/main/resources/configs/translation/translation-server.json: -------------------------------------------------------------------------------- 1 | { 2 | "metadata": { 3 | "version": 0 4 | }, 5 | "enabled": "@INHERITED:G#enabled_translation" 6 | } -------------------------------------------------------------------------------- /src/main/resources/kalmiagram/lang/zh_cn.json: -------------------------------------------------------------------------------- 1 | { 2 | "#coloreggs": { 3 | "coloregg.unsigned.meow": "喵~" 4 | }, 5 | "#invalid-operations": { 6 | "server.internal.error": "服务器内部错误", 7 | "packet.crypto.required": "加密在对此数据包是必要的" 8 | }, 9 | "@translation": { 10 | "#proxy-status": { 11 | "status.kalmia.connecting": "正在尝试连接到山月桂服务器", 12 | "status.kalmia.disconnected": "已与山月桂服务器断开连接", 13 | "status.kalmia.handshake.ec": "正在进行握手至椭圆曲线阶段", 14 | "status.kalmia.handshake.hello": "正在进行握手至ServerHello阶段", 15 | "status.kalmia.login": "正在尝试登录" 16 | }, 17 | "#login-status": { 18 | "login.failure.pwd_or_identity_is_wrong": "密码或标识错误", 19 | "login.failure.unable_to_verify_sign": "无法验证签名", 20 | "login.failure.invalid_token": "无效的token", 21 | "login.failure.handshake_required": "未完成连接握手" 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /src/main/resources/kalmiagram/secret/main/SECRET_PUBLIC: -------------------------------------------------------------------------------- 1 | { 2 | "key-type":"public-ec", 3 | "encode-mode":"kalmia-base36", 4 | "data":"13mhgvwznod324bdi48k3x43q5q0sip185x5nh8vnns1mchw7xbwdv8laqbyaw80fu4s4x5zg50thaaz5dbssstaj77h5jbw1ri0gkvq5u4u6vwnxznb5wqbwm18lonrc2gxahat252zkxyizpxl3z2831f8by56vu63oy3gebmyjscixxnbof4geraujrg8ps93assigatfh5kva38i84vh8ummpqd9w7n7sqpjgvufwt8pcp2dg" 5 | } -------------------------------------------------------------------------------- /src/main/resources/kalmiagram/secret/main/cipher.json: -------------------------------------------------------------------------------- 1 | { 2 | "cipher-name": "Kalmia/Main" 3 | } -------------------------------------------------------------------------------- /src/main/resources/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | --------------------------------------------------------------------------------