commit 5a2cf7c6502ec167628eecc2074a3486b6359c37 Author: DELL Date: Sun Nov 1 23:32:55 2026 +0800 KNEMCL v0.14 diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..fd14bcb --- /dev/null +++ b/.classpath @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..eb6ce1e --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +/client/ +/hs_err_pid12384.log +/java/ +/data/ diff --git a/.project b/.project new file mode 100644 index 0000000..92c1977 --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + KNEMCL + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..5fc46e3 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +encoding//src/knemcl_zh_CN.properties=UTF-8 +encoding//src/org/knemcl/uitool/CrashReport.java=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..937dddf --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,118 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.builder.annotationPath.allLocations=disabled +org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnull.secondary= +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary= +org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullable.secondary= +org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=19 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=19 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.APILeak=warning +org.eclipse.jdt.core.compiler.problem.annotatedTypeArgumentToUnannotated=info +org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.autoboxing=ignore +org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning +org.eclipse.jdt.core.compiler.problem.deadCode=warning +org.eclipse.jdt.core.compiler.problem.deprecation=warning +org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled +org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled +org.eclipse.jdt.core.compiler.problem.discouragedReference=warning +org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore +org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore +org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled +org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore +org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning +org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning +org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled +org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning +org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning +org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore +org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore +org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning +org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore +org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled +org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled +org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning +org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore +org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning +org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning +org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore +org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning +org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning +org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning +org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore +org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning +org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore +org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore +org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning +org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning +org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore +org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore +org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore +org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled +org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning +org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled +org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled +org.eclipse.jdt.core.compiler.problem.suppressWarningsNotFullyAnalysed=info +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled +org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore +org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning +org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning +org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled +org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning +org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning +org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore +org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning +org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning +org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled +org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info +org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore +org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore +org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore +org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled +org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedImport=warning +org.eclipse.jdt.core.compiler.problem.unusedLabel=warning +org.eclipse.jdt.core.compiler.problem.unusedLocal=warning +org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled +org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning +org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning +org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=19 diff --git a/JavaTUN.dll b/JavaTUN.dll new file mode 100644 index 0000000..352922f Binary files /dev/null and b/JavaTUN.dll differ diff --git a/agents/agnet-1.0-SNAPSHOT.jar b/agents/agnet-1.0-SNAPSHOT.jar new file mode 100644 index 0000000..8674601 Binary files /dev/null and b/agents/agnet-1.0-SNAPSHOT.jar differ diff --git a/agents/authlib-injector-1.2.3.jar b/agents/authlib-injector-1.2.3.jar new file mode 100644 index 0000000..30a5930 Binary files /dev/null and b/agents/authlib-injector-1.2.3.jar differ diff --git a/args.txt b/args.txt new file mode 100644 index 0000000..0cd0c66 --- /dev/null +++ b/args.txt @@ -0,0 +1,15 @@ +-XX:+UseZGC +-XX:+UnlockExperimentalVMOptions +-XX:+UseJVMCICompiler +-XX:MaxInlineLevel=32 +-XX:FreqInlineSize=1024 +-XX:MaxInlineSize=64 +-XX:InlineSmallCode=2048 +-XX:MinInliningThreshold=250 +-XX:MaxRecursiveInlineLevel=1 +-XX:AutoBoxCacheMax=2048 +-XX:+UseStringDeduplication +-XX:ReservedCodeCacheSize=512m +-Xverify:none +-Xnoclassgc +-XX:+ExplicitGCInvokesConcurrent diff --git a/bin/.gitignore b/bin/.gitignore new file mode 100644 index 0000000..5c74165 --- /dev/null +++ b/bin/.gitignore @@ -0,0 +1,4 @@ +/assets/ +/knemcl_en_US.properties +/knemcl_zh_CN.properties +/org/ diff --git a/fastcopy.dll b/fastcopy.dll new file mode 100644 index 0000000..7e08bef Binary files /dev/null and b/fastcopy.dll differ diff --git a/frpc/frpc_conf_00d11830-dbad-432b-80df-4401bcb4bfe3.ini b/frpc/frpc_conf_00d11830-dbad-432b-80df-4401bcb4bfe3.ini new file mode 100644 index 0000000..0317f0d --- /dev/null +++ b/frpc/frpc_conf_00d11830-dbad-432b-80df-4401bcb4bfe3.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 50022 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_02a53b18-4b0f-480e-a18a-e235f775781a.ini b/frpc/frpc_conf_02a53b18-4b0f-480e-a18a-e235f775781a.ini new file mode 100644 index 0000000..a87ccde --- /dev/null +++ b/frpc/frpc_conf_02a53b18-4b0f-480e-a18a-e235f775781a.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 52854 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_04fb473a-ab62-43bf-a607-fcf2ec234b6e.ini b/frpc/frpc_conf_04fb473a-ab62-43bf-a607-fcf2ec234b6e.ini new file mode 100644 index 0000000..8e0d93a --- /dev/null +++ b/frpc/frpc_conf_04fb473a-ab62-43bf-a607-fcf2ec234b6e.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 64905 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_0539d995-ef29-41d5-b92b-31f9c0b5d190.ini b/frpc/frpc_conf_0539d995-ef29-41d5-b92b-31f9c0b5d190.ini new file mode 100644 index 0000000..adb9b0e --- /dev/null +++ b/frpc/frpc_conf_0539d995-ef29-41d5-b92b-31f9c0b5d190.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 64840 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_055540fe-bb7f-49a5-8510-6621aaa7dfdf.ini b/frpc/frpc_conf_055540fe-bb7f-49a5-8510-6621aaa7dfdf.ini new file mode 100644 index 0000000..6b7cfae --- /dev/null +++ b/frpc/frpc_conf_055540fe-bb7f-49a5-8510-6621aaa7dfdf.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 60767 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_057eedf1-2969-40c5-8ebc-a8ef20502ba6.ini b/frpc/frpc_conf_057eedf1-2969-40c5-8ebc-a8ef20502ba6.ini new file mode 100644 index 0000000..40f869e --- /dev/null +++ b/frpc/frpc_conf_057eedf1-2969-40c5-8ebc-a8ef20502ba6.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 52362 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_05ab682d-085d-4b7b-8a02-d2a0b4819192.ini b/frpc/frpc_conf_05ab682d-085d-4b7b-8a02-d2a0b4819192.ini new file mode 100644 index 0000000..47a069a --- /dev/null +++ b/frpc/frpc_conf_05ab682d-085d-4b7b-8a02-d2a0b4819192.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 52798 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_06fcab69-a89c-4733-8582-8c0d32ccd07c.ini b/frpc/frpc_conf_06fcab69-a89c-4733-8582-8c0d32ccd07c.ini new file mode 100644 index 0000000..24870ad --- /dev/null +++ b/frpc/frpc_conf_06fcab69-a89c-4733-8582-8c0d32ccd07c.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 60591 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_071cc1d8-12d3-4767-8983-5f27e51aef11.ini b/frpc/frpc_conf_071cc1d8-12d3-4767-8983-5f27e51aef11.ini new file mode 100644 index 0000000..d61308a --- /dev/null +++ b/frpc/frpc_conf_071cc1d8-12d3-4767-8983-5f27e51aef11.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 63391 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_0739eab6-9c97-44fc-8e7b-3c5922530514.ini b/frpc/frpc_conf_0739eab6-9c97-44fc-8e7b-3c5922530514.ini new file mode 100644 index 0000000..2d4c6e6 --- /dev/null +++ b/frpc/frpc_conf_0739eab6-9c97-44fc-8e7b-3c5922530514.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 52714 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_0a8e73fb-72aa-4505-af03-359b043378df.ini b/frpc/frpc_conf_0a8e73fb-72aa-4505-af03-359b043378df.ini new file mode 100644 index 0000000..0e0ccc0 --- /dev/null +++ b/frpc/frpc_conf_0a8e73fb-72aa-4505-af03-359b043378df.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 62295 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_0b82978c-08be-494c-96d1-2bea778e07b8.ini b/frpc/frpc_conf_0b82978c-08be-494c-96d1-2bea778e07b8.ini new file mode 100644 index 0000000..e7c1640 --- /dev/null +++ b/frpc/frpc_conf_0b82978c-08be-494c-96d1-2bea778e07b8.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 55842 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_0e57c6ba-2000-4372-b937-b8d61b5d0330.ini b/frpc/frpc_conf_0e57c6ba-2000-4372-b937-b8d61b5d0330.ini new file mode 100644 index 0000000..235955d --- /dev/null +++ b/frpc/frpc_conf_0e57c6ba-2000-4372-b937-b8d61b5d0330.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 58910 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_0f08512e-8378-4448-9060-892fb46e62ab.ini b/frpc/frpc_conf_0f08512e-8378-4448-9060-892fb46e62ab.ini new file mode 100644 index 0000000..fcc064a --- /dev/null +++ b/frpc/frpc_conf_0f08512e-8378-4448-9060-892fb46e62ab.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 54826 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_0f75fb0c-c726-4c70-923c-99ea1b2eebc7.ini b/frpc/frpc_conf_0f75fb0c-c726-4c70-923c-99ea1b2eebc7.ini new file mode 100644 index 0000000..d224445 --- /dev/null +++ b/frpc/frpc_conf_0f75fb0c-c726-4c70-923c-99ea1b2eebc7.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 56650 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_114a8dae-bd44-4160-a364-48a6c9be3adb.ini b/frpc/frpc_conf_114a8dae-bd44-4160-a364-48a6c9be3adb.ini new file mode 100644 index 0000000..828c5aa --- /dev/null +++ b/frpc/frpc_conf_114a8dae-bd44-4160-a364-48a6c9be3adb.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 52677 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_1152c153-85c9-4aa4-90c2-7b41fc024294.ini b/frpc/frpc_conf_1152c153-85c9-4aa4-90c2-7b41fc024294.ini new file mode 100644 index 0000000..089831c --- /dev/null +++ b/frpc/frpc_conf_1152c153-85c9-4aa4-90c2-7b41fc024294.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 58504 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_11578984-ea65-4cc4-9eea-0abf119cb863.ini b/frpc/frpc_conf_11578984-ea65-4cc4-9eea-0abf119cb863.ini new file mode 100644 index 0000000..ebf484c --- /dev/null +++ b/frpc/frpc_conf_11578984-ea65-4cc4-9eea-0abf119cb863.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 64904 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_1197596e-bc4a-44c4-9a80-c79c124ee176.ini b/frpc/frpc_conf_1197596e-bc4a-44c4-9a80-c79c124ee176.ini new file mode 100644 index 0000000..05b120a --- /dev/null +++ b/frpc/frpc_conf_1197596e-bc4a-44c4-9a80-c79c124ee176.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 62731 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_14eeab9c-0fc0-4bf0-84ba-6aa98c364e6c.ini b/frpc/frpc_conf_14eeab9c-0fc0-4bf0-84ba-6aa98c364e6c.ini new file mode 100644 index 0000000..8399c79 --- /dev/null +++ b/frpc/frpc_conf_14eeab9c-0fc0-4bf0-84ba-6aa98c364e6c.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 57803 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_15a276dd-b835-4703-95d9-021fc0fceb20.ini b/frpc/frpc_conf_15a276dd-b835-4703-95d9-021fc0fceb20.ini new file mode 100644 index 0000000..2a1f026 --- /dev/null +++ b/frpc/frpc_conf_15a276dd-b835-4703-95d9-021fc0fceb20.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 61659 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_15aa9761-c7ac-45a2-ad71-5bfc93f83d4f.ini b/frpc/frpc_conf_15aa9761-c7ac-45a2-ad71-5bfc93f83d4f.ini new file mode 100644 index 0000000..0d817d0 --- /dev/null +++ b/frpc/frpc_conf_15aa9761-c7ac-45a2-ad71-5bfc93f83d4f.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 55841 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_166f1cbb-47bb-4ec3-be58-67e194678a1b.ini b/frpc/frpc_conf_166f1cbb-47bb-4ec3-be58-67e194678a1b.ini new file mode 100644 index 0000000..2ce5a83 --- /dev/null +++ b/frpc/frpc_conf_166f1cbb-47bb-4ec3-be58-67e194678a1b.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 59155 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_17a15e53-c3bb-43a0-87b6-f113c7215c86.ini b/frpc/frpc_conf_17a15e53-c3bb-43a0-87b6-f113c7215c86.ini new file mode 100644 index 0000000..f1945bc --- /dev/null +++ b/frpc/frpc_conf_17a15e53-c3bb-43a0-87b6-f113c7215c86.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 61324 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_199651b8-47bd-4016-a646-0e6310824eb7.ini b/frpc/frpc_conf_199651b8-47bd-4016-a646-0e6310824eb7.ini new file mode 100644 index 0000000..d10532a --- /dev/null +++ b/frpc/frpc_conf_199651b8-47bd-4016-a646-0e6310824eb7.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 52826 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_1a3db4f1-d62c-47b9-a639-8db6be718c56.ini b/frpc/frpc_conf_1a3db4f1-d62c-47b9-a639-8db6be718c56.ini new file mode 100644 index 0000000..288871a --- /dev/null +++ b/frpc/frpc_conf_1a3db4f1-d62c-47b9-a639-8db6be718c56.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 57461 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_1b1a08fb-ef2f-4388-ba57-f3db033209df.ini b/frpc/frpc_conf_1b1a08fb-ef2f-4388-ba57-f3db033209df.ini new file mode 100644 index 0000000..63db847 --- /dev/null +++ b/frpc/frpc_conf_1b1a08fb-ef2f-4388-ba57-f3db033209df.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 65139 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_1b1a6732-307d-4a43-9d88-52f35a258292.ini b/frpc/frpc_conf_1b1a6732-307d-4a43-9d88-52f35a258292.ini new file mode 100644 index 0000000..14b1165 --- /dev/null +++ b/frpc/frpc_conf_1b1a6732-307d-4a43-9d88-52f35a258292.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 65198 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_1bca8f5b-0ba9-4dad-829d-4587976a41ff.ini b/frpc/frpc_conf_1bca8f5b-0ba9-4dad-829d-4587976a41ff.ini new file mode 100644 index 0000000..104a516 --- /dev/null +++ b/frpc/frpc_conf_1bca8f5b-0ba9-4dad-829d-4587976a41ff.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 65224 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_1c7dec38-7eb5-4cb1-8a3d-cfb78ea50f8c.ini b/frpc/frpc_conf_1c7dec38-7eb5-4cb1-8a3d-cfb78ea50f8c.ini new file mode 100644 index 0000000..4b68d8c --- /dev/null +++ b/frpc/frpc_conf_1c7dec38-7eb5-4cb1-8a3d-cfb78ea50f8c.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 50949 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_1cc83fc7-8f42-4162-8c78-9cf181dd6257.ini b/frpc/frpc_conf_1cc83fc7-8f42-4162-8c78-9cf181dd6257.ini new file mode 100644 index 0000000..6d45c7b --- /dev/null +++ b/frpc/frpc_conf_1cc83fc7-8f42-4162-8c78-9cf181dd6257.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 57401 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_1e3740b8-cf21-4f5b-960e-9057474c7714.ini b/frpc/frpc_conf_1e3740b8-cf21-4f5b-960e-9057474c7714.ini new file mode 100644 index 0000000..67a0f4c --- /dev/null +++ b/frpc/frpc_conf_1e3740b8-cf21-4f5b-960e-9057474c7714.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 56412 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_1e47ac9e-3722-409a-8b99-e4ccf43a02cc.ini b/frpc/frpc_conf_1e47ac9e-3722-409a-8b99-e4ccf43a02cc.ini new file mode 100644 index 0000000..d7a2f4c --- /dev/null +++ b/frpc/frpc_conf_1e47ac9e-3722-409a-8b99-e4ccf43a02cc.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 57997 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_1f1a5e63-241b-46ba-b3a6-a353aa7f71ae.ini b/frpc/frpc_conf_1f1a5e63-241b-46ba-b3a6-a353aa7f71ae.ini new file mode 100644 index 0000000..17df949 --- /dev/null +++ b/frpc/frpc_conf_1f1a5e63-241b-46ba-b3a6-a353aa7f71ae.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 50214 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_1f7132ad-d40c-4721-94f3-aee992e4985a.ini b/frpc/frpc_conf_1f7132ad-d40c-4721-94f3-aee992e4985a.ini new file mode 100644 index 0000000..bfaa726 --- /dev/null +++ b/frpc/frpc_conf_1f7132ad-d40c-4721-94f3-aee992e4985a.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 53269 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_20617acd-f860-4dca-9b6b-e4d821a5f307.ini b/frpc/frpc_conf_20617acd-f860-4dca-9b6b-e4d821a5f307.ini new file mode 100644 index 0000000..b98df5c --- /dev/null +++ b/frpc/frpc_conf_20617acd-f860-4dca-9b6b-e4d821a5f307.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 65390 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_20ee3dd8-98c4-47f3-9273-1f65626cf29b.ini b/frpc/frpc_conf_20ee3dd8-98c4-47f3-9273-1f65626cf29b.ini new file mode 100644 index 0000000..6c3dcdd --- /dev/null +++ b/frpc/frpc_conf_20ee3dd8-98c4-47f3-9273-1f65626cf29b.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 50687 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_22adf4b2-9641-4d90-be7a-e497f0a3beae.ini b/frpc/frpc_conf_22adf4b2-9641-4d90-be7a-e497f0a3beae.ini new file mode 100644 index 0000000..aeba3a2 --- /dev/null +++ b/frpc/frpc_conf_22adf4b2-9641-4d90-be7a-e497f0a3beae.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 61105 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_230c7af6-b91c-4b91-a3a1-59671889e227.ini b/frpc/frpc_conf_230c7af6-b91c-4b91-a3a1-59671889e227.ini new file mode 100644 index 0000000..a1ed61c --- /dev/null +++ b/frpc/frpc_conf_230c7af6-b91c-4b91-a3a1-59671889e227.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 59011 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_233387dd-7621-4d13-a94e-2aea82e3f441.ini b/frpc/frpc_conf_233387dd-7621-4d13-a94e-2aea82e3f441.ini new file mode 100644 index 0000000..b4c3ee9 --- /dev/null +++ b/frpc/frpc_conf_233387dd-7621-4d13-a94e-2aea82e3f441.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 59246 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_25d63ac5-a47d-42a4-8a3e-04883f114965.ini b/frpc/frpc_conf_25d63ac5-a47d-42a4-8a3e-04883f114965.ini new file mode 100644 index 0000000..34996a9 --- /dev/null +++ b/frpc/frpc_conf_25d63ac5-a47d-42a4-8a3e-04883f114965.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 57504 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_2656287c-76dc-4cac-8841-94c82dd439fc.ini b/frpc/frpc_conf_2656287c-76dc-4cac-8841-94c82dd439fc.ini new file mode 100644 index 0000000..86d1ab0 --- /dev/null +++ b/frpc/frpc_conf_2656287c-76dc-4cac-8841-94c82dd439fc.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 51940 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_26b0c41e-e502-489f-94a7-cd8f0fcf660f.ini b/frpc/frpc_conf_26b0c41e-e502-489f-94a7-cd8f0fcf660f.ini new file mode 100644 index 0000000..33992b0 --- /dev/null +++ b/frpc/frpc_conf_26b0c41e-e502-489f-94a7-cd8f0fcf660f.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 57826 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_27824685-f817-47ce-adc1-a1a650f9f335.ini b/frpc/frpc_conf_27824685-f817-47ce-adc1-a1a650f9f335.ini new file mode 100644 index 0000000..81323fd --- /dev/null +++ b/frpc/frpc_conf_27824685-f817-47ce-adc1-a1a650f9f335.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 56565 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_2784ec51-0206-496c-aabb-db7cf747e65c.ini b/frpc/frpc_conf_2784ec51-0206-496c-aabb-db7cf747e65c.ini new file mode 100644 index 0000000..f9dc3a1 --- /dev/null +++ b/frpc/frpc_conf_2784ec51-0206-496c-aabb-db7cf747e65c.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 59496 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_2805ef3c-c53f-430a-8c37-38daed5bed1d.ini b/frpc/frpc_conf_2805ef3c-c53f-430a-8c37-38daed5bed1d.ini new file mode 100644 index 0000000..772ef45 --- /dev/null +++ b/frpc/frpc_conf_2805ef3c-c53f-430a-8c37-38daed5bed1d.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 51968 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_295ac36b-d570-4ef8-b170-8d90fb1d44f7.ini b/frpc/frpc_conf_295ac36b-d570-4ef8-b170-8d90fb1d44f7.ini new file mode 100644 index 0000000..ce739c4 --- /dev/null +++ b/frpc/frpc_conf_295ac36b-d570-4ef8-b170-8d90fb1d44f7.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 62984 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_2965f49f-75f0-4c28-bd7f-411030defcda.ini b/frpc/frpc_conf_2965f49f-75f0-4c28-bd7f-411030defcda.ini new file mode 100644 index 0000000..bd5eb5d --- /dev/null +++ b/frpc/frpc_conf_2965f49f-75f0-4c28-bd7f-411030defcda.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 57114 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_29edeaec-4c41-4b3f-91f6-c95816fb8345.ini b/frpc/frpc_conf_29edeaec-4c41-4b3f-91f6-c95816fb8345.ini new file mode 100644 index 0000000..90c842c --- /dev/null +++ b/frpc/frpc_conf_29edeaec-4c41-4b3f-91f6-c95816fb8345.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 57109 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_2a9da235-ebd4-444e-af9b-310a49704322.ini b/frpc/frpc_conf_2a9da235-ebd4-444e-af9b-310a49704322.ini new file mode 100644 index 0000000..aa2d59c --- /dev/null +++ b/frpc/frpc_conf_2a9da235-ebd4-444e-af9b-310a49704322.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 59497 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_2bb2d14d-1962-4f82-b5c4-25a5c324ae07.ini b/frpc/frpc_conf_2bb2d14d-1962-4f82-b5c4-25a5c324ae07.ini new file mode 100644 index 0000000..c0f530a --- /dev/null +++ b/frpc/frpc_conf_2bb2d14d-1962-4f82-b5c4-25a5c324ae07.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 59248 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_2bdc0ed7-2454-4198-85c3-548b03e9d598.ini b/frpc/frpc_conf_2bdc0ed7-2454-4198-85c3-548b03e9d598.ini new file mode 100644 index 0000000..b338acd --- /dev/null +++ b/frpc/frpc_conf_2bdc0ed7-2454-4198-85c3-548b03e9d598.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 55913 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_2d572e06-4582-4ac2-bf76-7f33b63ee658.ini b/frpc/frpc_conf_2d572e06-4582-4ac2-bf76-7f33b63ee658.ini new file mode 100644 index 0000000..ec17f9f --- /dev/null +++ b/frpc/frpc_conf_2d572e06-4582-4ac2-bf76-7f33b63ee658.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[53244530-d30b-4501-a224-cf601888daaa] +type = tcp +local_ip = 127.0.0.1 +local_port = 62144 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_2f33e949-1b30-4621-9b65-3096f3f2a33e.ini b/frpc/frpc_conf_2f33e949-1b30-4621-9b65-3096f3f2a33e.ini new file mode 100644 index 0000000..89feefd --- /dev/null +++ b/frpc/frpc_conf_2f33e949-1b30-4621-9b65-3096f3f2a33e.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 52351 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_2f725b91-51e0-4a00-97a8-5f2280ba9cb3.ini b/frpc/frpc_conf_2f725b91-51e0-4a00-97a8-5f2280ba9cb3.ini new file mode 100644 index 0000000..3b098f8 --- /dev/null +++ b/frpc/frpc_conf_2f725b91-51e0-4a00-97a8-5f2280ba9cb3.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[9127072d-5c94-46aa-8ce2-3d0f83aeabb8] +type = tcp +local_ip = 127.0.0.1 +local_port = 61752 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_2fd12959-ba81-4ea1-9e49-f50cd073e417.ini b/frpc/frpc_conf_2fd12959-ba81-4ea1-9e49-f50cd073e417.ini new file mode 100644 index 0000000..ee7d5cf --- /dev/null +++ b/frpc/frpc_conf_2fd12959-ba81-4ea1-9e49-f50cd073e417.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 59487 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_30164f2f-69a1-4568-af7d-d326a870ad18.ini b/frpc/frpc_conf_30164f2f-69a1-4568-af7d-d326a870ad18.ini new file mode 100644 index 0000000..9d572ef --- /dev/null +++ b/frpc/frpc_conf_30164f2f-69a1-4568-af7d-d326a870ad18.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 58466 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_308bb70d-7efc-4093-85ee-4fde3dc22812.ini b/frpc/frpc_conf_308bb70d-7efc-4093-85ee-4fde3dc22812.ini new file mode 100644 index 0000000..1c90ab2 --- /dev/null +++ b/frpc/frpc_conf_308bb70d-7efc-4093-85ee-4fde3dc22812.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 58503 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_308ce221-be69-4ed1-a7b1-fbc5aec1888d.ini b/frpc/frpc_conf_308ce221-be69-4ed1-a7b1-fbc5aec1888d.ini new file mode 100644 index 0000000..ce28a4c --- /dev/null +++ b/frpc/frpc_conf_308ce221-be69-4ed1-a7b1-fbc5aec1888d.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 63962 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_30cfde3d-2b58-4ca5-994b-925e5ed21658.ini b/frpc/frpc_conf_30cfde3d-2b58-4ca5-994b-925e5ed21658.ini new file mode 100644 index 0000000..8384195 --- /dev/null +++ b/frpc/frpc_conf_30cfde3d-2b58-4ca5-994b-925e5ed21658.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 50479 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_30e3ad95-1fbd-4705-8d9b-4ed7437a26c2.ini b/frpc/frpc_conf_30e3ad95-1fbd-4705-8d9b-4ed7437a26c2.ini new file mode 100644 index 0000000..90921b5 --- /dev/null +++ b/frpc/frpc_conf_30e3ad95-1fbd-4705-8d9b-4ed7437a26c2.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 58720 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_31985b74-ebc7-4c22-8cee-a04628c3aee4.ini b/frpc/frpc_conf_31985b74-ebc7-4c22-8cee-a04628c3aee4.ini new file mode 100644 index 0000000..d5c5ef0 --- /dev/null +++ b/frpc/frpc_conf_31985b74-ebc7-4c22-8cee-a04628c3aee4.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 62654 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_33d90280-bd67-4943-a277-09556533fbd7.ini b/frpc/frpc_conf_33d90280-bd67-4943-a277-09556533fbd7.ini new file mode 100644 index 0000000..e8d29e3 --- /dev/null +++ b/frpc/frpc_conf_33d90280-bd67-4943-a277-09556533fbd7.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 55846 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_355fc804-52a6-48d5-b3e9-245b67a637a8.ini b/frpc/frpc_conf_355fc804-52a6-48d5-b3e9-245b67a637a8.ini new file mode 100644 index 0000000..5cc281a --- /dev/null +++ b/frpc/frpc_conf_355fc804-52a6-48d5-b3e9-245b67a637a8.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 58935 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_35a9bf64-baa4-4231-aaeb-47a2249d804a.ini b/frpc/frpc_conf_35a9bf64-baa4-4231-aaeb-47a2249d804a.ini new file mode 100644 index 0000000..be32a86 --- /dev/null +++ b/frpc/frpc_conf_35a9bf64-baa4-4231-aaeb-47a2249d804a.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 49862 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_381fb93d-0652-44f6-be08-fe60106d2e75.ini b/frpc/frpc_conf_381fb93d-0652-44f6-be08-fe60106d2e75.ini new file mode 100644 index 0000000..2a35ee5 --- /dev/null +++ b/frpc/frpc_conf_381fb93d-0652-44f6-be08-fe60106d2e75.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 50519 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_3890a56d-5e9b-48d0-acd1-90587f2fe53b.ini b/frpc/frpc_conf_3890a56d-5e9b-48d0-acd1-90587f2fe53b.ini new file mode 100644 index 0000000..d1491c7 --- /dev/null +++ b/frpc/frpc_conf_3890a56d-5e9b-48d0-acd1-90587f2fe53b.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 50964 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_38b6358a-291d-4809-9a55-42c5ef5078a8.ini b/frpc/frpc_conf_38b6358a-291d-4809-9a55-42c5ef5078a8.ini new file mode 100644 index 0000000..20c70cb --- /dev/null +++ b/frpc/frpc_conf_38b6358a-291d-4809-9a55-42c5ef5078a8.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 52159 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_39358b03-59d7-4768-b2d0-d28452dbf517.ini b/frpc/frpc_conf_39358b03-59d7-4768-b2d0-d28452dbf517.ini new file mode 100644 index 0000000..fa781e1 --- /dev/null +++ b/frpc/frpc_conf_39358b03-59d7-4768-b2d0-d28452dbf517.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 59224 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_3a3cc362-6181-4100-9b6d-a8854e5b172d.ini b/frpc/frpc_conf_3a3cc362-6181-4100-9b6d-a8854e5b172d.ini new file mode 100644 index 0000000..dc5bc0b --- /dev/null +++ b/frpc/frpc_conf_3a3cc362-6181-4100-9b6d-a8854e5b172d.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 65346 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_3a7fb95e-34c7-4ff1-9f2b-cce8ef4408ad.ini b/frpc/frpc_conf_3a7fb95e-34c7-4ff1-9f2b-cce8ef4408ad.ini new file mode 100644 index 0000000..cd34092 --- /dev/null +++ b/frpc/frpc_conf_3a7fb95e-34c7-4ff1-9f2b-cce8ef4408ad.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 63961 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_3aad1163-f8ce-4651-9fce-09f616afa2c5.ini b/frpc/frpc_conf_3aad1163-f8ce-4651-9fce-09f616afa2c5.ini new file mode 100644 index 0000000..5d4a3d9 --- /dev/null +++ b/frpc/frpc_conf_3aad1163-f8ce-4651-9fce-09f616afa2c5.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 52782 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_3b6a9c93-aebd-4c0d-b855-1dccec4c6058.ini b/frpc/frpc_conf_3b6a9c93-aebd-4c0d-b855-1dccec4c6058.ini new file mode 100644 index 0000000..a6c3a98 --- /dev/null +++ b/frpc/frpc_conf_3b6a9c93-aebd-4c0d-b855-1dccec4c6058.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 59097 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_3bbc4a58-4e18-46c2-b097-45471c85f085.ini b/frpc/frpc_conf_3bbc4a58-4e18-46c2-b097-45471c85f085.ini new file mode 100644 index 0000000..5a67b11 --- /dev/null +++ b/frpc/frpc_conf_3bbc4a58-4e18-46c2-b097-45471c85f085.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 49747 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_3c122ef1-76be-4cef-9dcd-a56915d4c4b3.ini b/frpc/frpc_conf_3c122ef1-76be-4cef-9dcd-a56915d4c4b3.ini new file mode 100644 index 0000000..9f689de --- /dev/null +++ b/frpc/frpc_conf_3c122ef1-76be-4cef-9dcd-a56915d4c4b3.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 52383 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_3cf900d4-2b90-4fc4-a602-f64de2b520b7.ini b/frpc/frpc_conf_3cf900d4-2b90-4fc4-a602-f64de2b520b7.ini new file mode 100644 index 0000000..1392aff --- /dev/null +++ b/frpc/frpc_conf_3cf900d4-2b90-4fc4-a602-f64de2b520b7.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[a14a758d-d558-45dd-b8e5-077305d0b911] +type = tcp +local_ip = 127.0.0.1 +local_port = 56745 +remote_port = 49970 + + diff --git a/frpc/frpc_conf_3db57e4d-d55a-4434-8eeb-28343d65aef0.ini b/frpc/frpc_conf_3db57e4d-d55a-4434-8eeb-28343d65aef0.ini new file mode 100644 index 0000000..01cddbe --- /dev/null +++ b/frpc/frpc_conf_3db57e4d-d55a-4434-8eeb-28343d65aef0.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 65225 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_3ee6779e-8c39-420c-b089-dc8f500d083e.ini b/frpc/frpc_conf_3ee6779e-8c39-420c-b089-dc8f500d083e.ini new file mode 100644 index 0000000..baf24d0 --- /dev/null +++ b/frpc/frpc_conf_3ee6779e-8c39-420c-b089-dc8f500d083e.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 58978 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_40170997-c516-42db-bbda-c618d64a9781.ini b/frpc/frpc_conf_40170997-c516-42db-bbda-c618d64a9781.ini new file mode 100644 index 0000000..f852374 --- /dev/null +++ b/frpc/frpc_conf_40170997-c516-42db-bbda-c618d64a9781.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 59162 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_414ed434-84e8-4755-ae66-c37977f79412.ini b/frpc/frpc_conf_414ed434-84e8-4755-ae66-c37977f79412.ini new file mode 100644 index 0000000..732c8f9 --- /dev/null +++ b/frpc/frpc_conf_414ed434-84e8-4755-ae66-c37977f79412.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 49256 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_42079d14-b1c8-42c6-ae7d-ad22371d44cb.ini b/frpc/frpc_conf_42079d14-b1c8-42c6-ae7d-ad22371d44cb.ini new file mode 100644 index 0000000..e671e05 --- /dev/null +++ b/frpc/frpc_conf_42079d14-b1c8-42c6-ae7d-ad22371d44cb.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 52363 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_43070b7a-0d26-42e2-86ac-82a90165912b.ini b/frpc/frpc_conf_43070b7a-0d26-42e2-86ac-82a90165912b.ini new file mode 100644 index 0000000..fecc3d2 --- /dev/null +++ b/frpc/frpc_conf_43070b7a-0d26-42e2-86ac-82a90165912b.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 62065 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_43336774-d42f-4b87-9eed-6145c9e62add.ini b/frpc/frpc_conf_43336774-d42f-4b87-9eed-6145c9e62add.ini new file mode 100644 index 0000000..df119af --- /dev/null +++ b/frpc/frpc_conf_43336774-d42f-4b87-9eed-6145c9e62add.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[cf46fe08-21e5-42a3-af10-8c1733babcb0] +type = tcp +local_ip = 127.0.0.1 +local_port = 58666 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_438eaeeb-6d46-4669-a01f-ec6608e99117.ini b/frpc/frpc_conf_438eaeeb-6d46-4669-a01f-ec6608e99117.ini new file mode 100644 index 0000000..c85c77f --- /dev/null +++ b/frpc/frpc_conf_438eaeeb-6d46-4669-a01f-ec6608e99117.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 49875 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_43fdbc70-a557-4b50-b3a4-bc24d087903d.ini b/frpc/frpc_conf_43fdbc70-a557-4b50-b3a4-bc24d087903d.ini new file mode 100644 index 0000000..e3080db --- /dev/null +++ b/frpc/frpc_conf_43fdbc70-a557-4b50-b3a4-bc24d087903d.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 63914 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_442b7c4f-3601-46f1-8052-a0705e757005.ini b/frpc/frpc_conf_442b7c4f-3601-46f1-8052-a0705e757005.ini new file mode 100644 index 0000000..32c280c --- /dev/null +++ b/frpc/frpc_conf_442b7c4f-3601-46f1-8052-a0705e757005.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 64839 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_4456685b-0f9f-47ae-9a48-06d2c0a7720a.ini b/frpc/frpc_conf_4456685b-0f9f-47ae-9a48-06d2c0a7720a.ini new file mode 100644 index 0000000..c645c14 --- /dev/null +++ b/frpc/frpc_conf_4456685b-0f9f-47ae-9a48-06d2c0a7720a.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 64628 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_44a54284-34a6-4c08-bf39-f98d32848e09.ini b/frpc/frpc_conf_44a54284-34a6-4c08-bf39-f98d32848e09.ini new file mode 100644 index 0000000..d552b60 --- /dev/null +++ b/frpc/frpc_conf_44a54284-34a6-4c08-bf39-f98d32848e09.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 55847 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_44ffdd6b-0afe-41b6-bcc0-6e090c1abb41.ini b/frpc/frpc_conf_44ffdd6b-0afe-41b6-bcc0-6e090c1abb41.ini new file mode 100644 index 0000000..ae9b6dd --- /dev/null +++ b/frpc/frpc_conf_44ffdd6b-0afe-41b6-bcc0-6e090c1abb41.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 57802 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_459f0c7b-de5a-4528-b5b5-a036a174280e.ini b/frpc/frpc_conf_459f0c7b-de5a-4528-b5b5-a036a174280e.ini new file mode 100644 index 0000000..2edf959 --- /dev/null +++ b/frpc/frpc_conf_459f0c7b-de5a-4528-b5b5-a036a174280e.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[fd688cfa-cb8e-456d-9ec9-1af15ac1fc7d] +type = tcp +local_ip = 127.0.0.1 +local_port = 61547 +remote_port = 49970 + + diff --git a/frpc/frpc_conf_45dc0a2c-d220-4214-a468-b9455641799c.ini b/frpc/frpc_conf_45dc0a2c-d220-4214-a468-b9455641799c.ini new file mode 100644 index 0000000..6e8338b --- /dev/null +++ b/frpc/frpc_conf_45dc0a2c-d220-4214-a468-b9455641799c.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 65087 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_46b5fec4-07e5-4646-bde6-705026d474e1.ini b/frpc/frpc_conf_46b5fec4-07e5-4646-bde6-705026d474e1.ini new file mode 100644 index 0000000..a4fb99c --- /dev/null +++ b/frpc/frpc_conf_46b5fec4-07e5-4646-bde6-705026d474e1.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 55767 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_48dd044d-28fd-493b-84bb-9ac8e13c2a86.ini b/frpc/frpc_conf_48dd044d-28fd-493b-84bb-9ac8e13c2a86.ini new file mode 100644 index 0000000..caeac17 --- /dev/null +++ b/frpc/frpc_conf_48dd044d-28fd-493b-84bb-9ac8e13c2a86.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 52758 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_48df39e5-47a6-4f5c-b03a-387640430dfb.ini b/frpc/frpc_conf_48df39e5-47a6-4f5c-b03a-387640430dfb.ini new file mode 100644 index 0000000..a36a76c --- /dev/null +++ b/frpc/frpc_conf_48df39e5-47a6-4f5c-b03a-387640430dfb.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 51955 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_497c6e33-aa59-4b9e-8e99-41d55a517637.ini b/frpc/frpc_conf_497c6e33-aa59-4b9e-8e99-41d55a517637.ini new file mode 100644 index 0000000..91adab1 --- /dev/null +++ b/frpc/frpc_conf_497c6e33-aa59-4b9e-8e99-41d55a517637.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 64372 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_4a6b2b4f-5f5c-4153-98fe-f1aa4acef5f0.ini b/frpc/frpc_conf_4a6b2b4f-5f5c-4153-98fe-f1aa4acef5f0.ini new file mode 100644 index 0000000..5c1b495 --- /dev/null +++ b/frpc/frpc_conf_4a6b2b4f-5f5c-4153-98fe-f1aa4acef5f0.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 54807 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_4b03043b-9115-4d5d-97a3-81d1b4924b86.ini b/frpc/frpc_conf_4b03043b-9115-4d5d-97a3-81d1b4924b86.ini new file mode 100644 index 0000000..8ff29af --- /dev/null +++ b/frpc/frpc_conf_4b03043b-9115-4d5d-97a3-81d1b4924b86.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 54869 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_4b573f6b-0526-4e32-92aa-307acf5d63ef.ini b/frpc/frpc_conf_4b573f6b-0526-4e32-92aa-307acf5d63ef.ini new file mode 100644 index 0000000..5c3f4c9 --- /dev/null +++ b/frpc/frpc_conf_4b573f6b-0526-4e32-92aa-307acf5d63ef.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 58064 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_4bb922a6-b3fe-44de-85be-07311bf5148f.ini b/frpc/frpc_conf_4bb922a6-b3fe-44de-85be-07311bf5148f.ini new file mode 100644 index 0000000..a586528 --- /dev/null +++ b/frpc/frpc_conf_4bb922a6-b3fe-44de-85be-07311bf5148f.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 63898 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_4c4faaf3-1923-421f-b10b-516922e46afb.ini b/frpc/frpc_conf_4c4faaf3-1923-421f-b10b-516922e46afb.ini new file mode 100644 index 0000000..0ee68da --- /dev/null +++ b/frpc/frpc_conf_4c4faaf3-1923-421f-b10b-516922e46afb.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 57095 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_4d135dcf-d665-4bc4-ab13-59d881fd32e5.ini b/frpc/frpc_conf_4d135dcf-d665-4bc4-ab13-59d881fd32e5.ini new file mode 100644 index 0000000..311fa0a --- /dev/null +++ b/frpc/frpc_conf_4d135dcf-d665-4bc4-ab13-59d881fd32e5.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 53268 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_4d2dbb7c-7957-435e-ac77-a11407b64591.ini b/frpc/frpc_conf_4d2dbb7c-7957-435e-ac77-a11407b64591.ini new file mode 100644 index 0000000..5c01e5d --- /dev/null +++ b/frpc/frpc_conf_4d2dbb7c-7957-435e-ac77-a11407b64591.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 50520 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_4db5ce14-80cf-4d13-99c0-496b65de4f16.ini b/frpc/frpc_conf_4db5ce14-80cf-4d13-99c0-496b65de4f16.ini new file mode 100644 index 0000000..63965a0 --- /dev/null +++ b/frpc/frpc_conf_4db5ce14-80cf-4d13-99c0-496b65de4f16.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 60590 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_4e1d408a-a229-4d7c-8d12-2a8e2f924092.ini b/frpc/frpc_conf_4e1d408a-a229-4d7c-8d12-2a8e2f924092.ini new file mode 100644 index 0000000..2014cbb --- /dev/null +++ b/frpc/frpc_conf_4e1d408a-a229-4d7c-8d12-2a8e2f924092.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 51240 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_4e5c3b9f-4b7e-49d6-93d3-bbe4eaf8c1a3.ini b/frpc/frpc_conf_4e5c3b9f-4b7e-49d6-93d3-bbe4eaf8c1a3.ini new file mode 100644 index 0000000..c1caab2 --- /dev/null +++ b/frpc/frpc_conf_4e5c3b9f-4b7e-49d6-93d3-bbe4eaf8c1a3.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 52348 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_4e931ceb-a9c7-4d4d-a291-95a9ef0188d7.ini b/frpc/frpc_conf_4e931ceb-a9c7-4d4d-a291-95a9ef0188d7.ini new file mode 100644 index 0000000..8551ba5 --- /dev/null +++ b/frpc/frpc_conf_4e931ceb-a9c7-4d4d-a291-95a9ef0188d7.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 52700 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_514bd18d-73de-46b0-98cb-f64dfd434cf7.ini b/frpc/frpc_conf_514bd18d-73de-46b0-98cb-f64dfd434cf7.ini new file mode 100644 index 0000000..b3fe815 --- /dev/null +++ b/frpc/frpc_conf_514bd18d-73de-46b0-98cb-f64dfd434cf7.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 65140 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_51e29381-02c5-44f2-9b20-e36c42f03f41.ini b/frpc/frpc_conf_51e29381-02c5-44f2-9b20-e36c42f03f41.ini new file mode 100644 index 0000000..07ede6f --- /dev/null +++ b/frpc/frpc_conf_51e29381-02c5-44f2-9b20-e36c42f03f41.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 51136 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_520c94d2-1a12-48bc-b4e0-336efbd9853b.ini b/frpc/frpc_conf_520c94d2-1a12-48bc-b4e0-336efbd9853b.ini new file mode 100644 index 0000000..d6f255b --- /dev/null +++ b/frpc/frpc_conf_520c94d2-1a12-48bc-b4e0-336efbd9853b.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 65307 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_53905bcc-d12b-431f-8be1-7be209a0cef5.ini b/frpc/frpc_conf_53905bcc-d12b-431f-8be1-7be209a0cef5.ini new file mode 100644 index 0000000..c122041 --- /dev/null +++ b/frpc/frpc_conf_53905bcc-d12b-431f-8be1-7be209a0cef5.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 57402 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_5489d2da-463a-4768-a9c1-88edd2370262.ini b/frpc/frpc_conf_5489d2da-463a-4768-a9c1-88edd2370262.ini new file mode 100644 index 0000000..a623960 --- /dev/null +++ b/frpc/frpc_conf_5489d2da-463a-4768-a9c1-88edd2370262.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 58165 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_56ae1ce3-c281-4216-a607-23b760e4a368.ini b/frpc/frpc_conf_56ae1ce3-c281-4216-a607-23b760e4a368.ini new file mode 100644 index 0000000..7281d59 --- /dev/null +++ b/frpc/frpc_conf_56ae1ce3-c281-4216-a607-23b760e4a368.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 59697 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_571c86ef-7d2a-4b71-b570-2671b094092b.ini b/frpc/frpc_conf_571c86ef-7d2a-4b71-b570-2671b094092b.ini new file mode 100644 index 0000000..fb85150 --- /dev/null +++ b/frpc/frpc_conf_571c86ef-7d2a-4b71-b570-2671b094092b.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 54187 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_58511e22-7b88-471c-b869-c5a9c2848c1c.ini b/frpc/frpc_conf_58511e22-7b88-471c-b869-c5a9c2848c1c.ini new file mode 100644 index 0000000..eb69ce8 --- /dev/null +++ b/frpc/frpc_conf_58511e22-7b88-471c-b869-c5a9c2848c1c.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 58936 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_5866f6a9-b29b-41f0-9ce3-2d3b5c6c919d.ini b/frpc/frpc_conf_5866f6a9-b29b-41f0-9ce3-2d3b5c6c919d.ini new file mode 100644 index 0000000..70e2637 --- /dev/null +++ b/frpc/frpc_conf_5866f6a9-b29b-41f0-9ce3-2d3b5c6c919d.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 60474 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_59a17921-05e6-4ba3-8871-0e85ee0adb7d.ini b/frpc/frpc_conf_59a17921-05e6-4ba3-8871-0e85ee0adb7d.ini new file mode 100644 index 0000000..356ef70 --- /dev/null +++ b/frpc/frpc_conf_59a17921-05e6-4ba3-8871-0e85ee0adb7d.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 52384 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_5b81d784-5aa4-42b5-93d2-a65de3292249.ini b/frpc/frpc_conf_5b81d784-5aa4-42b5-93d2-a65de3292249.ini new file mode 100644 index 0000000..d475790 --- /dev/null +++ b/frpc/frpc_conf_5b81d784-5aa4-42b5-93d2-a65de3292249.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 51967 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_5b977808-e13f-4e82-9d95-c4e625d24cf1.ini b/frpc/frpc_conf_5b977808-e13f-4e82-9d95-c4e625d24cf1.ini new file mode 100644 index 0000000..6a92a17 --- /dev/null +++ b/frpc/frpc_conf_5b977808-e13f-4e82-9d95-c4e625d24cf1.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 52797 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_5cbd6813-cc08-4436-8e3d-7a8d6a70a87e.ini b/frpc/frpc_conf_5cbd6813-cc08-4436-8e3d-7a8d6a70a87e.ini new file mode 100644 index 0000000..7d9f8e7 --- /dev/null +++ b/frpc/frpc_conf_5cbd6813-cc08-4436-8e3d-7a8d6a70a87e.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 49215 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_5dbb52ae-54b1-41b1-bbfd-188a5728cb7d.ini b/frpc/frpc_conf_5dbb52ae-54b1-41b1-bbfd-188a5728cb7d.ini new file mode 100644 index 0000000..34a7687 --- /dev/null +++ b/frpc/frpc_conf_5dbb52ae-54b1-41b1-bbfd-188a5728cb7d.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 61573 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_5dc7d585-8ac7-47f1-8632-04eea45fa864.ini b/frpc/frpc_conf_5dc7d585-8ac7-47f1-8632-04eea45fa864.ini new file mode 100644 index 0000000..e0e6abe --- /dev/null +++ b/frpc/frpc_conf_5dc7d585-8ac7-47f1-8632-04eea45fa864.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 63915 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_5de69e0c-0999-4888-8a17-a675c011f692.ini b/frpc/frpc_conf_5de69e0c-0999-4888-8a17-a675c011f692.ini new file mode 100644 index 0000000..f76d236 --- /dev/null +++ b/frpc/frpc_conf_5de69e0c-0999-4888-8a17-a675c011f692.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 57825 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_5e058b55-359c-438d-9ed2-09df9d3d84f1.ini b/frpc/frpc_conf_5e058b55-359c-438d-9ed2-09df9d3d84f1.ini new file mode 100644 index 0000000..92fcf94 --- /dev/null +++ b/frpc/frpc_conf_5e058b55-359c-438d-9ed2-09df9d3d84f1.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 59219 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_5e7ba096-382c-40e4-870d-0335e05174fb.ini b/frpc/frpc_conf_5e7ba096-382c-40e4-870d-0335e05174fb.ini new file mode 100644 index 0000000..5076033 --- /dev/null +++ b/frpc/frpc_conf_5e7ba096-382c-40e4-870d-0335e05174fb.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 62064 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_61887504-6318-49ed-93f3-1c7d9b5b33d3.ini b/frpc/frpc_conf_61887504-6318-49ed-93f3-1c7d9b5b33d3.ini new file mode 100644 index 0000000..2edd94c --- /dev/null +++ b/frpc/frpc_conf_61887504-6318-49ed-93f3-1c7d9b5b33d3.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 59223 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_61ca4019-7a75-4c7b-aed4-fcad38af6b2f.ini b/frpc/frpc_conf_61ca4019-7a75-4c7b-aed4-fcad38af6b2f.ini new file mode 100644 index 0000000..8e18766 --- /dev/null +++ b/frpc/frpc_conf_61ca4019-7a75-4c7b-aed4-fcad38af6b2f.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 58721 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_6221ac4d-bdd9-4502-a8a0-bdca6292df71.ini b/frpc/frpc_conf_6221ac4d-bdd9-4502-a8a0-bdca6292df71.ini new file mode 100644 index 0000000..953c935 --- /dev/null +++ b/frpc/frpc_conf_6221ac4d-bdd9-4502-a8a0-bdca6292df71.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 64071 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_62898cc0-864f-47dd-bbe7-7c066cb1481e.ini b/frpc/frpc_conf_62898cc0-864f-47dd-bbe7-7c066cb1481e.ini new file mode 100644 index 0000000..6d80c82 --- /dev/null +++ b/frpc/frpc_conf_62898cc0-864f-47dd-bbe7-7c066cb1481e.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 52349 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_636781fb-6015-4bd4-bcd3-d42274ab8459.ini b/frpc/frpc_conf_636781fb-6015-4bd4-bcd3-d42274ab8459.ini new file mode 100644 index 0000000..d5046dd --- /dev/null +++ b/frpc/frpc_conf_636781fb-6015-4bd4-bcd3-d42274ab8459.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 59430 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_63a7a3ae-5e73-4932-b935-c903909c2133.ini b/frpc/frpc_conf_63a7a3ae-5e73-4932-b935-c903909c2133.ini new file mode 100644 index 0000000..78a4b09 --- /dev/null +++ b/frpc/frpc_conf_63a7a3ae-5e73-4932-b935-c903909c2133.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 57327 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_644e0326-8130-47f4-8f68-1b697847f5ff.ini b/frpc/frpc_conf_644e0326-8130-47f4-8f68-1b697847f5ff.ini new file mode 100644 index 0000000..5bbc8fe --- /dev/null +++ b/frpc/frpc_conf_644e0326-8130-47f4-8f68-1b697847f5ff.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 58253 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_64ccaf6e-0992-442f-aba5-18a77e154e83.ini b/frpc/frpc_conf_64ccaf6e-0992-442f-aba5-18a77e154e83.ini new file mode 100644 index 0000000..401c547 --- /dev/null +++ b/frpc/frpc_conf_64ccaf6e-0992-442f-aba5-18a77e154e83.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 49214 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_67841d1b-bac6-4a57-99f5-c7708fcf2ef6.ini b/frpc/frpc_conf_67841d1b-bac6-4a57-99f5-c7708fcf2ef6.ini new file mode 100644 index 0000000..ac0cd13 --- /dev/null +++ b/frpc/frpc_conf_67841d1b-bac6-4a57-99f5-c7708fcf2ef6.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 56411 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_679cb9b6-d9ad-4475-be87-94ea1f065ed7.ini b/frpc/frpc_conf_679cb9b6-d9ad-4475-be87-94ea1f065ed7.ini new file mode 100644 index 0000000..1e40102 --- /dev/null +++ b/frpc/frpc_conf_679cb9b6-d9ad-4475-be87-94ea1f065ed7.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 54040 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_6805e3a3-c6e3-478d-9413-8cc2210d5435.ini b/frpc/frpc_conf_6805e3a3-c6e3-478d-9413-8cc2210d5435.ini new file mode 100644 index 0000000..e276b29 --- /dev/null +++ b/frpc/frpc_conf_6805e3a3-c6e3-478d-9413-8cc2210d5435.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 51241 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_6938df66-f3e7-482d-9fa3-006ce40bbfe0.ini b/frpc/frpc_conf_6938df66-f3e7-482d-9fa3-006ce40bbfe0.ini new file mode 100644 index 0000000..6bda283 --- /dev/null +++ b/frpc/frpc_conf_6938df66-f3e7-482d-9fa3-006ce40bbfe0.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 63939 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_695f608a-f186-495f-ab4b-ffbea9813bfd.ini b/frpc/frpc_conf_695f608a-f186-495f-ab4b-ffbea9813bfd.ini new file mode 100644 index 0000000..997a0e4 --- /dev/null +++ b/frpc/frpc_conf_695f608a-f186-495f-ab4b-ffbea9813bfd.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 56564 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_697a2bdc-ca40-455c-b662-87be7a7160b0.ini b/frpc/frpc_conf_697a2bdc-ca40-455c-b662-87be7a7160b0.ini new file mode 100644 index 0000000..35c7323 --- /dev/null +++ b/frpc/frpc_conf_697a2bdc-ca40-455c-b662-87be7a7160b0.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[9c827ab7-39ea-43ff-a67e-4e07b714e7a8] +type = tcp +local_ip = 127.0.0.1 +local_port = 49323 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_69d255e2-8457-4ed8-b07e-c328687f161e.ini b/frpc/frpc_conf_69d255e2-8457-4ed8-b07e-c328687f161e.ini new file mode 100644 index 0000000..15114cc --- /dev/null +++ b/frpc/frpc_conf_69d255e2-8457-4ed8-b07e-c328687f161e.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 56033 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_6a28ff26-b4a7-43b4-8d31-fa7829b882e3.ini b/frpc/frpc_conf_6a28ff26-b4a7-43b4-8d31-fa7829b882e3.ini new file mode 100644 index 0000000..0ef9d1e --- /dev/null +++ b/frpc/frpc_conf_6a28ff26-b4a7-43b4-8d31-fa7829b882e3.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 59346 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_6b1e1bf6-b7cf-4bb9-87ac-0c82a5d971d5.ini b/frpc/frpc_conf_6b1e1bf6-b7cf-4bb9-87ac-0c82a5d971d5.ini new file mode 100644 index 0000000..1cdda5f --- /dev/null +++ b/frpc/frpc_conf_6b1e1bf6-b7cf-4bb9-87ac-0c82a5d971d5.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 60590 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_6b34c5d7-b9ba-4ee2-ae24-85235f267717.ini b/frpc/frpc_conf_6b34c5d7-b9ba-4ee2-ae24-85235f267717.ini new file mode 100644 index 0000000..d826f17 --- /dev/null +++ b/frpc/frpc_conf_6b34c5d7-b9ba-4ee2-ae24-85235f267717.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 61721 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_6c404a77-a928-43a1-802b-f61f91b76b47.ini b/frpc/frpc_conf_6c404a77-a928-43a1-802b-f61f91b76b47.ini new file mode 100644 index 0000000..06e4fa0 --- /dev/null +++ b/frpc/frpc_conf_6c404a77-a928-43a1-802b-f61f91b76b47.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 58409 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_6c6c05cd-4922-4791-b4ca-5c456f4afea4.ini b/frpc/frpc_conf_6c6c05cd-4922-4791-b4ca-5c456f4afea4.ini new file mode 100644 index 0000000..95d1df8 --- /dev/null +++ b/frpc/frpc_conf_6c6c05cd-4922-4791-b4ca-5c456f4afea4.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 61658 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_6d0a0d6d-19bf-4304-956f-d82424d36829.ini b/frpc/frpc_conf_6d0a0d6d-19bf-4304-956f-d82424d36829.ini new file mode 100644 index 0000000..cde5518 --- /dev/null +++ b/frpc/frpc_conf_6d0a0d6d-19bf-4304-956f-d82424d36829.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 52160 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_6d6d5afa-1bf9-4eeb-938c-756786eb2e60.ini b/frpc/frpc_conf_6d6d5afa-1bf9-4eeb-938c-756786eb2e60.ini new file mode 100644 index 0000000..ba25c27 --- /dev/null +++ b/frpc/frpc_conf_6d6d5afa-1bf9-4eeb-938c-756786eb2e60.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 60125 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_6d7661c0-dcf6-4791-993e-4398778822b0.ini b/frpc/frpc_conf_6d7661c0-dcf6-4791-993e-4398778822b0.ini new file mode 100644 index 0000000..34602e2 --- /dev/null +++ b/frpc/frpc_conf_6d7661c0-dcf6-4791-993e-4398778822b0.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 59247 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_6df80cd8-a4b6-4804-8381-a23aa73e1c7f.ini b/frpc/frpc_conf_6df80cd8-a4b6-4804-8381-a23aa73e1c7f.ini new file mode 100644 index 0000000..d390ff4 --- /dev/null +++ b/frpc/frpc_conf_6df80cd8-a4b6-4804-8381-a23aa73e1c7f.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 63840 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_6e04c508-dcfa-4222-9f91-09b1ed81d9c6.ini b/frpc/frpc_conf_6e04c508-dcfa-4222-9f91-09b1ed81d9c6.ini new file mode 100644 index 0000000..5a7f961 --- /dev/null +++ b/frpc/frpc_conf_6e04c508-dcfa-4222-9f91-09b1ed81d9c6.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 54029 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_6e5fc9a7-3299-4d03-8bbd-38cd1cea00f2.ini b/frpc/frpc_conf_6e5fc9a7-3299-4d03-8bbd-38cd1cea00f2.ini new file mode 100644 index 0000000..134c56e --- /dev/null +++ b/frpc/frpc_conf_6e5fc9a7-3299-4d03-8bbd-38cd1cea00f2.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 49874 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_6ea40708-87e2-439b-8838-6632920f57f7.ini b/frpc/frpc_conf_6ea40708-87e2-439b-8838-6632920f57f7.ini new file mode 100644 index 0000000..b340b33 --- /dev/null +++ b/frpc/frpc_conf_6ea40708-87e2-439b-8838-6632920f57f7.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 58164 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_6f1bf72c-b53b-4243-8cce-ada4fad048f0.ini b/frpc/frpc_conf_6f1bf72c-b53b-4243-8cce-ada4fad048f0.ini new file mode 100644 index 0000000..e731b6e --- /dev/null +++ b/frpc/frpc_conf_6f1bf72c-b53b-4243-8cce-ada4fad048f0.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 59587 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_6f344492-c187-44f4-9e12-625960bbf24e.ini b/frpc/frpc_conf_6f344492-c187-44f4-9e12-625960bbf24e.ini new file mode 100644 index 0000000..23036f2 --- /dev/null +++ b/frpc/frpc_conf_6f344492-c187-44f4-9e12-625960bbf24e.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 61560 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_6ffea443-5a01-4a3b-b31a-38db87d8c598.ini b/frpc/frpc_conf_6ffea443-5a01-4a3b-b31a-38db87d8c598.ini new file mode 100644 index 0000000..f691ed9 --- /dev/null +++ b/frpc/frpc_conf_6ffea443-5a01-4a3b-b31a-38db87d8c598.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 50131 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_702ed4c3-3850-4263-8b5c-91ceee6b6820.ini b/frpc/frpc_conf_702ed4c3-3850-4263-8b5c-91ceee6b6820.ini new file mode 100644 index 0000000..cc563ef --- /dev/null +++ b/frpc/frpc_conf_702ed4c3-3850-4263-8b5c-91ceee6b6820.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[c2ac950e-417d-43e8-835e-365af0af97a6] +type = tcp +local_ip = 127.0.0.1 +local_port = 54128 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_711114bb-798c-4240-a93d-c9a5c0318754.ini b/frpc/frpc_conf_711114bb-798c-4240-a93d-c9a5c0318754.ini new file mode 100644 index 0000000..cc30719 --- /dev/null +++ b/frpc/frpc_conf_711114bb-798c-4240-a93d-c9a5c0318754.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 63126 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_716f1aea-8074-4223-8466-b4b7b2b273e9.ini b/frpc/frpc_conf_716f1aea-8074-4223-8466-b4b7b2b273e9.ini new file mode 100644 index 0000000..a302123 --- /dev/null +++ b/frpc/frpc_conf_716f1aea-8074-4223-8466-b4b7b2b273e9.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 61534 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_71883f43-bbaa-4d1b-907e-bd86f9577835.ini b/frpc/frpc_conf_71883f43-bbaa-4d1b-907e-bd86f9577835.ini new file mode 100644 index 0000000..6e6458f --- /dev/null +++ b/frpc/frpc_conf_71883f43-bbaa-4d1b-907e-bd86f9577835.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 61325 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_721cef46-1e7a-4158-9990-0f55cc8dd820.ini b/frpc/frpc_conf_721cef46-1e7a-4158-9990-0f55cc8dd820.ini new file mode 100644 index 0000000..e42ab09 --- /dev/null +++ b/frpc/frpc_conf_721cef46-1e7a-4158-9990-0f55cc8dd820.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 54073 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_7551cadf-5b44-4481-9a46-c790d3dd4b2f.ini b/frpc/frpc_conf_7551cadf-5b44-4481-9a46-c790d3dd4b2f.ini new file mode 100644 index 0000000..6f6c924 --- /dev/null +++ b/frpc/frpc_conf_7551cadf-5b44-4481-9a46-c790d3dd4b2f.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 51135 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_755d2483-660c-4f9d-a504-462cdb4d8271.ini b/frpc/frpc_conf_755d2483-660c-4f9d-a504-462cdb4d8271.ini new file mode 100644 index 0000000..bf13836 --- /dev/null +++ b/frpc/frpc_conf_755d2483-660c-4f9d-a504-462cdb4d8271.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 52781 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_758f4cba-68bc-4f0b-b6b8-abbe52fc9a67.ini b/frpc/frpc_conf_758f4cba-68bc-4f0b-b6b8-abbe52fc9a67.ini new file mode 100644 index 0000000..056304c --- /dev/null +++ b/frpc/frpc_conf_758f4cba-68bc-4f0b-b6b8-abbe52fc9a67.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 49255 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_76beeaf1-730b-4b18-b675-7e9977bb0842.ini b/frpc/frpc_conf_76beeaf1-730b-4b18-b675-7e9977bb0842.ini new file mode 100644 index 0000000..c91b86e --- /dev/null +++ b/frpc/frpc_conf_76beeaf1-730b-4b18-b675-7e9977bb0842.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 58467 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_7802d0ce-b7bb-43fa-9f17-8c77ab66cc8f.ini b/frpc/frpc_conf_7802d0ce-b7bb-43fa-9f17-8c77ab66cc8f.ini new file mode 100644 index 0000000..0fa27c3 --- /dev/null +++ b/frpc/frpc_conf_7802d0ce-b7bb-43fa-9f17-8c77ab66cc8f.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 55299 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_7a7796f0-1917-4c51-8834-43f7be7981db.ini b/frpc/frpc_conf_7a7796f0-1917-4c51-8834-43f7be7981db.ini new file mode 100644 index 0000000..33197e5 --- /dev/null +++ b/frpc/frpc_conf_7a7796f0-1917-4c51-8834-43f7be7981db.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 62294 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_7b1c5bdb-52d5-4202-a331-14cec8df4472.ini b/frpc/frpc_conf_7b1c5bdb-52d5-4202-a331-14cec8df4472.ini new file mode 100644 index 0000000..869c2f5 --- /dev/null +++ b/frpc/frpc_conf_7b1c5bdb-52d5-4202-a331-14cec8df4472.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 54335 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_7bda7e2c-db3f-4f5b-982f-039e26886d6e.ini b/frpc/frpc_conf_7bda7e2c-db3f-4f5b-982f-039e26886d6e.ini new file mode 100644 index 0000000..1332637 --- /dev/null +++ b/frpc/frpc_conf_7bda7e2c-db3f-4f5b-982f-039e26886d6e.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 64371 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_7bf0df81-7dfd-4c1c-a835-3e61ee455323.ini b/frpc/frpc_conf_7bf0df81-7dfd-4c1c-a835-3e61ee455323.ini new file mode 100644 index 0000000..6009e2c --- /dev/null +++ b/frpc/frpc_conf_7bf0df81-7dfd-4c1c-a835-3e61ee455323.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 63841 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_7d169492-6a97-42e3-9a7e-4f3cef8a5aed.ini b/frpc/frpc_conf_7d169492-6a97-42e3-9a7e-4f3cef8a5aed.ini new file mode 100644 index 0000000..79374a4 --- /dev/null +++ b/frpc/frpc_conf_7d169492-6a97-42e3-9a7e-4f3cef8a5aed.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 54870 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_7ffeb236-be21-49ee-a2d7-05f008706a1f.ini b/frpc/frpc_conf_7ffeb236-be21-49ee-a2d7-05f008706a1f.ini new file mode 100644 index 0000000..d6e3bc7 --- /dev/null +++ b/frpc/frpc_conf_7ffeb236-be21-49ee-a2d7-05f008706a1f.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 61293 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_800b0954-bc63-4c51-a05a-6de5ee251c7f.ini b/frpc/frpc_conf_800b0954-bc63-4c51-a05a-6de5ee251c7f.ini new file mode 100644 index 0000000..67b1ed6 --- /dev/null +++ b/frpc/frpc_conf_800b0954-bc63-4c51-a05a-6de5ee251c7f.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 55912 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_80c18fb8-d03f-4e94-b44f-7a686b478913.ini b/frpc/frpc_conf_80c18fb8-d03f-4e94-b44f-7a686b478913.ini new file mode 100644 index 0000000..0ffbe0a --- /dev/null +++ b/frpc/frpc_conf_80c18fb8-d03f-4e94-b44f-7a686b478913.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 65391 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_8162ffaa-4b0e-427a-933e-abc73120cd19.ini b/frpc/frpc_conf_8162ffaa-4b0e-427a-933e-abc73120cd19.ini new file mode 100644 index 0000000..bf0b975 --- /dev/null +++ b/frpc/frpc_conf_8162ffaa-4b0e-427a-933e-abc73120cd19.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 58063 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_8238e169-c2f3-4ab1-b509-1a2903987eb8.ini b/frpc/frpc_conf_8238e169-c2f3-4ab1-b509-1a2903987eb8.ini new file mode 100644 index 0000000..51a86c3 --- /dev/null +++ b/frpc/frpc_conf_8238e169-c2f3-4ab1-b509-1a2903987eb8.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 49958 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_825913b1-a912-4c9c-9fd2-f4e099eaa044.ini b/frpc/frpc_conf_825913b1-a912-4c9c-9fd2-f4e099eaa044.ini new file mode 100644 index 0000000..4b35741 --- /dev/null +++ b/frpc/frpc_conf_825913b1-a912-4c9c-9fd2-f4e099eaa044.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 52678 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_82be51aa-558d-4e1b-bb51-09127f09aa8d.ini b/frpc/frpc_conf_82be51aa-558d-4e1b-bb51-09127f09aa8d.ini new file mode 100644 index 0000000..50b54d2 --- /dev/null +++ b/frpc/frpc_conf_82be51aa-558d-4e1b-bb51-09127f09aa8d.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 64102 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_82f550ea-71d5-465c-bd95-4db82b896811.ini b/frpc/frpc_conf_82f550ea-71d5-465c-bd95-4db82b896811.ini new file mode 100644 index 0000000..79b93aa --- /dev/null +++ b/frpc/frpc_conf_82f550ea-71d5-465c-bd95-4db82b896811.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 64561 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_8397e036-3aa7-4c25-8c8d-da3dca0ac8d7.ini b/frpc/frpc_conf_8397e036-3aa7-4c25-8c8d-da3dca0ac8d7.ini new file mode 100644 index 0000000..e40343c --- /dev/null +++ b/frpc/frpc_conf_8397e036-3aa7-4c25-8c8d-da3dca0ac8d7.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 51956 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_849eb805-85e8-428e-a049-28d852a5eae2.ini b/frpc/frpc_conf_849eb805-85e8-428e-a049-28d852a5eae2.ini new file mode 100644 index 0000000..f803c14 --- /dev/null +++ b/frpc/frpc_conf_849eb805-85e8-428e-a049-28d852a5eae2.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 61093 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_8508826b-4616-4cb5-9856-bb30d91e4c11.ini b/frpc/frpc_conf_8508826b-4616-4cb5-9856-bb30d91e4c11.ini new file mode 100644 index 0000000..258fbfc --- /dev/null +++ b/frpc/frpc_conf_8508826b-4616-4cb5-9856-bb30d91e4c11.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 54409 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_85b620ce-08cc-4ce9-b491-881531d5e28d.ini b/frpc/frpc_conf_85b620ce-08cc-4ce9-b491-881531d5e28d.ini new file mode 100644 index 0000000..211870e --- /dev/null +++ b/frpc/frpc_conf_85b620ce-08cc-4ce9-b491-881531d5e28d.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 50686 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_869a76b2-56c2-4b0a-98c2-9c099b058fa8.ini b/frpc/frpc_conf_869a76b2-56c2-4b0a-98c2-9c099b058fa8.ini new file mode 100644 index 0000000..bced7f5 --- /dev/null +++ b/frpc/frpc_conf_869a76b2-56c2-4b0a-98c2-9c099b058fa8.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 64113 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_87618679-628f-4e92-9bff-5e99ee46a80a.ini b/frpc/frpc_conf_87618679-628f-4e92-9bff-5e99ee46a80a.ini new file mode 100644 index 0000000..0961681 --- /dev/null +++ b/frpc/frpc_conf_87618679-628f-4e92-9bff-5e99ee46a80a.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 61167 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_88c27500-e8ee-4bbf-992e-f100c64f4f46.ini b/frpc/frpc_conf_88c27500-e8ee-4bbf-992e-f100c64f4f46.ini new file mode 100644 index 0000000..be562ae --- /dev/null +++ b/frpc/frpc_conf_88c27500-e8ee-4bbf-992e-f100c64f4f46.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 64629 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_894f0702-5835-4f89-93b3-7973ef878d04.ini b/frpc/frpc_conf_894f0702-5835-4f89-93b3-7973ef878d04.ini new file mode 100644 index 0000000..f62fd50 --- /dev/null +++ b/frpc/frpc_conf_894f0702-5835-4f89-93b3-7973ef878d04.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 51155 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_897ef54f-f2f7-4cc3-b37b-8b0bc78934db.ini b/frpc/frpc_conf_897ef54f-f2f7-4cc3-b37b-8b0bc78934db.ini new file mode 100644 index 0000000..dff659b --- /dev/null +++ b/frpc/frpc_conf_897ef54f-f2f7-4cc3-b37b-8b0bc78934db.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 61487 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_89e6d72b-f4d3-4bce-a554-706c2c3a15b9.ini b/frpc/frpc_conf_89e6d72b-f4d3-4bce-a554-706c2c3a15b9.ini new file mode 100644 index 0000000..ec6535e --- /dev/null +++ b/frpc/frpc_conf_89e6d72b-f4d3-4bce-a554-706c2c3a15b9.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 59283 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_8a2873f8-0cb9-4d57-bb71-a9963a868252.ini b/frpc/frpc_conf_8a2873f8-0cb9-4d57-bb71-a9963a868252.ini new file mode 100644 index 0000000..0f835de --- /dev/null +++ b/frpc/frpc_conf_8a2873f8-0cb9-4d57-bb71-a9963a868252.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 58639 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_8a75377f-1749-4a24-9d0a-b989e58e42e8.ini b/frpc/frpc_conf_8a75377f-1749-4a24-9d0a-b989e58e42e8.ini new file mode 100644 index 0000000..73b24e9 --- /dev/null +++ b/frpc/frpc_conf_8a75377f-1749-4a24-9d0a-b989e58e42e8.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 58250 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_8de22167-11f0-4069-8508-7faabaf6e558.ini b/frpc/frpc_conf_8de22167-11f0-4069-8508-7faabaf6e558.ini new file mode 100644 index 0000000..fe2eb60 --- /dev/null +++ b/frpc/frpc_conf_8de22167-11f0-4069-8508-7faabaf6e558.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 58911 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_8e384a3d-b3d4-4aaa-b628-0482fa66c5e4.ini b/frpc/frpc_conf_8e384a3d-b3d4-4aaa-b628-0482fa66c5e4.ini new file mode 100644 index 0000000..53e8587 --- /dev/null +++ b/frpc/frpc_conf_8e384a3d-b3d4-4aaa-b628-0482fa66c5e4.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 61104 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_8e54076e-2fe5-4d39-9ccc-648f83e95096.ini b/frpc/frpc_conf_8e54076e-2fe5-4d39-9ccc-648f83e95096.ini new file mode 100644 index 0000000..33a0c94 --- /dev/null +++ b/frpc/frpc_conf_8e54076e-2fe5-4d39-9ccc-648f83e95096.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 51456 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_8ed17209-51dc-4ca4-9e7b-e58c771086da.ini b/frpc/frpc_conf_8ed17209-51dc-4ca4-9e7b-e58c771086da.ini new file mode 100644 index 0000000..697e086 --- /dev/null +++ b/frpc/frpc_conf_8ed17209-51dc-4ca4-9e7b-e58c771086da.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 50430 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_912c808d-366b-4789-861a-3b7ae3aa3abe.ini b/frpc/frpc_conf_912c808d-366b-4789-861a-3b7ae3aa3abe.ini new file mode 100644 index 0000000..9d64272 --- /dev/null +++ b/frpc/frpc_conf_912c808d-366b-4789-861a-3b7ae3aa3abe.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 52718 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_9171bc25-c7e6-4620-9469-6b41e1662909.ini b/frpc/frpc_conf_9171bc25-c7e6-4620-9469-6b41e1662909.ini new file mode 100644 index 0000000..426d991 --- /dev/null +++ b/frpc/frpc_conf_9171bc25-c7e6-4620-9469-6b41e1662909.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 59163 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_932b8301-b097-4d0b-8339-1fd545c6bb43.ini b/frpc/frpc_conf_932b8301-b097-4d0b-8339-1fd545c6bb43.ini new file mode 100644 index 0000000..329160c --- /dev/null +++ b/frpc/frpc_conf_932b8301-b097-4d0b-8339-1fd545c6bb43.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 60766 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_94961df0-0c38-4b9f-8eec-c353d2b98519.ini b/frpc/frpc_conf_94961df0-0c38-4b9f-8eec-c353d2b98519.ini new file mode 100644 index 0000000..2b2950b --- /dev/null +++ b/frpc/frpc_conf_94961df0-0c38-4b9f-8eec-c353d2b98519.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 59167 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_953cc0d5-eee9-44ee-a2e7-26069e462e4a.ini b/frpc/frpc_conf_953cc0d5-eee9-44ee-a2e7-26069e462e4a.ini new file mode 100644 index 0000000..b56160c --- /dev/null +++ b/frpc/frpc_conf_953cc0d5-eee9-44ee-a2e7-26069e462e4a.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 60617 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_96d87df2-5125-4ee8-8500-f649c7983c56.ini b/frpc/frpc_conf_96d87df2-5125-4ee8-8500-f649c7983c56.ini new file mode 100644 index 0000000..09676fe --- /dev/null +++ b/frpc/frpc_conf_96d87df2-5125-4ee8-8500-f649c7983c56.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 50837 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_986a1d98-2117-4667-837d-e44f0b0245f8.ini b/frpc/frpc_conf_986a1d98-2117-4667-837d-e44f0b0245f8.ini new file mode 100644 index 0000000..cccf762 --- /dev/null +++ b/frpc/frpc_conf_986a1d98-2117-4667-837d-e44f0b0245f8.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 52769 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_98e2b887-7b93-4ff8-a133-9032058bd328.ini b/frpc/frpc_conf_98e2b887-7b93-4ff8-a133-9032058bd328.ini new file mode 100644 index 0000000..4213ff4 --- /dev/null +++ b/frpc/frpc_conf_98e2b887-7b93-4ff8-a133-9032058bd328.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 54827 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_997bde42-105c-4934-9c7e-4405f539dcdb.ini b/frpc/frpc_conf_997bde42-105c-4934-9c7e-4405f539dcdb.ini new file mode 100644 index 0000000..4ab5f0e --- /dev/null +++ b/frpc/frpc_conf_997bde42-105c-4934-9c7e-4405f539dcdb.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 61142 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_9a96fba1-30b1-4f86-a851-ca32ee940d34.ini b/frpc/frpc_conf_9a96fba1-30b1-4f86-a851-ca32ee940d34.ini new file mode 100644 index 0000000..aa7b280 --- /dev/null +++ b/frpc/frpc_conf_9a96fba1-30b1-4f86-a851-ca32ee940d34.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 52713 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_9b8f9dc6-a905-4b36-b7b5-c7ee6e11f4b2.ini b/frpc/frpc_conf_9b8f9dc6-a905-4b36-b7b5-c7ee6e11f4b2.ini new file mode 100644 index 0000000..daeaf19 --- /dev/null +++ b/frpc/frpc_conf_9b8f9dc6-a905-4b36-b7b5-c7ee6e11f4b2.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 58270 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_9bb54270-8fd8-4abc-9550-3e2c29c3d693.ini b/frpc/frpc_conf_9bb54270-8fd8-4abc-9550-3e2c29c3d693.ini new file mode 100644 index 0000000..028378c --- /dev/null +++ b/frpc/frpc_conf_9bb54270-8fd8-4abc-9550-3e2c29c3d693.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 59882 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_9c08f058-f9e7-43d4-86c8-eca96cd908b3.ini b/frpc/frpc_conf_9c08f058-f9e7-43d4-86c8-eca96cd908b3.ini new file mode 100644 index 0000000..6efc557 --- /dev/null +++ b/frpc/frpc_conf_9c08f058-f9e7-43d4-86c8-eca96cd908b3.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 58408 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_9c2d8066-e8dc-4ea9-83e5-edc317249589.ini b/frpc/frpc_conf_9c2d8066-e8dc-4ea9-83e5-edc317249589.ini new file mode 100644 index 0000000..f504a2d --- /dev/null +++ b/frpc/frpc_conf_9c2d8066-e8dc-4ea9-83e5-edc317249589.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 51889 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_9d7fc5eb-84f6-412e-b2b0-7b8541ef13a0.ini b/frpc/frpc_conf_9d7fc5eb-84f6-412e-b2b0-7b8541ef13a0.ini new file mode 100644 index 0000000..b1bd48b --- /dev/null +++ b/frpc/frpc_conf_9d7fc5eb-84f6-412e-b2b0-7b8541ef13a0.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 61168 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_9ed6a0b5-5200-46a7-88cb-8b3f78b53004.ini b/frpc/frpc_conf_9ed6a0b5-5200-46a7-88cb-8b3f78b53004.ini new file mode 100644 index 0000000..0a07d05 --- /dev/null +++ b/frpc/frpc_conf_9ed6a0b5-5200-46a7-88cb-8b3f78b53004.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 63641 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_a05af32e-c835-4ae3-94cb-fbc7f7df01e4.ini b/frpc/frpc_conf_a05af32e-c835-4ae3-94cb-fbc7f7df01e4.ini new file mode 100644 index 0000000..d5bcae1 --- /dev/null +++ b/frpc/frpc_conf_a05af32e-c835-4ae3-94cb-fbc7f7df01e4.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 57096 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_a14d725f-bb1a-4342-bad1-95d0b114cf89.ini b/frpc/frpc_conf_a14d725f-bb1a-4342-bad1-95d0b114cf89.ini new file mode 100644 index 0000000..f29a39b --- /dev/null +++ b/frpc/frpc_conf_a14d725f-bb1a-4342-bad1-95d0b114cf89.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 63897 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_a1512132-099d-480c-bdfe-3c0c90d8cb80.ini b/frpc/frpc_conf_a1512132-099d-480c-bdfe-3c0c90d8cb80.ini new file mode 100644 index 0000000..b230af2 --- /dev/null +++ b/frpc/frpc_conf_a1512132-099d-480c-bdfe-3c0c90d8cb80.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 64945 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_a31604df-8b33-4e1d-a5b6-c094bf928cd4.ini b/frpc/frpc_conf_a31604df-8b33-4e1d-a5b6-c094bf928cd4.ini new file mode 100644 index 0000000..befb907 --- /dev/null +++ b/frpc/frpc_conf_a31604df-8b33-4e1d-a5b6-c094bf928cd4.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 59698 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_a3bc244f-5611-4075-a115-670f0e27693f.ini b/frpc/frpc_conf_a3bc244f-5611-4075-a115-670f0e27693f.ini new file mode 100644 index 0000000..b2af142 --- /dev/null +++ b/frpc/frpc_conf_a3bc244f-5611-4075-a115-670f0e27693f.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 57505 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_a414606c-9513-408b-9bd2-eb897b52f793.ini b/frpc/frpc_conf_a414606c-9513-408b-9bd2-eb897b52f793.ini new file mode 100644 index 0000000..0b2f117 --- /dev/null +++ b/frpc/frpc_conf_a414606c-9513-408b-9bd2-eb897b52f793.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 60475 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_a46de29c-ad60-4ef6-98b4-555e818a5d15.ini b/frpc/frpc_conf_a46de29c-ad60-4ef6-98b4-555e818a5d15.ini new file mode 100644 index 0000000..35ecd40 --- /dev/null +++ b/frpc/frpc_conf_a46de29c-ad60-4ef6-98b4-555e818a5d15.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 54030 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_a499dded-d29e-43be-b987-69937528ba38.ini b/frpc/frpc_conf_a499dded-d29e-43be-b987-69937528ba38.ini new file mode 100644 index 0000000..155f845 --- /dev/null +++ b/frpc/frpc_conf_a499dded-d29e-43be-b987-69937528ba38.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 50450 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_a4a52186-96cd-4059-8d1f-3f9354ec6863.ini b/frpc/frpc_conf_a4a52186-96cd-4059-8d1f-3f9354ec6863.ini new file mode 100644 index 0000000..10a812e --- /dev/null +++ b/frpc/frpc_conf_a4a52186-96cd-4059-8d1f-3f9354ec6863.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 62730 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_a4f0cabe-1d84-4464-a3c0-092f74973a98.ini b/frpc/frpc_conf_a4f0cabe-1d84-4464-a3c0-092f74973a98.ini new file mode 100644 index 0000000..a4c765d --- /dev/null +++ b/frpc/frpc_conf_a4f0cabe-1d84-4464-a3c0-092f74973a98.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 52709 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_a4f1f132-c432-45a9-bbb9-d22bb5bf4aa7.ini b/frpc/frpc_conf_a4f1f132-c432-45a9-bbb9-d22bb5bf4aa7.ini new file mode 100644 index 0000000..fb8107f --- /dev/null +++ b/frpc/frpc_conf_a4f1f132-c432-45a9-bbb9-d22bb5bf4aa7.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 54806 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_a7166d8c-6266-4c94-8e3b-8fddcbfbbe83.ini b/frpc/frpc_conf_a7166d8c-6266-4c94-8e3b-8fddcbfbbe83.ini new file mode 100644 index 0000000..079301f --- /dev/null +++ b/frpc/frpc_conf_a7166d8c-6266-4c94-8e3b-8fddcbfbbe83.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 61574 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_a7a569e1-45dc-4d52-b54b-e135b75153f5.ini b/frpc/frpc_conf_a7a569e1-45dc-4d52-b54b-e135b75153f5.ini new file mode 100644 index 0000000..f1d255c --- /dev/null +++ b/frpc/frpc_conf_a7a569e1-45dc-4d52-b54b-e135b75153f5.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 50948 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_a7b6b18c-bf75-4aa0-b6db-855c12183268.ini b/frpc/frpc_conf_a7b6b18c-bf75-4aa0-b6db-855c12183268.ini new file mode 100644 index 0000000..a35108c --- /dev/null +++ b/frpc/frpc_conf_a7b6b18c-bf75-4aa0-b6db-855c12183268.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 52710 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_a7ef4e73-c687-408e-a4ee-2b0512dc31b8.ini b/frpc/frpc_conf_a7ef4e73-c687-408e-a4ee-2b0512dc31b8.ini new file mode 100644 index 0000000..1cb2526 --- /dev/null +++ b/frpc/frpc_conf_a7ef4e73-c687-408e-a4ee-2b0512dc31b8.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 64860 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_a81d8c6b-b954-404b-b596-6082f64539af.ini b/frpc/frpc_conf_a81d8c6b-b954-404b-b596-6082f64539af.ini new file mode 100644 index 0000000..7286518 --- /dev/null +++ b/frpc/frpc_conf_a81d8c6b-b954-404b-b596-6082f64539af.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 65088 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_a82e9b15-9d9a-45e0-a786-f34e799db5c9.ini b/frpc/frpc_conf_a82e9b15-9d9a-45e0-a786-f34e799db5c9.ini new file mode 100644 index 0000000..f1badd8 --- /dev/null +++ b/frpc/frpc_conf_a82e9b15-9d9a-45e0-a786-f34e799db5c9.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 60124 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_a8e4687b-9ec6-4bfd-827b-77bf4f0cb3da.ini b/frpc/frpc_conf_a8e4687b-9ec6-4bfd-827b-77bf4f0cb3da.ini new file mode 100644 index 0000000..358198b --- /dev/null +++ b/frpc/frpc_conf_a8e4687b-9ec6-4bfd-827b-77bf4f0cb3da.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 50213 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_a91224ab-b32b-4a5f-a0d9-b6ac58c5bc86.ini b/frpc/frpc_conf_a91224ab-b32b-4a5f-a0d9-b6ac58c5bc86.ini new file mode 100644 index 0000000..10ebd45 --- /dev/null +++ b/frpc/frpc_conf_a91224ab-b32b-4a5f-a0d9-b6ac58c5bc86.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 60959 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_a9154180-e83e-49b3-8f4e-e86c7742ffd1.ini b/frpc/frpc_conf_a9154180-e83e-49b3-8f4e-e86c7742ffd1.ini new file mode 100644 index 0000000..a05953a --- /dev/null +++ b/frpc/frpc_conf_a9154180-e83e-49b3-8f4e-e86c7742ffd1.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 59345 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_a97d399a-a708-4da8-ba6c-22e8abce9c24.ini b/frpc/frpc_conf_a97d399a-a708-4da8-ba6c-22e8abce9c24.ini new file mode 100644 index 0000000..cbcd788 --- /dev/null +++ b/frpc/frpc_conf_a97d399a-a708-4da8-ba6c-22e8abce9c24.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 61722 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_aa551cdf-6d07-4dc7-b08b-a409b175b647.ini b/frpc/frpc_conf_aa551cdf-6d07-4dc7-b08b-a409b175b647.ini new file mode 100644 index 0000000..d2c5091 --- /dev/null +++ b/frpc/frpc_conf_aa551cdf-6d07-4dc7-b08b-a409b175b647.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 53763 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_aa8cba96-a12f-451f-8384-233bc83c21ac.ini b/frpc/frpc_conf_aa8cba96-a12f-451f-8384-233bc83c21ac.ini new file mode 100644 index 0000000..ddde7f1 --- /dev/null +++ b/frpc/frpc_conf_aa8cba96-a12f-451f-8384-233bc83c21ac.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 55638 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_aa9e20d8-ea1a-414b-a555-4f81b4647a37.ini b/frpc/frpc_conf_aa9e20d8-ea1a-414b-a555-4f81b4647a37.ini new file mode 100644 index 0000000..1808407 --- /dev/null +++ b/frpc/frpc_conf_aa9e20d8-ea1a-414b-a555-4f81b4647a37.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 50791 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_ab24a1dc-dc9c-4069-b6e7-f860656dc83d.ini b/frpc/frpc_conf_ab24a1dc-dc9c-4069-b6e7-f860656dc83d.ini new file mode 100644 index 0000000..d867c4a --- /dev/null +++ b/frpc/frpc_conf_ab24a1dc-dc9c-4069-b6e7-f860656dc83d.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 57462 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_ab92010b-cf92-44c4-bbda-334c9a0f918b.ini b/frpc/frpc_conf_ab92010b-cf92-44c4-bbda-334c9a0f918b.ini new file mode 100644 index 0000000..f751d95 --- /dev/null +++ b/frpc/frpc_conf_ab92010b-cf92-44c4-bbda-334c9a0f918b.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 61851 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_abaa4c86-b032-4c1a-b8c0-9c265975dc2c.ini b/frpc/frpc_conf_abaa4c86-b032-4c1a-b8c0-9c265975dc2c.ini new file mode 100644 index 0000000..c5702b2 --- /dev/null +++ b/frpc/frpc_conf_abaa4c86-b032-4c1a-b8c0-9c265975dc2c.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 55618 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_ac292c2c-359b-454d-991d-3c560e9da683.ini b/frpc/frpc_conf_ac292c2c-359b-454d-991d-3c560e9da683.ini new file mode 100644 index 0000000..068476d --- /dev/null +++ b/frpc/frpc_conf_ac292c2c-359b-454d-991d-3c560e9da683.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 52803 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_acc57a63-4bb5-4442-8e4b-e88395d31770.ini b/frpc/frpc_conf_acc57a63-4bb5-4442-8e4b-e88395d31770.ini new file mode 100644 index 0000000..bbfdd2e --- /dev/null +++ b/frpc/frpc_conf_acc57a63-4bb5-4442-8e4b-e88395d31770.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 61533 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_acf14ba3-665c-45ff-8457-76f6ba5f7eeb.ini b/frpc/frpc_conf_acf14ba3-665c-45ff-8457-76f6ba5f7eeb.ini new file mode 100644 index 0000000..c7cd9d7 --- /dev/null +++ b/frpc/frpc_conf_acf14ba3-665c-45ff-8457-76f6ba5f7eeb.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 58977 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_ad34bc1f-e506-4994-be54-9f865ec2e1c4.ini b/frpc/frpc_conf_ad34bc1f-e506-4994-be54-9f865ec2e1c4.ini new file mode 100644 index 0000000..6d4a7f3 --- /dev/null +++ b/frpc/frpc_conf_ad34bc1f-e506-4994-be54-9f865ec2e1c4.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 55175 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_aeca78e1-06af-45c5-9319-758ad0235b7b.ini b/frpc/frpc_conf_aeca78e1-06af-45c5-9319-758ad0235b7b.ini new file mode 100644 index 0000000..8be0eca --- /dev/null +++ b/frpc/frpc_conf_aeca78e1-06af-45c5-9319-758ad0235b7b.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 65306 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_af05bf36-0c66-46d4-adf0-26db6af72d41.ini b/frpc/frpc_conf_af05bf36-0c66-46d4-adf0-26db6af72d41.ini new file mode 100644 index 0000000..25b0915 --- /dev/null +++ b/frpc/frpc_conf_af05bf36-0c66-46d4-adf0-26db6af72d41.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 58877 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_afee0a30-411b-4a0b-be6d-01d114b4ecfd.ini b/frpc/frpc_conf_afee0a30-411b-4a0b-be6d-01d114b4ecfd.ini new file mode 100644 index 0000000..11936d9 --- /dev/null +++ b/frpc/frpc_conf_afee0a30-411b-4a0b-be6d-01d114b4ecfd.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 59249 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_affd207a-3282-43a3-a8b6-867cc2a3c165.ini b/frpc/frpc_conf_affd207a-3282-43a3-a8b6-867cc2a3c165.ini new file mode 100644 index 0000000..9b3299e --- /dev/null +++ b/frpc/frpc_conf_affd207a-3282-43a3-a8b6-867cc2a3c165.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 61294 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_b1885e7d-b95c-41ed-baa8-7b8f14c85f83.ini b/frpc/frpc_conf_b1885e7d-b95c-41ed-baa8-7b8f14c85f83.ini new file mode 100644 index 0000000..5544c8f --- /dev/null +++ b/frpc/frpc_conf_b1885e7d-b95c-41ed-baa8-7b8f14c85f83.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 56651 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_b18fbfdd-caf9-4dcc-bfa1-87cdfaf0df81.ini b/frpc/frpc_conf_b18fbfdd-caf9-4dcc-bfa1-87cdfaf0df81.ini new file mode 100644 index 0000000..5292668 --- /dev/null +++ b/frpc/frpc_conf_b18fbfdd-caf9-4dcc-bfa1-87cdfaf0df81.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 58876 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_b1c489ef-c575-4ac0-80ae-c85139e7c3f0.ini b/frpc/frpc_conf_b1c489ef-c575-4ac0-80ae-c85139e7c3f0.ini new file mode 100644 index 0000000..d83e7ce --- /dev/null +++ b/frpc/frpc_conf_b1c489ef-c575-4ac0-80ae-c85139e7c3f0.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 52719 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_b562bae2-e261-4c1c-8de2-58fcddb7eeef.ini b/frpc/frpc_conf_b562bae2-e261-4c1c-8de2-58fcddb7eeef.ini new file mode 100644 index 0000000..2cf22f9 --- /dev/null +++ b/frpc/frpc_conf_b562bae2-e261-4c1c-8de2-58fcddb7eeef.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 63933 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_b84532de-feb6-47b7-b295-8163baef12bf.ini b/frpc/frpc_conf_b84532de-feb6-47b7-b295-8163baef12bf.ini new file mode 100644 index 0000000..527ad70 --- /dev/null +++ b/frpc/frpc_conf_b84532de-feb6-47b7-b295-8163baef12bf.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 56116 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_b987381f-ba72-4cc2-b0aa-98fbe33fb768.ini b/frpc/frpc_conf_b987381f-ba72-4cc2-b0aa-98fbe33fb768.ini new file mode 100644 index 0000000..f801aa8 --- /dev/null +++ b/frpc/frpc_conf_b987381f-ba72-4cc2-b0aa-98fbe33fb768.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 49746 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_ba40b8fa-04be-43f1-a2b3-d1d3a180d127.ini b/frpc/frpc_conf_ba40b8fa-04be-43f1-a2b3-d1d3a180d127.ini new file mode 100644 index 0000000..3f80cdb --- /dev/null +++ b/frpc/frpc_conf_ba40b8fa-04be-43f1-a2b3-d1d3a180d127.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 59156 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_ba793bbc-3d3d-42c2-a74a-8836448f8152.ini b/frpc/frpc_conf_ba793bbc-3d3d-42c2-a74a-8836448f8152.ini new file mode 100644 index 0000000..cba990b --- /dev/null +++ b/frpc/frpc_conf_ba793bbc-3d3d-42c2-a74a-8836448f8152.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 64070 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_baa1f07a-c8b5-4cc5-b1e9-cd1c97a6cd38.ini b/frpc/frpc_conf_baa1f07a-c8b5-4cc5-b1e9-cd1c97a6cd38.ini new file mode 100644 index 0000000..9d814ef --- /dev/null +++ b/frpc/frpc_conf_baa1f07a-c8b5-4cc5-b1e9-cd1c97a6cd38.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 50965 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_bb58b4c0-2857-43f8-8fcb-fc4fe30f6af4.ini b/frpc/frpc_conf_bb58b4c0-2857-43f8-8fcb-fc4fe30f6af4.ini new file mode 100644 index 0000000..47aa44b --- /dev/null +++ b/frpc/frpc_conf_bb58b4c0-2857-43f8-8fcb-fc4fe30f6af4.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 58249 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_bd106233-e525-411b-930f-4ba8684a0ac8.ini b/frpc/frpc_conf_bd106233-e525-411b-930f-4ba8684a0ac8.ini new file mode 100644 index 0000000..b3d34c7 --- /dev/null +++ b/frpc/frpc_conf_bd106233-e525-411b-930f-4ba8684a0ac8.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 55174 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_bd1ed4a8-419a-4084-9b8a-b7998c0de1f2.ini b/frpc/frpc_conf_bd1ed4a8-419a-4084-9b8a-b7998c0de1f2.ini new file mode 100644 index 0000000..daaaf71 --- /dev/null +++ b/frpc/frpc_conf_bd1ed4a8-419a-4084-9b8a-b7998c0de1f2.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 55768 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_bd39f83b-572a-41b8-8ed6-44b8c734f62b.ini b/frpc/frpc_conf_bd39f83b-572a-41b8-8ed6-44b8c734f62b.ini new file mode 100644 index 0000000..31a6253 --- /dev/null +++ b/frpc/frpc_conf_bd39f83b-572a-41b8-8ed6-44b8c734f62b.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 50451 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_bdc5ae5e-4224-4dca-abc3-de41617e037e.ini b/frpc/frpc_conf_bdc5ae5e-4224-4dca-abc3-de41617e037e.ini new file mode 100644 index 0000000..6be26d5 --- /dev/null +++ b/frpc/frpc_conf_bdc5ae5e-4224-4dca-abc3-de41617e037e.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 59012 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_be18d36e-d30f-4229-92fa-3aa6277bc366.ini b/frpc/frpc_conf_be18d36e-d30f-4229-92fa-3aa6277bc366.ini new file mode 100644 index 0000000..412edad --- /dev/null +++ b/frpc/frpc_conf_be18d36e-d30f-4229-92fa-3aa6277bc366.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 60618 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_be82fa2f-709c-4bf3-820a-8c6b1bc09559.ini b/frpc/frpc_conf_be82fa2f-709c-4bf3-820a-8c6b1bc09559.ini new file mode 100644 index 0000000..2f2ca54 --- /dev/null +++ b/frpc/frpc_conf_be82fa2f-709c-4bf3-820a-8c6b1bc09559.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 52853 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_bff1173e-470a-44b2-bd00-cc8dc4ab3094.ini b/frpc/frpc_conf_bff1173e-470a-44b2-bd00-cc8dc4ab3094.ini new file mode 100644 index 0000000..407b040 --- /dev/null +++ b/frpc/frpc_conf_bff1173e-470a-44b2-bd00-cc8dc4ab3094.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 55300 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_c0da6ec2-de8e-4405-b17e-80047d0bfe0b.ini b/frpc/frpc_conf_c0da6ec2-de8e-4405-b17e-80047d0bfe0b.ini new file mode 100644 index 0000000..d600bb6 --- /dev/null +++ b/frpc/frpc_conf_c0da6ec2-de8e-4405-b17e-80047d0bfe0b.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 61852 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_c0eca7b0-05fc-486f-8878-dc7a83f6fb35.ini b/frpc/frpc_conf_c0eca7b0-05fc-486f-8878-dc7a83f6fb35.ini new file mode 100644 index 0000000..08525f7 --- /dev/null +++ b/frpc/frpc_conf_c0eca7b0-05fc-486f-8878-dc7a83f6fb35.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 50306 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_c12708c5-2620-430e-ac05-7c8db218a8da.ini b/frpc/frpc_conf_c12708c5-2620-430e-ac05-7c8db218a8da.ini new file mode 100644 index 0000000..5e03114 --- /dev/null +++ b/frpc/frpc_conf_c12708c5-2620-430e-ac05-7c8db218a8da.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 50305 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_c27b9d31-36fe-48a9-ab5d-916dbfe47abb.ini b/frpc/frpc_conf_c27b9d31-36fe-48a9-ab5d-916dbfe47abb.ini new file mode 100644 index 0000000..62cdc82 --- /dev/null +++ b/frpc/frpc_conf_c27b9d31-36fe-48a9-ab5d-916dbfe47abb.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[d0683025-2588-424d-9370-ab6199b7ea00] +type = tcp +local_ip = 127.0.0.1 +local_port = 49202 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_c29a2345-4dcf-4f3a-ab5a-05d16301f10f.ini b/frpc/frpc_conf_c29a2345-4dcf-4f3a-ab5a-05d16301f10f.ini new file mode 100644 index 0000000..e20aeaf --- /dev/null +++ b/frpc/frpc_conf_c29a2345-4dcf-4f3a-ab5a-05d16301f10f.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 54123 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_c64201e7-4c74-461e-9f9e-42478a0d90ae.ini b/frpc/frpc_conf_c64201e7-4c74-461e-9f9e-42478a0d90ae.ini new file mode 100644 index 0000000..9773a2e --- /dev/null +++ b/frpc/frpc_conf_c64201e7-4c74-461e-9f9e-42478a0d90ae.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 59588 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_c68032e5-3af1-411c-b21b-67bc95353e0a.ini b/frpc/frpc_conf_c68032e5-3af1-411c-b21b-67bc95353e0a.ini new file mode 100644 index 0000000..dbf020c --- /dev/null +++ b/frpc/frpc_conf_c68032e5-3af1-411c-b21b-67bc95353e0a.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[6cddde5c-e6d7-47f8-9123-b59d821d68d4] +type = tcp +local_ip = 127.0.0.1 +local_port = 63631 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_c780103d-0d98-471b-8a2f-0b390d93d25a.ini b/frpc/frpc_conf_c780103d-0d98-471b-8a2f-0b390d93d25a.ini new file mode 100644 index 0000000..544900e --- /dev/null +++ b/frpc/frpc_conf_c780103d-0d98-471b-8a2f-0b390d93d25a.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[5c8269b4-ec3c-436f-8ca9-0d52ea2a77cd] +type = tcp +local_ip = 127.0.0.1 +local_port = 53977 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_c86e0563-d69f-4e61-93da-d9e628cead42.ini b/frpc/frpc_conf_c86e0563-d69f-4e61-93da-d9e628cead42.ini new file mode 100644 index 0000000..b63a0f8 --- /dev/null +++ b/frpc/frpc_conf_c86e0563-d69f-4e61-93da-d9e628cead42.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 61488 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_cb732f58-afca-4231-8455-76e46d361763.ini b/frpc/frpc_conf_cb732f58-afca-4231-8455-76e46d361763.ini new file mode 100644 index 0000000..bc19c9b --- /dev/null +++ b/frpc/frpc_conf_cb732f58-afca-4231-8455-76e46d361763.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 50429 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_cb882c0e-0712-4081-bdeb-ab451247b0a8.ini b/frpc/frpc_conf_cb882c0e-0712-4081-bdeb-ab451247b0a8.ini new file mode 100644 index 0000000..d8be718 --- /dev/null +++ b/frpc/frpc_conf_cb882c0e-0712-4081-bdeb-ab451247b0a8.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 59333 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_cbb5106e-cf33-4d7c-951e-685296d6ba49.ini b/frpc/frpc_conf_cbb5106e-cf33-4d7c-951e-685296d6ba49.ini new file mode 100644 index 0000000..3c4d56f --- /dev/null +++ b/frpc/frpc_conf_cbb5106e-cf33-4d7c-951e-685296d6ba49.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 49861 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_cc8b247a-62aa-4c71-baac-e69098069e9e.ini b/frpc/frpc_conf_cc8b247a-62aa-4c71-baac-e69098069e9e.ini new file mode 100644 index 0000000..e1de4bf --- /dev/null +++ b/frpc/frpc_conf_cc8b247a-62aa-4c71-baac-e69098069e9e.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 53764 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_cf511f3f-028f-4165-898b-9e27123112d0.ini b/frpc/frpc_conf_cf511f3f-028f-4165-898b-9e27123112d0.ini new file mode 100644 index 0000000..3caad7c --- /dev/null +++ b/frpc/frpc_conf_cf511f3f-028f-4165-898b-9e27123112d0.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 63932 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_d0117891-369a-4c0a-9bd6-e308592aa489.ini b/frpc/frpc_conf_d0117891-369a-4c0a-9bd6-e308592aa489.ini new file mode 100644 index 0000000..3bb3a24 --- /dev/null +++ b/frpc/frpc_conf_d0117891-369a-4c0a-9bd6-e308592aa489.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[d19f6634-5444-424b-96ab-b49e82663794] +type = tcp +local_ip = 127.0.0.1 +local_port = 60448 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_d0273f2d-bfb6-45dc-90f0-9bba2384c161.ini b/frpc/frpc_conf_d0273f2d-bfb6-45dc-90f0-9bba2384c161.ini new file mode 100644 index 0000000..e78c488 --- /dev/null +++ b/frpc/frpc_conf_d0273f2d-bfb6-45dc-90f0-9bba2384c161.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 63125 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_d05fb444-dc0d-4287-a69e-9781d6350201.ini b/frpc/frpc_conf_d05fb444-dc0d-4287-a69e-9781d6350201.ini new file mode 100644 index 0000000..7f75637 --- /dev/null +++ b/frpc/frpc_conf_d05fb444-dc0d-4287-a69e-9781d6350201.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 50838 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_d07ffdb5-3029-4378-9149-03ba6e560e04.ini b/frpc/frpc_conf_d07ffdb5-3029-4378-9149-03ba6e560e04.ini new file mode 100644 index 0000000..52375b3 --- /dev/null +++ b/frpc/frpc_conf_d07ffdb5-3029-4378-9149-03ba6e560e04.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 49215 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_d0ac8c3e-0a9f-46dd-acd1-62174fdd86ac.ini b/frpc/frpc_conf_d0ac8c3e-0a9f-46dd-acd1-62174fdd86ac.ini new file mode 100644 index 0000000..879567a --- /dev/null +++ b/frpc/frpc_conf_d0ac8c3e-0a9f-46dd-acd1-62174fdd86ac.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 52699 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_d1e2562f-3b2f-437d-98ff-7ca3e3e27757.ini b/frpc/frpc_conf_d1e2562f-3b2f-437d-98ff-7ca3e3e27757.ini new file mode 100644 index 0000000..c2e85e3 --- /dev/null +++ b/frpc/frpc_conf_d1e2562f-3b2f-437d-98ff-7ca3e3e27757.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 64944 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_d27b5bd4-3101-4bdb-9cad-a120987b8640.ini b/frpc/frpc_conf_d27b5bd4-3101-4bdb-9cad-a120987b8640.ini new file mode 100644 index 0000000..89de552 --- /dev/null +++ b/frpc/frpc_conf_d27b5bd4-3101-4bdb-9cad-a120987b8640.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 52352 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_d2c4d7a9-fbd9-444d-a349-1d855af42555.ini b/frpc/frpc_conf_d2c4d7a9-fbd9-444d-a349-1d855af42555.ini new file mode 100644 index 0000000..b996dff --- /dev/null +++ b/frpc/frpc_conf_d2c4d7a9-fbd9-444d-a349-1d855af42555.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 50790 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_d3c65d58-e895-42e2-8118-c6e0ff752771.ini b/frpc/frpc_conf_d3c65d58-e895-42e2-8118-c6e0ff752771.ini new file mode 100644 index 0000000..2851f11 --- /dev/null +++ b/frpc/frpc_conf_d3c65d58-e895-42e2-8118-c6e0ff752771.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 57494 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_d4bcb703-4031-4718-b142-cd3ac32782ec.ini b/frpc/frpc_conf_d4bcb703-4031-4718-b142-cd3ac32782ec.ini new file mode 100644 index 0000000..96e0d5f --- /dev/null +++ b/frpc/frpc_conf_d4bcb703-4031-4718-b142-cd3ac32782ec.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 60591 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_d665e29d-4b9f-40ea-837a-9ce0a39d93fd.ini b/frpc/frpc_conf_d665e29d-4b9f-40ea-837a-9ce0a39d93fd.ini new file mode 100644 index 0000000..65bbb89 --- /dev/null +++ b/frpc/frpc_conf_d665e29d-4b9f-40ea-837a-9ce0a39d93fd.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 58550 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_d9d57702-1698-4f9e-b364-c5cd6a1c1ba6.ini b/frpc/frpc_conf_d9d57702-1698-4f9e-b364-c5cd6a1c1ba6.ini new file mode 100644 index 0000000..f912171 --- /dev/null +++ b/frpc/frpc_conf_d9d57702-1698-4f9e-b364-c5cd6a1c1ba6.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 50480 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_da4a2fc0-da58-476f-ac22-71681500a202.ini b/frpc/frpc_conf_da4a2fc0-da58-476f-ac22-71681500a202.ini new file mode 100644 index 0000000..439a6a0 --- /dev/null +++ b/frpc/frpc_conf_da4a2fc0-da58-476f-ac22-71681500a202.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 50024 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_db9f5a63-0df3-455b-9a2c-da44ce411660.ini b/frpc/frpc_conf_db9f5a63-0df3-455b-9a2c-da44ce411660.ini new file mode 100644 index 0000000..0b8cd65 --- /dev/null +++ b/frpc/frpc_conf_db9f5a63-0df3-455b-9a2c-da44ce411660.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 55092 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_dc1c5999-7fe9-44f4-8d0e-f96f9b764ce1.ini b/frpc/frpc_conf_dc1c5999-7fe9-44f4-8d0e-f96f9b764ce1.ini new file mode 100644 index 0000000..2dbe323 --- /dev/null +++ b/frpc/frpc_conf_dc1c5999-7fe9-44f4-8d0e-f96f9b764ce1.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 59332 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_dca73588-12cb-4bb7-9f53-bc5ef9683d71.ini b/frpc/frpc_conf_dca73588-12cb-4bb7-9f53-bc5ef9683d71.ini new file mode 100644 index 0000000..728d3d9 --- /dev/null +++ b/frpc/frpc_conf_dca73588-12cb-4bb7-9f53-bc5ef9683d71.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 64560 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_dd98c321-5307-43d8-b058-c1e49794b969.ini b/frpc/frpc_conf_dd98c321-5307-43d8-b058-c1e49794b969.ini new file mode 100644 index 0000000..9da347d --- /dev/null +++ b/frpc/frpc_conf_dd98c321-5307-43d8-b058-c1e49794b969.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 59707 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_de3d88a7-435f-4ec3-93c1-76c92e7db5c3.ini b/frpc/frpc_conf_de3d88a7-435f-4ec3-93c1-76c92e7db5c3.ini new file mode 100644 index 0000000..a593f30 --- /dev/null +++ b/frpc/frpc_conf_de3d88a7-435f-4ec3-93c1-76c92e7db5c3.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 55637 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_dedd4272-bee6-4e33-82f0-403cb1a32425.ini b/frpc/frpc_conf_dedd4272-bee6-4e33-82f0-403cb1a32425.ini new file mode 100644 index 0000000..aa79c1f --- /dev/null +++ b/frpc/frpc_conf_dedd4272-bee6-4e33-82f0-403cb1a32425.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 59706 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_df11fe8a-e3e1-4bd3-90ea-193faae5a88a.ini b/frpc/frpc_conf_df11fe8a-e3e1-4bd3-90ea-193faae5a88a.ini new file mode 100644 index 0000000..41334a6 --- /dev/null +++ b/frpc/frpc_conf_df11fe8a-e3e1-4bd3-90ea-193faae5a88a.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 54074 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_df3149c7-7dc8-45da-bfa9-84cb8b277e6b.ini b/frpc/frpc_conf_df3149c7-7dc8-45da-bfa9-84cb8b277e6b.ini new file mode 100644 index 0000000..dcedce4 --- /dev/null +++ b/frpc/frpc_conf_df3149c7-7dc8-45da-bfa9-84cb8b277e6b.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 59218 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_dfaa4f17-0655-4181-b77a-5650d6bfbca6.ini b/frpc/frpc_conf_dfaa4f17-0655-4181-b77a-5650d6bfbca6.ini new file mode 100644 index 0000000..d64b685 --- /dev/null +++ b/frpc/frpc_conf_dfaa4f17-0655-4181-b77a-5650d6bfbca6.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 61092 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_e0ead09c-14d4-43d2-93ca-aec52e534992.ini b/frpc/frpc_conf_e0ead09c-14d4-43d2-93ca-aec52e534992.ini new file mode 100644 index 0000000..15550ea --- /dev/null +++ b/frpc/frpc_conf_e0ead09c-14d4-43d2-93ca-aec52e534992.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 61083 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_e1289990-9c95-4709-a63e-96774b056376.ini b/frpc/frpc_conf_e1289990-9c95-4709-a63e-96774b056376.ini new file mode 100644 index 0000000..f1697c7 --- /dev/null +++ b/frpc/frpc_conf_e1289990-9c95-4709-a63e-96774b056376.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 52827 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_e14a8c5d-1b5e-40ee-a642-746b48221f71.ini b/frpc/frpc_conf_e14a8c5d-1b5e-40ee-a642-746b48221f71.ini new file mode 100644 index 0000000..a9777ed --- /dev/null +++ b/frpc/frpc_conf_e14a8c5d-1b5e-40ee-a642-746b48221f71.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 62655 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_e3bbc88d-57d3-49f3-b86f-6fd501064ec8.ini b/frpc/frpc_conf_e3bbc88d-57d3-49f3-b86f-6fd501064ec8.ini new file mode 100644 index 0000000..d065d9d --- /dev/null +++ b/frpc/frpc_conf_e3bbc88d-57d3-49f3-b86f-6fd501064ec8.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 54041 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_e5898d07-5522-47c2-9e36-2ac6b01ff0dc.ini b/frpc/frpc_conf_e5898d07-5522-47c2-9e36-2ac6b01ff0dc.ini new file mode 100644 index 0000000..6350cae --- /dev/null +++ b/frpc/frpc_conf_e5898d07-5522-47c2-9e36-2ac6b01ff0dc.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 54122 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_e5b33199-42dd-4229-88e4-be73d1306cc6.ini b/frpc/frpc_conf_e5b33199-42dd-4229-88e4-be73d1306cc6.ini new file mode 100644 index 0000000..6f907ec --- /dev/null +++ b/frpc/frpc_conf_e5b33199-42dd-4229-88e4-be73d1306cc6.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 64112 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_e67a0cb8-1d05-42c5-899a-cce16aa2c615.ini b/frpc/frpc_conf_e67a0cb8-1d05-42c5-899a-cce16aa2c615.ini new file mode 100644 index 0000000..f8b4890 --- /dev/null +++ b/frpc/frpc_conf_e67a0cb8-1d05-42c5-899a-cce16aa2c615.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 61559 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_e6f20469-d82c-4b28-898c-2c45715bc0f5.ini b/frpc/frpc_conf_e6f20469-d82c-4b28-898c-2c45715bc0f5.ini new file mode 100644 index 0000000..9d61e42 --- /dev/null +++ b/frpc/frpc_conf_e6f20469-d82c-4b28-898c-2c45715bc0f5.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 54408 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_e7350f2f-be36-4e79-916f-9f25045aca71.ini b/frpc/frpc_conf_e7350f2f-be36-4e79-916f-9f25045aca71.ini new file mode 100644 index 0000000..0a71e40 --- /dev/null +++ b/frpc/frpc_conf_e7350f2f-be36-4e79-916f-9f25045aca71.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 58684 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_e8554863-dd71-4beb-8ce9-b84cec938902.ini b/frpc/frpc_conf_e8554863-dd71-4beb-8ce9-b84cec938902.ini new file mode 100644 index 0000000..89351ba --- /dev/null +++ b/frpc/frpc_conf_e8554863-dd71-4beb-8ce9-b84cec938902.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 57890 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_e9c58436-3f2c-4d18-bde1-664437e283ad.ini b/frpc/frpc_conf_e9c58436-3f2c-4d18-bde1-664437e283ad.ini new file mode 100644 index 0000000..bbafdba --- /dev/null +++ b/frpc/frpc_conf_e9c58436-3f2c-4d18-bde1-664437e283ad.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 63392 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_e9e86d6b-0daa-4841-bcc1-7db73fc5030c.ini b/frpc/frpc_conf_e9e86d6b-0daa-4841-bcc1-7db73fc5030c.ini new file mode 100644 index 0000000..c220b77 --- /dev/null +++ b/frpc/frpc_conf_e9e86d6b-0daa-4841-bcc1-7db73fc5030c.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 55619 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_eaea2424-46b7-49ba-8a53-233f5911c782.ini b/frpc/frpc_conf_eaea2424-46b7-49ba-8a53-233f5911c782.ini new file mode 100644 index 0000000..a5f4528 --- /dev/null +++ b/frpc/frpc_conf_eaea2424-46b7-49ba-8a53-233f5911c782.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 63640 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_eb08cc07-9fee-4b6f-bdd0-9b9544470b86.ini b/frpc/frpc_conf_eb08cc07-9fee-4b6f-bdd0-9b9544470b86.ini new file mode 100644 index 0000000..adc0967 --- /dev/null +++ b/frpc/frpc_conf_eb08cc07-9fee-4b6f-bdd0-9b9544470b86.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 57641 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_eb2632ab-a4e6-469f-be4b-c81582356edf.ini b/frpc/frpc_conf_eb2632ab-a4e6-469f-be4b-c81582356edf.ini new file mode 100644 index 0000000..831cb6a --- /dev/null +++ b/frpc/frpc_conf_eb2632ab-a4e6-469f-be4b-c81582356edf.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 59096 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_ec2ae707-2025-46fd-ab45-930f251438fe.ini b/frpc/frpc_conf_ec2ae707-2025-46fd-ab45-930f251438fe.ini new file mode 100644 index 0000000..8f3eeeb --- /dev/null +++ b/frpc/frpc_conf_ec2ae707-2025-46fd-ab45-930f251438fe.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 51154 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_ec3495fa-6ebc-4d59-ac8f-5fdf0fea3b45.ini b/frpc/frpc_conf_ec3495fa-6ebc-4d59-ac8f-5fdf0fea3b45.ini new file mode 100644 index 0000000..bc077ef --- /dev/null +++ b/frpc/frpc_conf_ec3495fa-6ebc-4d59-ac8f-5fdf0fea3b45.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 64103 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_ec76270b-ea47-4671-8603-ade2ecb77195.ini b/frpc/frpc_conf_ec76270b-ea47-4671-8603-ade2ecb77195.ini new file mode 100644 index 0000000..88d88d7 --- /dev/null +++ b/frpc/frpc_conf_ec76270b-ea47-4671-8603-ade2ecb77195.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 65215 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_ecab29e7-87f5-49fb-b676-255fb3fdf56f.ini b/frpc/frpc_conf_ecab29e7-87f5-49fb-b676-255fb3fdf56f.ini new file mode 100644 index 0000000..99e8c72 --- /dev/null +++ b/frpc/frpc_conf_ecab29e7-87f5-49fb-b676-255fb3fdf56f.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 59883 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_ecbb0810-022f-431c-b5a4-60928581aa61.ini b/frpc/frpc_conf_ecbb0810-022f-431c-b5a4-60928581aa61.ini new file mode 100644 index 0000000..f7a2836 --- /dev/null +++ b/frpc/frpc_conf_ecbb0810-022f-431c-b5a4-60928581aa61.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 58549 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_ecc46fa8-43bd-4a85-8f20-5f24fa6beed5.ini b/frpc/frpc_conf_ecc46fa8-43bd-4a85-8f20-5f24fa6beed5.ini new file mode 100644 index 0000000..00f0be2 --- /dev/null +++ b/frpc/frpc_conf_ecc46fa8-43bd-4a85-8f20-5f24fa6beed5.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 59486 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_ece587f0-49b5-412f-a29c-3061130cbade.ini b/frpc/frpc_conf_ece587f0-49b5-412f-a29c-3061130cbade.ini new file mode 100644 index 0000000..401c547 --- /dev/null +++ b/frpc/frpc_conf_ece587f0-49b5-412f-a29c-3061130cbade.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 49214 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_ed109885-2a8c-4032-8009-e8286d421498.ini b/frpc/frpc_conf_ed109885-2a8c-4032-8009-e8286d421498.ini new file mode 100644 index 0000000..19c0fe7 --- /dev/null +++ b/frpc/frpc_conf_ed109885-2a8c-4032-8009-e8286d421498.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 59168 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_ee1f5811-1ff0-46d2-8b2b-5bf84535c0c7.ini b/frpc/frpc_conf_ee1f5811-1ff0-46d2-8b2b-5bf84535c0c7.ini new file mode 100644 index 0000000..35c3317 --- /dev/null +++ b/frpc/frpc_conf_ee1f5811-1ff0-46d2-8b2b-5bf84535c0c7.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[faff5f8a-4c95-4fcb-8613-b31edf2da6de] +type = tcp +local_ip = 127.0.0.1 +local_port = 64679 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_ee6d03ab-fa5b-40c5-afbb-34123ee60064.ini b/frpc/frpc_conf_ee6d03ab-fa5b-40c5-afbb-34123ee60064.ini new file mode 100644 index 0000000..f48f6dc --- /dev/null +++ b/frpc/frpc_conf_ee6d03ab-fa5b-40c5-afbb-34123ee60064.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 54336 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_eecf1841-0282-49a3-8513-520210242fb9.ini b/frpc/frpc_conf_eecf1841-0282-49a3-8513-520210242fb9.ini new file mode 100644 index 0000000..4426e9b --- /dev/null +++ b/frpc/frpc_conf_eecf1841-0282-49a3-8513-520210242fb9.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 57493 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_ef466bf6-81f7-422d-b9c7-b03cadc8e2cd.ini b/frpc/frpc_conf_ef466bf6-81f7-422d-b9c7-b03cadc8e2cd.ini new file mode 100644 index 0000000..a53512a --- /dev/null +++ b/frpc/frpc_conf_ef466bf6-81f7-422d-b9c7-b03cadc8e2cd.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 58683 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_efc337c2-7855-46b7-b272-96867677d845.ini b/frpc/frpc_conf_efc337c2-7855-46b7-b272-96867677d845.ini new file mode 100644 index 0000000..6ecc7af --- /dev/null +++ b/frpc/frpc_conf_efc337c2-7855-46b7-b272-96867677d845.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[9571f7cb-508f-471b-aea9-f3a1a893cc1c] +type = tcp +local_ip = 127.0.0.1 +local_port = 55602 +remote_port = 49970 + + diff --git a/frpc/frpc_conf_f0c46750-4bfb-408c-b692-1e961a53b54d.ini b/frpc/frpc_conf_f0c46750-4bfb-408c-b692-1e961a53b54d.ini new file mode 100644 index 0000000..acad6e9 --- /dev/null +++ b/frpc/frpc_conf_f0c46750-4bfb-408c-b692-1e961a53b54d.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 61084 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_f1cfc673-61ae-4b8a-b0e0-245e8d66c880.ini b/frpc/frpc_conf_f1cfc673-61ae-4b8a-b0e0-245e8d66c880.ini new file mode 100644 index 0000000..2ac2ba1 --- /dev/null +++ b/frpc/frpc_conf_f1cfc673-61ae-4b8a-b0e0-245e8d66c880.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 57998 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_f1fd42f8-894b-4b2e-80ca-471a8ee671e9.ini b/frpc/frpc_conf_f1fd42f8-894b-4b2e-80ca-471a8ee671e9.ini new file mode 100644 index 0000000..cb8f056 --- /dev/null +++ b/frpc/frpc_conf_f1fd42f8-894b-4b2e-80ca-471a8ee671e9.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 52759 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_f22cef95-6bc5-4bc3-8e21-653a456fdde8.ini b/frpc/frpc_conf_f22cef95-6bc5-4bc3-8e21-653a456fdde8.ini new file mode 100644 index 0000000..6f35a3a --- /dev/null +++ b/frpc/frpc_conf_f22cef95-6bc5-4bc3-8e21-653a456fdde8.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 62983 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_f4c47bee-f798-4235-a850-ce007fe0a460.ini b/frpc/frpc_conf_f4c47bee-f798-4235-a850-ce007fe0a460.ini new file mode 100644 index 0000000..413f742 --- /dev/null +++ b/frpc/frpc_conf_f4c47bee-f798-4235-a850-ce007fe0a460.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 65263 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_f5abed2d-77d9-4619-896b-22e49098aee2.ini b/frpc/frpc_conf_f5abed2d-77d9-4619-896b-22e49098aee2.ini new file mode 100644 index 0000000..90345e8 --- /dev/null +++ b/frpc/frpc_conf_f5abed2d-77d9-4619-896b-22e49098aee2.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 57891 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_f5cf4428-cb75-4012-bb8e-017058d0b71d.ini b/frpc/frpc_conf_f5cf4428-cb75-4012-bb8e-017058d0b71d.ini new file mode 100644 index 0000000..4b544d9 --- /dev/null +++ b/frpc/frpc_conf_f5cf4428-cb75-4012-bb8e-017058d0b71d.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 57108 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_f68fb609-003c-4c43-8b6d-9866782a9f50.ini b/frpc/frpc_conf_f68fb609-003c-4c43-8b6d-9866782a9f50.ini new file mode 100644 index 0000000..b58917a --- /dev/null +++ b/frpc/frpc_conf_f68fb609-003c-4c43-8b6d-9866782a9f50.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 54186 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_f7f7780b-0e4f-445a-917c-5e16fff5e850.ini b/frpc/frpc_conf_f7f7780b-0e4f-445a-917c-5e16fff5e850.ini new file mode 100644 index 0000000..fa4d6be --- /dev/null +++ b/frpc/frpc_conf_f7f7780b-0e4f-445a-917c-5e16fff5e850.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 65262 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_f949129e-e83d-48e4-b234-aaf8d6721544.ini b/frpc/frpc_conf_f949129e-e83d-48e4-b234-aaf8d6721544.ini new file mode 100644 index 0000000..67476be --- /dev/null +++ b/frpc/frpc_conf_f949129e-e83d-48e4-b234-aaf8d6721544.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 57328 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_f94ee2cc-ddd0-4911-99ca-367e3375ae44.ini b/frpc/frpc_conf_f94ee2cc-ddd0-4911-99ca-367e3375ae44.ini new file mode 100644 index 0000000..df3af15 --- /dev/null +++ b/frpc/frpc_conf_f94ee2cc-ddd0-4911-99ca-367e3375ae44.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 65216 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_f9b8ba2b-db0c-4583-b256-fdc8014801b3.ini b/frpc/frpc_conf_f9b8ba2b-db0c-4583-b256-fdc8014801b3.ini new file mode 100644 index 0000000..b50cefb --- /dev/null +++ b/frpc/frpc_conf_f9b8ba2b-db0c-4583-b256-fdc8014801b3.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 65345 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_fb90711d-f010-4378-80a5-215d34e5fb54.ini b/frpc/frpc_conf_fb90711d-f010-4378-80a5-215d34e5fb54.ini new file mode 100644 index 0000000..b8497e9 --- /dev/null +++ b/frpc/frpc_conf_fb90711d-f010-4378-80a5-215d34e5fb54.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 58638 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_fc1b0bbe-f520-46ff-8cc5-791fdf8d6424.ini b/frpc/frpc_conf_fc1b0bbe-f520-46ff-8cc5-791fdf8d6424.ini new file mode 100644 index 0000000..e9ef139 --- /dev/null +++ b/frpc/frpc_conf_fc1b0bbe-f520-46ff-8cc5-791fdf8d6424.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 60958 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_fc41b265-53e2-4909-acce-1ffc662961d5.ini b/frpc/frpc_conf_fc41b265-53e2-4909-acce-1ffc662961d5.ini new file mode 100644 index 0000000..8bb3053 --- /dev/null +++ b/frpc/frpc_conf_fc41b265-53e2-4909-acce-1ffc662961d5.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 49959 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_fc4f568c-9e9e-4a5d-86f7-5ce60b5086e9.ini b/frpc/frpc_conf_fc4f568c-9e9e-4a5d-86f7-5ce60b5086e9.ini new file mode 100644 index 0000000..c08dcdd --- /dev/null +++ b/frpc/frpc_conf_fc4f568c-9e9e-4a5d-86f7-5ce60b5086e9.ini @@ -0,0 +1,13 @@ +[common] +server_addr = cn-he-plc-2.ofalias.com +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 52770 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_fc6e3cb0-3448-4e15-8824-78af492e20ce.ini b/frpc/frpc_conf_fc6e3cb0-3448-4e15-8824-78af492e20ce.ini new file mode 100644 index 0000000..d0917c4 --- /dev/null +++ b/frpc/frpc_conf_fc6e3cb0-3448-4e15-8824-78af492e20ce.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 59431 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_fc7138d7-a84e-4aba-814d-b029f42a30f4.ini b/frpc/frpc_conf_fc7138d7-a84e-4aba-814d-b029f42a30f4.ini new file mode 100644 index 0000000..c940b3c --- /dev/null +++ b/frpc/frpc_conf_fc7138d7-a84e-4aba-814d-b029f42a30f4.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 51890 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_ff1c739b-9bea-4093-b40b-d0a2a840d69b.ini b/frpc/frpc_conf_ff1c739b-9bea-4093-b40b-d0a2a840d69b.ini new file mode 100644 index 0000000..dc36acc --- /dev/null +++ b/frpc/frpc_conf_ff1c739b-9bea-4093-b40b-d0a2a840d69b.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 57374 +remote_port = 49968 + + diff --git a/frpc/frpc_conf_ff1cf407-6c17-4b13-a009-8a2336a3005d.ini b/frpc/frpc_conf_ff1cf407-6c17-4b13-a009-8a2336a3005d.ini new file mode 100644 index 0000000..2e82676 --- /dev/null +++ b/frpc/frpc_conf_ff1cf407-6c17-4b13-a009-8a2336a3005d.ini @@ -0,0 +1,13 @@ +[common] +server_addr = 07f4acdef99b.ofalias.net +server_port = 7201 +token = nXwiBVvMKS7EXm7j +connect_server_local_ip = 0.0.0.0 + +[knelauncher03] +type = tcp +local_ip = 127.0.0.1 +local_port = 58271 +remote_port = 49969 + + diff --git a/frpc/frpc_conf_ff876a82-70ee-4946-844e-5fd16532a46e.ini b/frpc/frpc_conf_ff876a82-70ee-4946-844e-5fd16532a46e.ini new file mode 100644 index 0000000..7dc1741 --- /dev/null +++ b/frpc/frpc_conf_ff876a82-70ee-4946-844e-5fd16532a46e.ini @@ -0,0 +1,13 @@ +[common] +server_addr = frp.104300.xyz +server_port = 7000 +token = www.126126.xyz +connect_server_local_ip = 0.0.0.0 + +[knelauncher01] +type = tcp +local_ip = 127.0.0.1 +local_port = 58252 +remote_port = 49968 + + diff --git a/frpc/frpc_linux_amd64 b/frpc/frpc_linux_amd64 new file mode 100644 index 0000000..6643f70 Binary files /dev/null and b/frpc/frpc_linux_amd64 differ diff --git a/frpc/frpc_windows_amd64.exe b/frpc/frpc_windows_amd64.exe new file mode 100644 index 0000000..a72c5f4 Binary files /dev/null and b/frpc/frpc_windows_amd64.exe differ diff --git a/libs/KLALB3.3.jar b/libs/KLALB3.3.jar new file mode 100644 index 0000000..ee14513 Binary files /dev/null and b/libs/KLALB3.3.jar differ diff --git a/libs/OpenNBT-1.5.jar b/libs/OpenNBT-1.5.jar new file mode 100644 index 0000000..2f9a80b Binary files /dev/null and b/libs/OpenNBT-1.5.jar differ diff --git a/libs/gson-2.1.jar b/libs/gson-2.1.jar new file mode 100644 index 0000000..b85f091 Binary files /dev/null and b/libs/gson-2.1.jar differ diff --git a/libs/ini4j.jar b/libs/ini4j.jar new file mode 100644 index 0000000..53d5715 Binary files /dev/null and b/libs/ini4j.jar differ diff --git a/src/assets/IPV6.png b/src/assets/IPV6.png new file mode 100644 index 0000000..4269412 Binary files /dev/null and b/src/assets/IPV6.png differ diff --git a/src/assets/KNEL.png b/src/assets/KNEL.png new file mode 100644 index 0000000..4fa4e92 Binary files /dev/null and b/src/assets/KNEL.png differ diff --git a/src/assets/SourceHanSansCN-Light.otf b/src/assets/SourceHanSansCN-Light.otf new file mode 100644 index 0000000..1cff8e6 Binary files /dev/null and b/src/assets/SourceHanSansCN-Light.otf differ diff --git a/src/assets/add.png b/src/assets/add.png new file mode 100644 index 0000000..56ab771 Binary files /dev/null and b/src/assets/add.png differ diff --git a/src/assets/back0.jpg b/src/assets/back0.jpg new file mode 100644 index 0000000..e29383c Binary files /dev/null and b/src/assets/back0.jpg differ diff --git a/src/assets/back1.jpg b/src/assets/back1.jpg new file mode 100644 index 0000000..0b9b4d6 Binary files /dev/null and b/src/assets/back1.jpg differ diff --git a/src/assets/back10.jpg b/src/assets/back10.jpg new file mode 100644 index 0000000..7f94541 Binary files /dev/null and b/src/assets/back10.jpg differ diff --git a/src/assets/back11.jpg b/src/assets/back11.jpg new file mode 100644 index 0000000..54d4b3e Binary files /dev/null and b/src/assets/back11.jpg differ diff --git a/src/assets/back2.jpg b/src/assets/back2.jpg new file mode 100644 index 0000000..ca1bae3 Binary files /dev/null and b/src/assets/back2.jpg differ diff --git a/src/assets/back3.jpg b/src/assets/back3.jpg new file mode 100644 index 0000000..04a3598 Binary files /dev/null and b/src/assets/back3.jpg differ diff --git a/src/assets/back4.jpg b/src/assets/back4.jpg new file mode 100644 index 0000000..80b6ce2 Binary files /dev/null and b/src/assets/back4.jpg differ diff --git a/src/assets/back5.jpg b/src/assets/back5.jpg new file mode 100644 index 0000000..64460d0 Binary files /dev/null and b/src/assets/back5.jpg differ diff --git a/src/assets/back6.jpg b/src/assets/back6.jpg new file mode 100644 index 0000000..7f94541 Binary files /dev/null and b/src/assets/back6.jpg differ diff --git a/src/assets/back7.jpg b/src/assets/back7.jpg new file mode 100644 index 0000000..261301c Binary files /dev/null and b/src/assets/back7.jpg differ diff --git a/src/assets/back8.jpg b/src/assets/back8.jpg new file mode 100644 index 0000000..591f552 Binary files /dev/null and b/src/assets/back8.jpg differ diff --git a/src/assets/back9.jpg b/src/assets/back9.jpg new file mode 100644 index 0000000..54d4b3e Binary files /dev/null and b/src/assets/back9.jpg differ diff --git a/src/assets/bedrock.png b/src/assets/bedrock.png new file mode 100644 index 0000000..1643c99 Binary files /dev/null and b/src/assets/bedrock.png differ diff --git a/src/assets/bookshelf.png b/src/assets/bookshelf.png new file mode 100644 index 0000000..7dc963f Binary files /dev/null and b/src/assets/bookshelf.png differ diff --git a/src/assets/check.png b/src/assets/check.png new file mode 100644 index 0000000..08a272b Binary files /dev/null and b/src/assets/check.png differ diff --git a/src/assets/cleartext.png b/src/assets/cleartext.png new file mode 100644 index 0000000..469fa55 Binary files /dev/null and b/src/assets/cleartext.png differ diff --git a/src/assets/close.png b/src/assets/close.png new file mode 100644 index 0000000..4aa652d Binary files /dev/null and b/src/assets/close.png differ diff --git a/src/assets/command.png b/src/assets/command.png new file mode 100644 index 0000000..005799e Binary files /dev/null and b/src/assets/command.png differ diff --git a/src/assets/connect.png b/src/assets/connect.png new file mode 100644 index 0000000..e885f51 Binary files /dev/null and b/src/assets/connect.png differ diff --git a/src/assets/craft_table.png b/src/assets/craft_table.png new file mode 100644 index 0000000..4574051 Binary files /dev/null and b/src/assets/craft_table.png differ diff --git a/src/assets/dashboard-2-fill.png b/src/assets/dashboard-2-fill.png new file mode 100644 index 0000000..505f21a Binary files /dev/null and b/src/assets/dashboard-2-fill.png differ diff --git a/src/assets/delete-bin-fill.png b/src/assets/delete-bin-fill.png new file mode 100644 index 0000000..b7ff677 Binary files /dev/null and b/src/assets/delete-bin-fill.png differ diff --git a/src/assets/diamond_sword.png b/src/assets/diamond_sword.png new file mode 100644 index 0000000..0aa8be0 Binary files /dev/null and b/src/assets/diamond_sword.png differ diff --git a/src/assets/down.png b/src/assets/down.png new file mode 100644 index 0000000..311a87f Binary files /dev/null and b/src/assets/down.png differ diff --git a/src/assets/download.png b/src/assets/download.png new file mode 100644 index 0000000..2129f90 Binary files /dev/null and b/src/assets/download.png differ diff --git a/src/assets/edit-fill.png b/src/assets/edit-fill.png new file mode 100644 index 0000000..afb8f5e Binary files /dev/null and b/src/assets/edit-fill.png differ diff --git a/src/assets/error.jpg b/src/assets/error.jpg new file mode 100644 index 0000000..8f9a4aa Binary files /dev/null and b/src/assets/error.jpg differ diff --git a/src/assets/fabric.png b/src/assets/fabric.png new file mode 100644 index 0000000..aa2b87f Binary files /dev/null and b/src/assets/fabric.png differ diff --git a/src/assets/folder-2-fill.png b/src/assets/folder-2-fill.png new file mode 100644 index 0000000..5aac79e Binary files /dev/null and b/src/assets/folder-2-fill.png differ diff --git a/src/assets/forge.png b/src/assets/forge.png new file mode 100644 index 0000000..c79eec1 Binary files /dev/null and b/src/assets/forge.png differ diff --git a/src/assets/furnace.png b/src/assets/furnace.png new file mode 100644 index 0000000..4fc95fc Binary files /dev/null and b/src/assets/furnace.png differ diff --git a/src/assets/gamemanager.jpg b/src/assets/gamemanager.jpg new file mode 100644 index 0000000..862940a Binary files /dev/null and b/src/assets/gamemanager.jpg differ diff --git a/src/assets/gmera.jpg b/src/assets/gmera.jpg new file mode 100644 index 0000000..6df8611 Binary files /dev/null and b/src/assets/gmera.jpg differ diff --git a/src/assets/grass.png b/src/assets/grass.png new file mode 100644 index 0000000..2380963 Binary files /dev/null and b/src/assets/grass.png differ diff --git a/src/assets/index.class b/src/assets/index.class new file mode 100644 index 0000000..9ff1fdf Binary files /dev/null and b/src/assets/index.class differ diff --git a/src/assets/knemc.png b/src/assets/knemc.png new file mode 100644 index 0000000..23af240 Binary files /dev/null and b/src/assets/knemc.png differ diff --git a/src/assets/logo.png b/src/assets/logo.png new file mode 100644 index 0000000..3206b73 Binary files /dev/null and b/src/assets/logo.png differ diff --git a/src/assets/logo2.jpg b/src/assets/logo2.jpg new file mode 100644 index 0000000..0dd6ad9 Binary files /dev/null and b/src/assets/logo2.jpg differ diff --git a/src/assets/logo3.png b/src/assets/logo3.png new file mode 100644 index 0000000..714df1c Binary files /dev/null and b/src/assets/logo3.png differ diff --git a/src/assets/logoold.jpg b/src/assets/logoold.jpg new file mode 100644 index 0000000..ebcda57 Binary files /dev/null and b/src/assets/logoold.jpg differ diff --git a/src/assets/map.png b/src/assets/map.png new file mode 100644 index 0000000..1381e21 Binary files /dev/null and b/src/assets/map.png differ diff --git a/src/assets/maxium.png b/src/assets/maxium.png new file mode 100644 index 0000000..94fd6aa Binary files /dev/null and b/src/assets/maxium.png differ diff --git a/src/assets/minium.png b/src/assets/minium.png new file mode 100644 index 0000000..41b38cd Binary files /dev/null and b/src/assets/minium.png differ diff --git a/src/assets/network.png b/src/assets/network.png new file mode 100644 index 0000000..02d522b Binary files /dev/null and b/src/assets/network.png differ diff --git a/src/assets/network0.jpg b/src/assets/network0.jpg new file mode 100644 index 0000000..a66eb50 Binary files /dev/null and b/src/assets/network0.jpg differ diff --git a/src/assets/question-fill.png b/src/assets/question-fill.png new file mode 100644 index 0000000..20a52b4 Binary files /dev/null and b/src/assets/question-fill.png differ diff --git a/src/assets/refresh.png b/src/assets/refresh.png new file mode 100644 index 0000000..06de412 Binary files /dev/null and b/src/assets/refresh.png differ diff --git a/src/assets/s.png b/src/assets/s.png new file mode 100644 index 0000000..e97d3cf Binary files /dev/null and b/src/assets/s.png differ diff --git a/src/assets/sdt.png b/src/assets/sdt.png new file mode 100644 index 0000000..3a57720 Binary files /dev/null and b/src/assets/sdt.png differ diff --git a/src/assets/start.png b/src/assets/start.png new file mode 100644 index 0000000..c6badc1 Binary files /dev/null and b/src/assets/start.png differ diff --git a/src/assets/stop.png b/src/assets/stop.png new file mode 100644 index 0000000..227d801 Binary files /dev/null and b/src/assets/stop.png differ diff --git a/src/assets/title.png b/src/assets/title.png new file mode 100644 index 0000000..5273cbd Binary files /dev/null and b/src/assets/title.png differ diff --git a/src/knemcl_en_US.properties b/src/knemcl_en_US.properties new file mode 100644 index 0000000..b195459 --- /dev/null +++ b/src/knemcl_en_US.properties @@ -0,0 +1,188 @@ +mainpage = Home +saveok = Settings saved! +savenote = Press Enter after modifying settings +numberonly = Only numbers are allowed! +nonull = Input cannot be empty! +nonegative = Input cannot be negative! +launchclient = Launch Client +ok = OK +cancel = Cancel +launchmc = Launch Minecraft +install = Install +installclient = Install Client +installserver = Install Server +manageclient = Manage Client +manageserver = Manage Server +addconfig = New Configuration +editconfig = Edit Configuration +error = Error +deleteconfirm = Delete Confirmation +exists = Name already exists! +copynewname = Please enter a new name for copying +warning = Warning +nojava = Java matching the version not found, please install Java first +vernonull = Launch version cannot be empty! Please install the game first +console = Console +prepare = Ready +waiting = Waiting for other tasks to complete +starting = Process starting... +destoryed = Process forcibly terminated +running = Running +ended = Process terminated +crashed = Game crashed! +openconsole = Open Debug Console +launchtime = Launch time: +remove = Remove from list +launchfailed = Launch failed! +watingforlaunch = Waiting for the game to start +launching = Launching +destory = Force Stop +launch = Launch Process +launcht = Launch: +tryconnect = Trying the +trycount = th connection +downloadfaild = Download failed +downloadsuccess = Download successful +writingfile = Writing to disk +checkconfig = Checking integrity +preparedowngroup = Preparing to download +downloadlibraries = Downloading library files +checkdone = Check complete +downloadcore = Downloading core files +downloadassetsindex = Downloading asset index +downloadassets = Downloading asset files +checking = Checking game integrity +saving = Saving configuration +clientmemory = Client memory allocation (MB) +deleteconfigconfirm = Are you sure you want to delete the configuration? +removeuserconfrim = Are you sure you want to remove the account: +removeuser = Remove Account +accounts = Accounts +downloadfailed = Download failed +connets = Online Lobby +adduser = Add Account +checkuser = Verify Account +edituser = Edit Account +loginmode = Login Mode +username = Username +loginuser = Log in with Account +old = Legacy +release = Release +snapshot = Snapshot +chooseversiion = Choose Version +downloadversion = Download Version: +version = Version +browse = Browse +choose = Choose +installpath = Installation Directory +installlocation = Installation Location +createconfig = Create Configuration +launchserver = Launch Server +tools = Toolbox +resourceplatform = Resource Platform +client = Client +server = Server +start = Start Process +destroy = Force Terminate Process +clearconsole = Clear Console Content +unknownerror = Unknown Error! +executing = Executing +executed = Task completed +filenotexist = File does not exist +dirnotexist = Folder does not exist +openinstalldir = Open Installation Folder +deleteconfig = Delete Configuration +selectinstalldir = Select Installation Directory +selectjavadir = Select java +networksetting = Network Settings +commandline = Command Line: +frpnode = Network Port/FRP Node (for server and multiplayer) +progargs = Program Arguments +vmargs = VM Arguments +advancesets = Advanced Settings +basicsets = Basic Settings +configname = Configuration Name +joinserver = Join Server +authing = Authenticating +windowsetting = Window Settings +background = Home Page Background Image (leave empty for default) +usesource = Download Source:Official Source,BMCLAPI,MCBBS +uselibrary = Libraries Used:gson,KLALB,javassist,ini4j,openNBT +ignorecheck = Ignore Integrity Check +loginserver = Login Server +join = Join +latestserver = KNEMCL-Recently Joined Server +klalb = KLALB Accelerator +about = About +opencode = This software is open-source +themecolor = UI Theme Color (leave empty for default) (takes effect after restart the launcher) +select = Select +serverhall = Server Hall +imagefile = Image File +background2 = Select Home Page Background Image +uuidinputerror = Incorrect UUID input! +uuid = User UUID (leave empty for auto-generation) +offline = Offline Login +online = Official Login +authmsa = Authenticate Official +copy = Copy +authmsainfo = Official Login Process:\n1. Copy the code displayed below and paste it into the Microsoft login webpage that pops up\n2. Follow the verification steps as instructed on the webpage\n3. If the webpage asks for authorization, please choose "Yes"\n4. If the webpage displays a success message, wait for a few seconds, this window will close automatically. You can then save the configuration. +pleaseauth = Please complete the official verification first! +usrnonnull = Account cannot be empty! Please add an account in the Account Management tab. +networkerror = Network Error +pleasecheckaccount = Please check on the official website if your Minecraft account has been created and your username has been set. +autoselect = Auto-Match +versionindependent = Version Isolation +unknownhost = Unable to resolve host +cantconnect = Unable to connect to the server +autojoinnone = Do not automatically join the game +autojoinsave = Automatically join the save +autojoinserver = Automatically join the server +serveraddress = Server Address +savepath = Save Path +cantfindsave = Unable to find the save +launchsetting = Launch Settings +enableklalb = Enable KLALB network acceleration for servers that support it +authconnectfailed = Failed to connect to the official verification server +minecraftinstallpath = Minecraft Installation Path +javasetting = Java Settings +javapath = Java Path +gameprocessmanage = Game Process Management +launchertask = Launcher Tasks +loadbackgroundfailed = Failed to load background image +setting = Settings +launchversion = Launch Version +language=Language +clicktoopen=Click +add=Add +remove=Remove +edit=Edit +addfrpnode=Add Network Port/FRP Node +defaultport=Default Port +frp=FRP Proxy +dynfrp=FRP Proxy(Dynamic remote port) +relayservertointernet=Relay local server to the Internet +openingport=Opening port: +yourserveraddr=Your server address +refresh=Refresh +javanotfound=Can not find Java environment +process=Process +started=Started +stopped=Stopped +forcestopped=Stopped forcibly +exitcode=,Exit code: +unknown=Unknown +checkinggameupdate=Checking game update +loadingversionlist=Loading version list +license=Opensource license:WTFPL +search=Search +playercountasc=Sort by player count ascending +playercountdesc=Sort by player count descending +latencyasc=Sort by network latency ascending +latencydesc=Sort by network latency descending +scaning=Scanning servers list +scanonly=Scan only +sortbysearch=Search by keyword +addresscopied=Address has been copied +connectwarning=The server is not set up by KNEMinecraftLauncher,you must inform other players of your access source and obtain consent after entering the server. +scan=Scan \ No newline at end of file diff --git a/src/knemcl_zh_CN.properties b/src/knemcl_zh_CN.properties new file mode 100644 index 0000000..4384d24 --- /dev/null +++ b/src/knemcl_zh_CN.properties @@ -0,0 +1,188 @@ +mainpage=首页 +saveok=设置已保存! +savenote=修改完设置后请按回车 +numberonly=只能输入数字! +nonull=输入不能为空! +nonegative = 输入不能为负! +launchclient = 启动客户端 +ok=确定 +cancel=取消 +launchmc = 启动Minecraft +install = 安装 +installclient = 安装客户端 +installserver = 安装服务端 +manageclient = 管理客户端 +manageserver = 管理服务端 +addconfig = 新建配置 +editconfig = 编辑配置 +error = 错误 +deleteconfirm = 删除确认 +exists = 名称已存在! +copynewname = 请输入复制后的新名称 +warning = 警告 +nojava = 找不到版本匹配的java,请先安装java +vernonull = 启动版本不能为空!请先安装游戏 +console = 控制台 +prepare = 就绪 +waiting = 等待其他任务完成 +starting = 进程启动中... +destoryed = 进程已强制终止 +running = 正在运行 +ended = 进程已终止 +crashed = 游戏崩溃! +openconsole = 打开调试控制台 +launchtime = 本次启动用时: +remove = 从列表中移除 +launchfailed = 启动失败! +watingforlaunch = 等待游戏启动 +launching = 启动中 +destory = 强行停止 +launch = 启动进程 +launcht = 启动: +tryconnect = 正在尝试第 +trycount = 次连接 +downloadfaild = 下载失败 +downloadsuccess = 下载成功 +writingfile = 写入磁盘中 +checkconfig = 检查完整性 +preparedowngroup = 准备下载 +downloadlibraries = 下载依赖库文件 +checkdone = 检查完毕 +downloadcore = 下载核心文件 +downloadassetsindex = 下载资源索引 +downloadassets = 下载资源文件 +checking = 正在检查游戏完整性 +saving = 保存配置 +clientmemory = 客户端内存分配(MB) +deleteconfigconfirm = 确定要删除配置? +removeuserconfrim = 确定要移除账号: +removeuser = 移除账号 +accounts = 账号 +downloadfailed = 下载失败 +connets = 联机大厅 +adduser = 添加账号 +checkuser = 验证账号 +edituser = 编辑账号 +loginmode = 登录模式 +username = 用户名 +loginuser = 登录账号 +old = 远古版 +release = 正式版 +snapshot = 快照版 +chooseversiion = 选择版本 +downloadversion = 下载版本: +version = 版本 +browse = 浏览 +choose = 选择 +installpath = 安装目录 +installlocation = 安装位置 +createconfig = 创建配置 +launchserver = 启动服务端 +tools = 工具箱 +resourceplatform = 资源平台 +client = 客户端 +server = 服务端 +start = 启动进程 +destroy = 强制终止进程 +clearconsole = 清空控制台内容 +unknownerror = 未知错误! +executing = 正在执行 +executed = 任务已完成 +filenotexist = 文件不存在 +dirnotexist = 文件夹不存在 +openinstalldir = 打开安装文件夹 +deleteconfig = 删除配置 +selectinstalldir = 选择安装目录 +selectjavadir = 选择java +networksetting = 网络设置 +commandline = 命令行: +frpnode = 网络端口/FRP节点(用于开服联机) +progargs = 程序自变量 +vmargs = VM自变量 +advancesets = 高级设置 +basicsets = 基本设置 +configname = 配置名称 +joinserver = 加入服务器 +authing = 正在验证 +windowsetting = 窗口设置 +background = 首页背景图片(不填为默认) +usesource = 使用的下载源:官方源、BMCLAPI、MCBBS +uselibrary = 使用的库:gson、KLALB、javassist、ini4j、openNBT +ignorecheck = 忽略完整性检查 +loginserver = 登录服务器 +join = 加入服务器 +latestserver = KNE启动器-最近登录的服务器 +klalb = KLALB加速器 +about = 关于 +opencode = 本软件为开源软件 +themecolor = 界面主题颜色(不填为默认)(下次打开启动器时生效) +select = 选择 +serverhall = 服务器大厅 +imagefile = 图片文件 +background2 = 选择首页背景图片 +uuidinputerror = UUID输入有误! +uuid = 用户UUID(不填则为自动生成) +offline = 离线登录 +online = 正版登录 +authmsa = 验证正版 +copy = 复制 +authmsainfo = 正版登录流程:\n1.复制下面显示的代码并粘贴到弹出的微软登录网页\n2.按网页提示流程进行验证操作\n3.若网页提示是否授权,请选择“是”\n4若网页提示成功,请等待几秒,本窗口会自行关闭,此时保存配置即可 +pleaseauth = 请先进行正版验证! +usrnonnull = 账号不能为空!请到账号管理选项卡添加账号 +networkerror = 网络错误 +pleasecheckaccount = 请到官网检查你的Minecraft账号是否已经完成创建并设置好用户名 +autoselect = 自动匹配 +versionindependent = 版本隔离 +unknownhost = 无法解析主机 +cantconnect = 无法连接到服务器 +autojoinnone = 不自动加入游戏 +autojoinsave = 自动加入存档 +autojoinserver = 自动加入服务器 +serveraddress = 服务器地址 +savepath = 存档地址 +cantfindsave = 无法找到存档 +launchsetting = 启动设置 +enableklalb = 对支持加速器的服务器启用KLALB网络加速 +authconnectfailed = 连接正版验证服务器失败 +minecraftinstallpath = Minecraft安装路径 +javasetting = Java设置 +javapath = Java路径 +gameprocessmanage = 游戏进程管理 +launchertask = 启动器任务 +loadbackgroundfailed = 载入背景图片失败 +setting = 设置 +launchversion=启动版本 +language=语言 +clicktoopen=点击进入 +add=添加 +remove=移除 +edit=编辑 +addfrpnode=添加网络端口/FRP节点 +defaultport=标准端口 +frp=FRP内网穿透 +dynfrp=FRP内网穿透(动态远程端口) +relayservertointernet=将局域网服务器映射到互联网 +openingport=开放端口 +yourserveraddr=你的服务器地址 +refresh=刷新 +javanotfound=无法找到Java环境 +process=进程 +started=已启动 +stopped=已终止 +forcestopped=已强制终止 +exitcode=,退出值: +unknown=未知 +checkinggameupdate=检查游戏更新 +loadingversionlist=加载版本列表 +license=开源许可证:WTFPL +search=搜索 +playercountasc=按玩家数量升序排序 +playercountdesc=按玩家数量降序排序 +latencyasc=按网络延迟升序排序 +latencydesc=按网络延迟降序排序 +scaning=扫描服务器列表 +scanonly=仅扫描 +sortbysearch=按关键词搜索 +addresscopied=地址已复制 +connectwarning=此服务器不是由KNEMCL启动器启动,进入服务器后必须告知其他玩家你的访问来源并获得同意。 +scan=扫描 \ No newline at end of file diff --git a/src/org/kne/console/CommandLine.java b/src/org/kne/console/CommandLine.java new file mode 100644 index 0000000..1fd7818 --- /dev/null +++ b/src/org/kne/console/CommandLine.java @@ -0,0 +1,64 @@ +package org.kne.console; + +import java.util.*; +import java.io.*; +public class CommandLine implements Serializable { + /** + * + */ + private static final long serialVersionUID = 1L; + private File program; + private File workdir; + private List args=new ArrayList<>(); + + + public File getWorkdir() { + return workdir; + } + public void setWorkdir(File workdir) { + this.workdir = workdir; + } + public File getProgram() { + return program; + } + public void setProgram(File progarm) { + this.program = progarm; + } + public List getArgs() { + return args; + } + public List make(){ + List l=new ArrayList(); + l.add(program.getAbsolutePath()); + List lx=new ArrayList(); + makeArgs(lx); + for (int i = 0; il) { + l.addAll(args); + } + @Override + public String toString() { + StringBuilder sbd=new StringBuilder(); + List l=make(); + for (int i = 0; ijargs=new ArrayList(); + private Listcps=new ArrayList(); + public String getMainclass() { + return mainclass; + } + + public void setMainclass(String mainclass) { + this.mainclass = mainclass; + } + + public int getXms() { + return xms; + } + + public void setXms(int xms) { + this.xms = xms; + } + + public int getXmx() { + return xmx; + } + + public void setXmx(int xmx) { + this.xmx = xmx; + } + + public File getNativepath() { + return nativepath; + } + + public void setNativepath(File nativepath) { + this.nativepath = nativepath; + } + + public List getCps() { + return cps; + } + + public List getJargs() { + return jargs; + } + protected void makeJargs(List l) { + l.addAll(jargs); + } + /** + * + */ + private static final long serialVersionUID = 1L; + + @Override + protected void makeArgs(List l) { + super.makeArgs(l); + l.add(new StringBuilder("-Xms").append(xms).append('M').toString()); + l.add(new StringBuilder("-Xmx").append(xmx).append('M').toString()); + if(nativepath!=null){ + l.add(new StringBuilder("-Djava.library.path=").append(nativepath.getAbsolutePath()).toString()); + //l.add(new StringBuilder("-Dorg.lwjgl.librarypath=").append(nativepath.getAbsolutePath()).toString()); + } + if(!cps.isEmpty()){ + l.add("-cp"); + l.add(makeClassPath(cps)); + } + l.add(mainclass); + makeJargs(l); + } + + public static String makeClassPath(List cps2) { + StringBuilder stb=new StringBuilder(); + Iteratorit=cps2.iterator(); + while (it.hasNext()) { + String type = it.next(); + //stb.append('\"'); + stb.append(type); + //stb.append('\"'); + if(it.hasNext()) + stb.append(File.pathSeparatorChar); + } + return stb.toString(); + } + +} diff --git a/src/org/kne/console/ProcessConsole.java b/src/org/kne/console/ProcessConsole.java new file mode 100644 index 0000000..e686b47 --- /dev/null +++ b/src/org/kne/console/ProcessConsole.java @@ -0,0 +1,397 @@ +package org.kne.console; + +import javax.swing.JButton; +import java.awt.*; +import javax.swing.JTextField; +import java.io.*; +import java.awt.event.*; +import javax.swing.*; +import javax.swing.border.LineBorder; +import javax.swing.event.*; +import javax.swing.text.*; +import java.util.*; +import java.util.List; +import java.util.function.Consumer; +import org.kne.ui.XFrame; +import org.knemcl.main.CONST; +import org.knemcl.ui.UIEnv; + +public class ProcessConsole extends XFrame { + private List inputcache=new ArrayList(); + private int idx; + + private JTextField input; + private ProcessItem item; + private Document doc; + private SimpleAttributeSet abs0,abs1,abs2,abs3,abs4,abs5,abs6; + private JButton start; + private JButton destory; + private JToggleButton restartatcrash; + private JToggleButton scrlock; + private JScrollPane jsp; + private JTextPane textPane; + + private InputStream out,err; + private PrintWriter in; + + private StringBuffer sbo=new StringBuffer(); + private StringBuffer sbe=new StringBuffer(); + private List>conoutlistener=new Vector>(); + private List>conerrlistener=new Vector>(); + public ProcessConsole() { + setTitleColor(new Color(0,0,0,128)); + getTitlelabel().setForeground(Color.WHITE); + getTitlelabel().setFont(UIEnv.getFont().deriveFont(16.0f)); + JPanel panel = new JPanel(); + panel.setBackground(Color.LIGHT_GRAY); + FlowLayout flowLayout = (FlowLayout) panel.getLayout(); + flowLayout.setAlignment(FlowLayout.LEFT); + getContentPane().add(panel, BorderLayout.NORTH); + + start = new JButton(); + start.setToolTipText(UIEnv.getRsb().getString("start")); + start.setIcon(new ImageIcon(ProcessConsole.class.getResource("/assets/start.png"))); + start.setPreferredSize(new Dimension(25, 25)); + panel.add(start); + start.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + if(item!=null) { + try { + item.start(); + } catch (InterruptedException e1) { + // TODO 自动生成的 catch 块 + e1.printStackTrace(); + } catch (IOException e1) { + // TODO 自动生成的 catch 块 + e1.printStackTrace(); + } + } + } + }); + + destory = new JButton(); + destory.setToolTipText(UIEnv.getRsb().getString("destroy")); + destory.setIcon(new ImageIcon(ProcessConsole.class.getResource("/assets/stop.png"))); + destory.setPreferredSize(new Dimension(25, 25)); + panel.add(destory); + destory.setEnabled(false); + destory.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + if(item!=null) + item.destory(); + } + }); + restartatcrash = new JToggleButton(); + restartatcrash.setPreferredSize(new Dimension(25, 25)); + + JButton clear = new JButton(); + clear.setIcon(new ImageIcon(ProcessConsole.class.getResource("/assets/cleartext.png"))); + clear.setToolTipText(UIEnv.getRsb().getString("clearconsole")); + clear.setPreferredSize(new Dimension(25, 25)); + clear.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + try { + doc.remove(0, doc.getLength()); + } catch (BadLocationException e1) { + // TODO 自动生成的 catch 块 + e1.printStackTrace(); + } + + } + }); + panel.add(clear); + + scrlock = new JToggleButton(); + scrlock.setPreferredSize(new Dimension(25, 25)); + panel.add(scrlock); + panel.add(restartatcrash); + input = new JTextField(); + input.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + String tx=input.getText(); + command(tx); + if(inputcache.isEmpty()||(!inputcache.get(inputcache.size()-1).equals(tx))) { + inputcache.add(tx); + } + idx=inputcache.size(); + input.setText(""); + } + }); + input.addKeyListener(new KeyListener() { + @Override + public void keyTyped(KeyEvent e) { + + } + + @Override + public void keyReleased(KeyEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void keyPressed(KeyEvent e) { + if(e.getKeyCode()==KeyEvent.VK_DOWN) { + if(idx0) { + idx--; + } + input.setText(inputcache.get(idx)); + } + } + }); + input.setFont(new Font("宋体", Font.PLAIN, 18)); + input.setBackground(Color.BLACK); + input.setForeground(Color.WHITE); + getContentPane().add(input, BorderLayout.SOUTH); + input.setColumns(10); + input.setBorder(new LineBorder(Color.WHITE)); + + + textPane = new JTextPane(); + textPane.setBackground(Color.BLACK); + textPane.setForeground(Color.WHITE); + textPane.setEditable(false); + doc = textPane.getStyledDocument(); + textPane.addComponentListener(new ComponentListener() { + int old=0; + @Override + public void componentShown(ComponentEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void componentResized(ComponentEvent e) { + if((old!=textPane.getHeight())&&!scrlock.isSelected()) { + JScrollBar jsb= jsp.getVerticalScrollBar(); + int v=jsb.getMaximum(); + jsb.setValue(v); + } + old=textPane.getHeight(); + } + + @Override + public void componentMoved(ComponentEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void componentHidden(ComponentEvent e) { + // TODO 自动生成的方法存根 + + } + }); + jsp = new JScrollPane(); + jsp.setViewportView(textPane); + getContentPane().add(jsp, BorderLayout.CENTER); + + + setSize(1000,600); + setLocationRelativeTo(null); + + abs0 = new SimpleAttributeSet(); + StyleConstants.setForeground(abs0, Color.GREEN); + StyleConstants.setFontSize(abs0, 18); + StyleConstants.setFontFamily(abs0, "宋体"); + + abs1 = new SimpleAttributeSet(); + StyleConstants.setForeground(abs1 ,Color.GREEN); + StyleConstants.setFontSize(abs1, 18); + StyleConstants.setFontFamily(abs1, "宋体"); + StyleConstants.setBackground(abs1, Color.DARK_GRAY); + + abs2 = new SimpleAttributeSet(); + StyleConstants.setForeground(abs2 ,Color.RED); + StyleConstants.setFontSize(abs2, 18); + StyleConstants.setFontFamily(abs2, "宋体"); + + abs3 = new SimpleAttributeSet(); + StyleConstants.setForeground(abs3 ,Color.YELLOW); + StyleConstants.setFontSize(abs3, 18); + StyleConstants.setFontFamily(abs3, "宋体"); + + abs4 = new SimpleAttributeSet(); + StyleConstants.setForeground(abs4 ,Color.WHITE); + StyleConstants.setFontSize(abs4, 18); + StyleConstants.setFontFamily(abs4, "宋体"); + + abs5 = new SimpleAttributeSet(); + StyleConstants.setForeground(abs5 ,new Color(50,50,255)); + StyleConstants.setFontSize(abs5, 18); + StyleConstants.setFontFamily(abs5, "宋体"); + + abs6 = new SimpleAttributeSet(); + StyleConstants.setForeground(abs6 ,Color.CYAN); + StyleConstants.setFontSize(abs6, 18); + StyleConstants.setFontFamily(abs6, "宋体"); + } + + public List> getConoutlistener() { + return conoutlistener; + } + public List> getConerrlistener() { + return conerrlistener; + } + + Runnable errt=new Runnable() { + + @Override + public void run() { + Reader rerr=new InputStreamReader(err); + char[]c=new char[1024]; + try { + boolean first=true; + while(true) { + int len; + len = rerr.read(c); + if(len==-1) + break; + if(first){ + item.firsterr(); + first=false; + } + errl(c,len); + append(new String(c,0,len),abs2); + } + } catch (IOException e) { + // TODO 自动生成的 catch 块 + e.printStackTrace(); + } + } + + }; + Runnable outt=new Runnable() { + + @Override + public void run() { + Reader rout=new InputStreamReader(out); + char[]c=new char[1024]; + try { + boolean first=true; + while(true) { + int len; + len = rout.read(c); + if(len==-1) + break; + if(first){ + item.firstout(); + first=false; + } + outl(c,len); + append(new String(c,0,len),abs4); + } + } catch (IOException e) { + // TODO 自动生成的 catch 块 + e.printStackTrace(); + } + } + }; + private static void callAll(List> l,String obj) { + for (int i = 0; i < l.size(); i++) { + l.get(i).accept(obj); + } + } + private void errl(char[] c, int len) { + for (int i = 0; i0) + sbe.delete(0,sbe.length()); + }else{ + sbe.append(c[i]); + } + } + } + private void outl(char[] c, int len) { + for (int i = 0; i0) + sbo.delete(0,sbo.length()); + }else{ + sbo.append(c[i]); + } + } + } + private Object lck=new Object(); + private void append(String s,AttributeSet set) { + synchronized (lck) { + + try { + doc.insertString(doc.getLength(), s, set); + } catch (BadLocationException e) { + e.printStackTrace(); + } + } + } + public void command(String s) { + append(s+"\n",abs5); + in.println(s); + in.flush(); + } + public void bind(ProcessItem processItem) { + this.item=processItem; + } + public void start() { + sbo.delete(0,sbo.length()); + sbe.delete(0,sbe.length()); + start.setEnabled(false); + destory.setEnabled(true); + append("\n"+UIEnv.getRsb().getString("process")+" ",abs0); append(item.getName(),abs1);append(" "+UIEnv.getRsb().getString("started")+"\n",abs0); + append(UIEnv.getRsb().getString("commandline")+"\n",abs6); + List l=item.getProcessBuilder().command(); + for (Iterator iterator = l.iterator(); iterator.hasNext();) { + String string = (String) iterator.next(); + append(string+"\n",abs6); + } + Process p=item.getProcess(); + out=p.getInputStream(); + err=p.getErrorStream(); + in=new PrintWriter(p.getOutputStream()); + + new Thread(errt).start(); + new Thread(outt).start(); + } + public void end() { + start.setEnabled(true); + destory.setEnabled(false); + Process tmp=item.getProcess(); + append("\n"+UIEnv.getRsb().getString("process")+" ",abs0); append(item.getName(),abs1);append(" "+(item.isDestroyed()?UIEnv.getRsb().getString("forcestopped"):UIEnv.getRsb().getString("stopped")),abs0); + append(UIEnv.getRsb().getString("exitcode"),abs0); + int val=tmp.exitValue(); + append(Integer.toString(val),val==0?abs1:abs3); + append("\n",abs0); + if(restartatcrash.isSelected()&&val!=0&&(!item.isDestroyed())) { + try { + item.start(); + } catch (InterruptedException e) { + // TODO 自动生成的 catch 块 + e.printStackTrace(); + } catch (IOException e) { + // TODO 自动生成的 catch 块 + e.printStackTrace(); + } + } + } +} diff --git a/src/org/kne/console/ProcessItem.java b/src/org/kne/console/ProcessItem.java new file mode 100644 index 0000000..8f0d58a --- /dev/null +++ b/src/org/kne/console/ProcessItem.java @@ -0,0 +1,272 @@ +package org.kne.console; + +import java.awt.Color; +import java.awt.Container; +import java.awt.Font; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.*; +import java.util.function.Consumer; +import javax.swing.JMenuItem; +import javax.swing.JPopupMenu; +import org.knemcl.main.CONST; +import org.knemcl.ui.UIEnv; +import org.knemcl.uitool.CrashReport; +import org.knemcl.uitool.ProgressListPanel; + +public class ProcessItem extends ProgressListPanel{ + private ProcessConsole console=new ProcessConsole(); + private String name; + private ProcessBuilder processBuilder; + public ProcessBuilder getProcessBuilder() { + return processBuilder; + } + + public void setProcessBuilder(ProcessBuilder processBuilder) { + this.processBuilder = processBuilder; + } + + + + private volatile Process p; + private List>startlistener=new Vector>(); + + private List>firstoutlistener=new Vector>(); + + private List>endlistener=new Vector>(); + private volatile boolean destroyed=false; + private volatile boolean b=false; + + public ProcessConsole getConsole() { + return console; + } + + public ProcessItem(ProcessBuilder psb,String name) { + super(name); + JPopupMenu jpm=new JPopupMenu(); + JMenuItem jmi=new JMenuItem(UIEnv.getRsb().getString("openconsole")); + jmi.setFont(jmi.getFont().deriveFont(Font.BOLD)); + jmi.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + console.setVisible(true); + } + }); + jpm.add(jmi); + + JMenuItem jmir=new JMenuItem(UIEnv.getRsb().getString("remove")); + jmir.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + Container c=ProcessItem.this.getParent(); + if(c!=null){ + c.remove(ProcessItem.this); + } + } + }); + jpm.add(jmir); + + jmis = new JMenuItem(UIEnv.getRsb().getString("launch")); + jmis.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + try { + start(); + } catch (InterruptedException e1) { + e1.printStackTrace(); + } catch (IOException e1) { + new CrashReport(null, true).report(e1, "启动失败!"); + } + } + }); + jpm.add(jmis); + + jmid = new JMenuItem(UIEnv.getRsb().getString("destory")); + jmid.setEnabled(false); + jmid.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + destory(); + } + }); + jpm.add(jmid); + addMouseListener(new MouseListener() { + + @Override + public void mouseReleased(MouseEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void mousePressed(MouseEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void mouseExited(MouseEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void mouseEntered(MouseEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void mouseClicked(MouseEvent e) { + if(e.getButton()==MouseEvent.BUTTON1){ + if(e.getClickCount()==2) + console.setVisible(true); + }else if(e.getButton()==MouseEvent.BUTTON3){ + jpm.show(ProcessItem.this, e.getX(), e.getY()); + } + } + }); + console.bind(this); + console.setTitle(UIEnv.getRsb().getString("console")+":"+name); + console.setIconImage(UIEnv.getIcon()); + this.processBuilder=psb; + this.name=name; + } + + public String getName() { + return name; + } + + + + public boolean isDestroyed() { + return destroyed; + } + + + + public List> getFirstoutlistener() { + return firstoutlistener; + } + + public List> getStartlistener() { + return startlistener; + } + public List> getEndlistener() { + return endlistener; + } + + + + Thread t; + Runnable r=new Runnable() { + + @Override + public void run() { + try { + jmis.setEnabled(false); + jmid.setEnabled(true); + if(console!=null) + console.start(); + callAll(startlistener,ProcessItem.this); + + p.waitFor(); + b=false; + jmis.setEnabled(true); + jmid.setEnabled(false); + if(console!=null) + console.end(); + callAll(endlistener,ProcessItem.this); + synchronized (progressBar) { + if(p.exitValue()==0){ + progressBar.setForeground(Color.GREEN); + progressBar.setString(UIEnv.getRsb().getString("ended")); + progressBar.setIndeterminate(false); + progressBar.setValue(0); + }else{ + if(destroyed){ + progressBar.setForeground(Color.YELLOW); + progressBar.setString(UIEnv.getRsb().getString("destoryed")); + progressBar.setIndeterminate(false); + progressBar.setValue(100); + }else{ + progressBar.setForeground(Color.RED); + progressBar.setString(UIEnv.getRsb().getString("crashed")); + progressBar.setIndeterminate(false); + progressBar.setValue(100); + } + } + progressBar.getParent().repaint(); + progressBar.repaint(); + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + + } + }; + private static void callAll(List> l,ProcessItem obj) { + for (int i = 0; i < l.size(); i++) { + l.get(i).accept(obj); + } + } + public Process getProcess() { + return p; + } + public void destory() { + if(p!=null) + p.destroy(); + destroyed=true; + } + public void start() throws InterruptedException, IOException { + while(b) { + Thread.sleep(10); + } + b=true; + destroyed=false; + p=processBuilder.start(); + firstn=true; + t=new Thread(r); + t.setPriority(Thread.MIN_PRIORITY); + t.setName("PSM-"+processBuilder.hashCode()); + t.start(); + synchronized (progressBar) { + progressBar.setForeground(Color.GREEN); + progressBar.setString(UIEnv.getRsb().getString("starting")); + progressBar.setIndeterminate(true); + progressBar.setValue(0); + progressBar.repaint(); + } + } + private volatile boolean firstn=true; + private JMenuItem jmis; + private JMenuItem jmid; + private void first(){ + if(firstn){ + callAll(firstoutlistener,ProcessItem.this); + synchronized (progressBar) { + progressBar.setForeground(Color.GREEN); + progressBar.setString(UIEnv.getRsb().getString("running")); + progressBar.setIndeterminate(false); + progressBar.setValue(100); + progressBar.repaint(); + } + firstn=false; + } + } + public void firstout(){ + first(); + } + public void firsterr() { + first(); + } +} diff --git a/src/org/kne/env/JavaManager.java b/src/org/kne/env/JavaManager.java new file mode 100644 index 0000000..1c31ba6 --- /dev/null +++ b/src/org/kne/env/JavaManager.java @@ -0,0 +1,87 @@ +package org.kne.env; + +import java.io.*; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import javax.swing.DefaultListModel; +import javax.swing.ListModel; +import org.knemcl.launch.JavaLocation; +import org.knemcl.main.CONST; +import org.knemcl.main.KNEManager; +import org.knemcl.uitool.XDefaultListModel; + +public class JavaManager { + private XDefaultListModel jls; + public JavaManager(KNEManager km){ + + jls=km.getLauncherdata().getJavaLocations(); + /*if(jls.isEmpty()){ + File[]f=CONST.java_default.listFiles(); + for (int i = 0; i=0; i--) { + JavaLocation javaLocation = jls.get(i); + if(javaLocation.checkFile()){ + javaLocation.checkVersion(); + }else{ + jls.remove(i); + } + } + km.writeData(); + } + private static boolean isJavaDir(File fj) { + if(!fj.isDirectory()) + return false; + File jexe=new File(fj,"bin/java.exe"); + if(!jexe.isFile()) + return false; + return true; + } + public JavaLocation getDefaultByMajor(int javaMajorVersion) { + for (int i = 0; imax.getMajorVersion()) { + max=jl; + } + } + } + return max; + } + public List getAvaliableJavaLocations() { + ArrayListal=new ArrayList<>(); + for (int i = 0; i < jls.size(); i++) { + JavaLocation jal=jls.get(i); + if(jal.getMajorVersion()!=-1) { + al.add(jal); + } + } + return al; + } +} diff --git a/src/org/kne/storge/FileHashMap.java b/src/org/kne/storge/FileHashMap.java new file mode 100644 index 0000000..cffbe65 --- /dev/null +++ b/src/org/kne/storge/FileHashMap.java @@ -0,0 +1,457 @@ +package org.kne.storge; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.OutputStream; +import java.io.Serializable; +import java.util.AbstractMap; +import java.util.Collection; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; +import java.util.Objects; +import java.util.Set; + +public class FileHashMap extends AbstractMap implements Map, + Cloneable { + transient File dir; + final int buk; + final InputGetter in; + final OutputGetter out; + public FileHashMap(File dir){ + this.dir=dir; + this.buk=1000; + this.in=new InputGetter() { + + @Override + public InputStream getInput(File f) throws FileNotFoundException { + + return new FileInputStream(f); + } + }; + this.out=new OutputGetter() { + + @Override + public OutputStream getOutput(File f) throws FileNotFoundException { + // TODO 自动生成的方法存根 + return new FileOutputStream(f); + } + }; + } + public FileHashMap(File dir,int buk){ + this.dir=dir; + this.buk=buk; + this.in=new InputGetter() { + + @Override + public InputStream getInput(File f) throws FileNotFoundException { + + return new FileInputStream(f); + } + }; + this.out=new OutputGetter() { + + @Override + public OutputStream getOutput(File f) throws FileNotFoundException { + // TODO 自动生成的方法存根 + return new FileOutputStream(f); + } + }; + } + public FileHashMap(File dir,int buk,InputGetter in,OutputGetter out){ + this.dir=dir; + this.buk=buk; + this.in=in; + this.out=out; + } + static class Node implements Map.Entry,Serializable{ + /** + * + */ + private static final long serialVersionUID = -6254519038323904725L; + final K key; + V value; + + Node(K key, V vaule) { + this.key = key; + this.value = vaule; + } + + public final K getKey() { + return key; + } + + public final V getValue() { + return value; + } + + public final String toString() { + return key + "=" + value; + } + + public final int hashCode() { + return Objects.hashCode(key) ^ Objects.hashCode(value); + } + + public final V setValue(V newValue) { + V oldValue = value; + value = newValue; + return oldValue; + } + public final boolean equals(Object o) { + if (o == this) + return true; + if (o instanceof Map.Entry) { + Map.Entry e = (Map.Entry)o; + if (Objects.equals(key, e.getKey()) && + Objects.equals(value, e.getValue())) + return true; + } + return false; + } + + } + + @SuppressWarnings("unchecked") + @Override + public Set> entrySet() { + Set> s=new HashSet>(); + File files[]=dir.listFiles(); + for(int i=0;ike=null; + try { + ObjectInputStream in=new ObjectInputStream(this.in.getInput(fi[a])); + ke=(Node) in.readObject(); + in.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + s.add(ke); + } + } + return s; + } + + @SuppressWarnings("unchecked") + @Override + public boolean containsKey(Object key) { + File files[]=dir.listFiles(); + for(int i=0;ike=null;ObjectInputStream in=null; + try { + in=new ObjectInputStream(this.in.getInput(fi[a])); + ke=(Node) in.readObject(); + + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (ClassNotFoundException e) { + // TODO 自动生成的 catch 块 + e.printStackTrace(); + }finally{try { + in.close(); + } catch (IOException e) { + // TODO 自动生成的 catch 块 + e.printStackTrace(); + }} + if(ke.getKey().equals(key)){ + return true; + } + } + } + return false; + } + + @Override + public int size() { + + return super.size(); + } + @Override + public boolean isEmpty() { + + return this.dir.list().length==0; + } + @SuppressWarnings("unchecked") + @Override + public boolean containsValue(Object value) { + File files[]=dir.listFiles(); + for(int i=0;ike=null;ObjectInputStream in=null; + try { + in=new ObjectInputStream(this.in.getInput(fi[i])); + ke=(Node) in.readObject(); + in.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (ClassNotFoundException e) { + // TODO 自动生成的 catch 块 + e.printStackTrace(); + }finally { + try { + in.close(); + } catch (IOException e) { + // TODO 自动生成的 catch 块 + e.printStackTrace(); + } + } + if(ke.getValue().equals(value)){ + return true; + } + } + } + return false; + } + + @SuppressWarnings("unchecked") + @Override + public V get(Object key) { + try{ + File dir=new File(this.dir.getAbsolutePath()+"\\"+key.hashCode()%buk); + for(int i=0;ike=null; + File file=dir.listFiles()[i];ObjectInputStream in=null; + try { + in=new ObjectInputStream(this.in.getInput(file)); + ke=(Node) in.readObject(); + + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (ClassNotFoundException e) { + // TODO 自动生成的 catch 块 + e.printStackTrace(); + }finally{try { + in.close(); + } catch (IOException e) { + // TODO 自动生成的 catch 块 + e.printStackTrace(); + }} + if(ke.getKey().equals(key)){ + return ke.getValue(); + } + } + }catch(NullPointerException e){} + return null; + } + + @SuppressWarnings("unchecked") + @Override + public V put(K key, V value){ + V old=null; + boolean flag=true; + File dir=new File(this.dir.getAbsolutePath()+"\\"+key.hashCode()%buk); + if(!dir.exists()){ + dir.mkdir(); + } + if(dir.list().length!=0){ + lo:for(int i=0;ike=null; + try { + ObjectInputStream in=new ObjectInputStream(this.in.getInput(file)); + ke=(Node) in.readObject(); + in.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (ClassNotFoundException e) { + // TODO 自动生成的 catch 块 + e.printStackTrace(); + } + if(ke.getKey().equals(key)){ + try { + old=ke.getValue(); + ObjectOutputStream out=new ObjectOutputStream(this.out.getOutput(file)); + + out.writeObject(new Node(key,value)); + out.close(); + flag=false; + } catch (IOException e) { + e.printStackTrace(); + } + break lo; + } + } + + if(flag){ + int z=-1; + File d=null; + do{ + z++; + d=new File(dir.getAbsolutePath()+"\\"+z); + }while(d.exists()); + try { + d.createNewFile(); + ObjectOutputStream out=new ObjectOutputStream(this.out.getOutput(d)); + + out.writeObject(new Node(key,value)); + out.close(); + } catch (IOException e) { + // TODO 自动生成的 catch 块 + e.printStackTrace(); + } + } + + + + }else{ + File d=new File(dir.getAbsolutePath()+"\\"+0); + try { + d.createNewFile(); + ObjectOutputStream out=new ObjectOutputStream(this.out.getOutput(d)); + + out.writeObject(new Node(key,value)); + out.close(); + } catch (IOException e) { + // TODO 自动生成的 catch 块 + e.printStackTrace(); + } + } + return old; + } + + @SuppressWarnings("unchecked") + @Override + public V remove(Object key) { + V old=null; + File dir=new File(this.dir.getAbsolutePath()+"\\"+key.hashCode()%buk); + for(int i=0;ike=null; + File file=dir.listFiles()[i]; + try { + ObjectInputStream in=new ObjectInputStream(this.in.getInput(file)); + ke=(Node) in.readObject(); + in.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (ClassNotFoundException e) { + // TODO 自动生成的 catch 块 + e.printStackTrace(); + } + if(ke.getKey().equals(key)){ + old=ke.getValue(); + file.delete(); + } + } + return old; + } + + @Override + public void putAll(Map m) { + Set s=m.keySet(); + Iterator i=s.iterator(); + while(i.hasNext()){ + K k=(K) i.next(); + V v=m.get(k); + this.put(k, v); + } + } + + @Override + public void clear() { + for(int i=0;i keySet() { + Set s=new HashSet(); + File files[]=dir.listFiles(); + for(int i=0;ike=null; + try { + ObjectInputStream in=new ObjectInputStream(this.in.getInput(fi[a])); + ke=(Node) in.readObject(); + in.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + s.add(ke.getKey()); + } + } + return s; + } + + @SuppressWarnings("unchecked") + @Override + public Collection values() { + Set s=new HashSet(); + File files[]=dir.listFiles(); + for(int i=0;ike=null; + try { + ObjectInputStream in=new ObjectInputStream(this.in.getInput(fi[i])); + ke=(Node) in.readObject(); + in.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (ClassNotFoundException e) { + // TODO 自动生成的 catch 块 + e.printStackTrace(); + } + s.add(ke.getValue()); + } + } + return s; + } + + private static void delAllFiles(File dir) { + if (dir.isDirectory()) { + for (File f : dir.listFiles()) { + if (!f.isDirectory()) + f.delete(); + else + delAllFiles(f); + } + + } + dir.delete(); + + } +} diff --git a/src/org/kne/storge/InputGetter.java b/src/org/kne/storge/InputGetter.java new file mode 100644 index 0000000..12265d0 --- /dev/null +++ b/src/org/kne/storge/InputGetter.java @@ -0,0 +1,10 @@ +package org.kne.storge; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; + +public interface InputGetter { + public InputStream getInput(File f) throws FileNotFoundException, IOException; +} diff --git a/src/org/kne/storge/OutputGetter.java b/src/org/kne/storge/OutputGetter.java new file mode 100644 index 0000000..a242870 --- /dev/null +++ b/src/org/kne/storge/OutputGetter.java @@ -0,0 +1,10 @@ +package org.kne.storge; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.OutputStream; + +public interface OutputGetter { + public OutputStream getOutput(File f) throws FileNotFoundException, IOException; +} diff --git a/src/org/kne/ui/BackgroundLabel.java b/src/org/kne/ui/BackgroundLabel.java new file mode 100644 index 0000000..bf16381 --- /dev/null +++ b/src/org/kne/ui/BackgroundLabel.java @@ -0,0 +1,93 @@ +package org.kne.ui; + +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Image; +import java.awt.Point; +import java.awt.event.ComponentEvent; +import java.awt.event.ComponentListener; + +import javax.swing.Icon; +import javax.swing.ImageIcon; +import javax.swing.JLabel; + +public class BackgroundLabel extends JLabel { + + class FillImageIcon extends ImageIcon{ + public FillImageIcon(Image image) { + super(image); + } + @Override + public synchronized void paintIcon(java.awt.Component cmp, Graphics g, int x, int y) { + //初始化参数 + Point startPoint = new Point(0, 0);//默认绘制起点 + Dimension cmpSize = cmp.getSize();//获取组件大小 + Dimension imgSize = new Dimension(getIconWidth(), getIconHeight());//获取图像大小 + + //计算绘制起点和区域 + switch(mode){ + case DEFAULT: + //等比例缩放 + //计算图像宽高比例 + double ratio = 1.0*imgSize.width/imgSize.height; + //计算等比例缩放后的区域大小 + imgSize.width = (int) Math.min(cmpSize.width, ratio*cmpSize.height); + imgSize.height = (int) (imgSize.width/ratio); + //计算绘制起点 + startPoint.x = (int) + (cmp.getAlignmentX()*(cmpSize.width - imgSize.width)); + startPoint.y = (int) + (cmp.getAlignmentY()*(cmpSize.height - imgSize.height)); + break; + case FILL: + //等比例缩放 + //计算图像宽高比例 + ratio = 1.0*imgSize.width/imgSize.height; + //计算等比例缩放后的区域大小 + imgSize.width = (int) Math.max(cmpSize.width, ratio*cmpSize.height); + imgSize.height = (int) (imgSize.width/ratio); + //计算绘制起点 + startPoint.x = (int) + (cmp.getAlignmentX()*(cmpSize.width - imgSize.width)); + startPoint.y = (int) + (cmp.getAlignmentY()*(cmpSize.height - imgSize.height)); + break; + + // imgSize = cmpSize; + } + //根据起点和区域大小进行绘制 + if(getImageObserver() == null) { + g.drawImage(getImage().getScaledInstance(imgSize.width, imgSize.height, Image.SCALE_FAST), startPoint.x, startPoint.y, cmp); + } else { + g.drawImage(getImage().getScaledInstance(imgSize.width, imgSize.height, Image.SCALE_FAST), startPoint.x, startPoint.y,getImageObserver()); + } + } + + } + + private Icon iconx; + private int mode; + public static final int DEFAULT=0; + public static final int FILL=1; + + +public void setFillMode(int mode){ + this.mode=mode; +} + public void setIconAutoFill(Icon icon) { + iconx=icon; + updateIcon(); + } + + private void updateIcon() { + if(iconx instanceof ImageIcon) { + super.setIcon(new FillImageIcon(((ImageIcon) iconx).getImage())); + }else { + super.setIcon(iconx); + } + } + + + + +} diff --git a/src/org/kne/ui/BackgroundPanel.java b/src/org/kne/ui/BackgroundPanel.java new file mode 100644 index 0000000..242725c --- /dev/null +++ b/src/org/kne/ui/BackgroundPanel.java @@ -0,0 +1,77 @@ +package org.kne.ui; + +import java.awt.*; +import java.awt.event.ComponentEvent; +import java.awt.event.ComponentListener; +import javax.swing.JPanel; +import org.knemcl.ui.MainWindow; +import org.knemcl.uitool.CrashReport; +public class BackgroundPanel extends JPanel { +private static final long serialVersionUID = -6352788025440244338L; +private Image image = null; +private int x0,y0,w0,h0; +private int mode; +public static final int DEFAULT=0; +public static final int FILL=1; +public void setFillMode(int mode){ + this.mode=mode; +} +public void setBackground(Image img,int x,int y,int w,int h) { + this.x0=x; + this.y0=y; + this.w0=w; + this.h0=h; + this.image=img; + addComponentListener(new ComponentListener() { + + @Override + public void componentShown(ComponentEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void componentResized(ComponentEvent e) { + repaint(); + } + + @Override + public void componentMoved(ComponentEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void componentHidden(ComponentEvent e) { + // TODO 自动生成的方法存根 + + } +}); +} +// 固定背景图片,允许这个JPanel可以在图片上添加其他组件 ? +protected void paintComponent(Graphics g) { + super.paintComponent(g); + if(mode==DEFAULT){ +g.drawImage(image, x0, y0, w0, h0, this); + }else if(mode==FILL){ + try{ + double dertax,dertay; + dertax=getWidth()/(double)image.getWidth(this); + dertay=getHeight()/(double)image.getHeight(this); + int w,h; + double prec=0; + if(dertax>dertay){ + prec=dertax; + }else{ + prec=dertay; + } + w=(int) (image.getWidth(this)*prec); + h=(int) (image.getHeight(this)*prec); + g.drawImage(image, 0, 0, w, h, this); + }catch(Exception e2){ + e2.printStackTrace(); + //new CrashReport(MainWindow.this, true).report(e2, "载入背景图片失败"); + } + } +} +} diff --git a/src/org/kne/ui/JIconFrame.java b/src/org/kne/ui/JIconFrame.java new file mode 100644 index 0000000..0baf536 --- /dev/null +++ b/src/org/kne/ui/JIconFrame.java @@ -0,0 +1,122 @@ +package org.kne.ui; + +import java.awt.Color; +import java.awt.Component; +import java.awt.Container; +import java.awt.Graphics; +import java.awt.HeadlessException; +import java.awt.Image; + +import javax.swing.ImageIcon; +import javax.swing.JFrame; +import javax.swing.JLabel; + +public class JIconFrame extends JFrame{ + Image img; + JLabel jp=new JLabel(); + private int y0; + private int x0; + private int width0; + private int height0; + public JIconFrame() throws HeadlessException { + super(); + } + + + + + public JIconFrame(String title) { + this.setTitle(title); + + + } + + + + + public void setBackgroundImage(Image i,int x,int y,int width,int height) { + this.img=i; + this.x0=x; + this.y0=y; + this.width0=width; + this.height0=height; + jp.setBackground(new Color(0,0,0,0)); + jp.setIcon(new ImageIcon(img)); + jp.setBounds(x, y, width, height); + getContentPane().add(jp,-1); + } + @Override + public boolean isOpaque(){ + return true; + } + /*private void dpaint(Graphics g,Container c){ + for (int i = 0; i < c.countComponents(); i++) { + Component p=c.getComponent(i); + if(p!=jp){ + p.repaint(); + if(p instanceof Container) + dpaint(g,(Container)p); + } + } + }*/ + @Override + public void paint(Graphics g) { + + + //jp.repaint(); + Container c=getContentPane(); + try{ + c.setComponentZOrder(jp,c.getComponentCount()-1); + }catch(IllegalArgumentException e){ + + } + /*for (int i = 0; i < c.countComponents(); i++) { + Component p=c.getComponent(i); + if(p!=jp){ + p.repaint(); + if(p instanceof Container) + dpaint(g,(Container)p); + } + }*/ + super.paint(g); + // jp.repaint(); + + /*if(img!=null){ + g.drawImage(img, x0, y0, width0, height0, this); + } + //Container c=getContentPane(); + for(int a=0;aproperty) throws IOException { + String result = ""; + BufferedReader in = null; HttpURLConnection connection = null; + try { + String urlNameString = url ; + if(param!=null) { + urlNameString+= "?" + param; + } + URL realUrl = new URL(urlNameString); + // 打开和URL之间的连接 + connection = (HttpURLConnection) realUrl.openConnection(); + // 设置通用的请求属性 + connection.setRequestMethod("GET"); // 设置请求方式 + connection.setRequestProperty("accept", "*/*"); + connection.setRequestProperty("connection", "Keep-Alive"); + connection.setRequestProperty("User-Agent", CONST.name+"/"+CONST.kver); + if(property!=null) { + Set> s=property.entrySet(); + for (Iterator iterator = s.iterator(); iterator.hasNext();) { + Entry entry = (Entry) iterator.next(); + connection.setRequestProperty(entry.getKey(), entry.getValue()); + } + } + // 建立实际的连接 + connection.connect(); + /* + // 获取所有响应头字段 + Map> map = connection.getHeaderFields(); + // 遍历所有的响应头字段 + for (String key : map.keySet()) { + System.out.println(key + "--->" + map.get(key)); + } + */ + // 定义 BufferedReader输入流来读取URL的响应 + in = new BufferedReader(new InputStreamReader( + connection.getInputStream())); + String line; + while ((line = in.readLine()) != null) { + result += line; + } + } catch (IOException e) { + InputStream err=connection.getErrorStream(); + if(err==null) { + } + in = new BufferedReader(new InputStreamReader(err)); + String line; + while ((line = in.readLine()) != null) { + result += line; + } + // System.out.println(result); + //throw e; + return new Response(connection.getResponseCode(), result); + } + // 使用finally块来关闭输入流 + finally { + try { + if (in != null) { + in.close(); + } + } catch (IOException e2) { + e2.printStackTrace(); + } + } + return new Response(connection.getResponseCode(), result); + } + + /** + * 向指定 URL 发送POST方法的请求 + * @param url 发送请求的 URL + * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @return 所代表远程资源的响应结果 + * @throws IOException + */ + public static Response sendPost(String url, String param) throws IOException { + return sendPost(url, param,"application/x-www-form-urlencoded"); + } + + public static Response sendPost(String url, String param,String contentType) throws IOException { + PrintWriter out = null; + BufferedReader in = null; + String result = ""; HttpsURLConnection conn=null; + try { + URL realUrl = new URL(url); + // 打开和URL之间的连接 + conn = (HttpsURLConnection) realUrl.openConnection(); + // 设置通用的请求属性 + + conn.setRequestMethod("POST"); // 设置请求方式 + // conn.setRequestProperty("accept", "*/*"); + // conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("User-Agent", CONST.name+"/"+CONST.kver); + if(contentType!=null) + conn.setRequestProperty("Content-Type", contentType);//"application/x-www-form-urlencoded" + // 发送POST请求必须设置如下两行 + + conn.setDoOutput(true); + conn.setDoInput(true); + //1.获取URLConnection对象对应的输出流 + out = new PrintWriter(conn.getOutputStream()); + //2.中文有乱码的需要将PrintWriter改为如下 + //out=new OutputStreamWriter(conn.getOutputStream(),"UTF-8") + // 发送请求参数 + out.print(param); + // flush输出流的缓冲 + out.flush(); + // 定义BufferedReader输入流来读取URL的响应 + in = new BufferedReader(new InputStreamReader(conn.getInputStream())); + String line; + while ((line = in.readLine()) != null) { + result += line; + } + } catch (IOException e) { + InputStream err=conn.getErrorStream(); + if(err==null) { + System.out.println(conn.getResponseCode()); + } + in = new BufferedReader(new InputStreamReader(err)); + String line; + while ((line = in.readLine()) != null) { + result += line; + } + // System.out.println(result); + //throw e; + return new Response(conn.getResponseCode(), result); + } + //使用finally块来关闭输出流、输入流 + finally{ + try{ + if(out!=null){ + out.close(); + } + if(in!=null){ + in.close(); + } + } + catch(IOException ex){ + ex.printStackTrace(); + } + } + return new Response(conn.getResponseCode(), result); + } + public static class Response{ + private int code; + private String result; + public int getCode() { + return code; + } + public String getResult() { + return result; + } + @Override + public int hashCode() { + return Objects.hash(code, result); + } + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Response other = (Response) obj; + return code == other.code && Objects.equals(result, other.result); + } + @Override + public String toString() { + return "Response [code=" + code + ", result=" + result + "]"; + } + public Response(int code, String result) { + super(); + this.code = code; + this.result = result; + } + } + /* public static void main(String[] args) throws IOException, AuthenticateException { + //发送 GET 请求 + String s=HttpRequest.sendGet("http://localhost:6144/Home/RequestString", "key=123&v=456"); + System.out.println(s); + + //发送 POST 请求 + String sr=HttpRequest.sendPost("https://authserver.mojang.com/authenticate", Copy.getData(new File("D:\\p.txt"))); + System.out.println(sr); + }*/ +} diff --git a/src/org/knemc/auth/MicrosoftAuth.java b/src/org/knemc/auth/MicrosoftAuth.java new file mode 100644 index 0000000..5be4129 --- /dev/null +++ b/src/org/knemc/auth/MicrosoftAuth.java @@ -0,0 +1,269 @@ +package org.knemc.auth; + +import java.awt.Desktop; +import java.awt.Desktop.Action; +import java.io.IOException; +import java.io.Serializable; +import java.io.StringReader; +import java.net.URI; +import java.util.HashMap; +import java.util.Map; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; +import java.util.function.Consumer; + +import org.knemc.auth.HttpRequest.Response; +import org.knemc.auth.Session.UserType; +import org.knemcl.main.CONST; +import org.knemcl.ui.UIEnv; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.JsonPrimitive; +import com.google.gson.stream.JsonReader; + +public class MicrosoftAuth extends Auth implements Serializable{ + /** + * + */ + private static final long serialVersionUID = 1L; + private transient String device_code; + private transient String user_code; + private transient String verification_uri; + private transient int expires_in; + private transient int interval; + private transient String message; + + private String ms_access_token; + private int ms_expires_in; + private String ms_refresh_token; + + private String xbl_token; + private String xbl_uhs; + + private String xsts_token; + private String xsts_uhs; + + private String mc_access_token; + private int mc_expires_in; + public MicrosoftAuth(Consumer codecallback) throws AuthenticateException { + try { + startMsAuth(); + + codecallback.accept(user_code); + openBrowser(1000); + waitMsUser(); + doXBLAuth(); + doXSTSAuth(); + doMinecraftAuth(); + checkAccountHasMinecraft(); + getMinecraftAccountInfo(); + } catch (IOException e) { + throw new AuthenticateIOException(UIEnv.getRsb().getString("authconnectfailed"),e); + } + } + public void refresh() throws AuthenticateException { + try { + refreshMsToken(); + doXBLAuth(); + doXSTSAuth(); + doMinecraftAuth(); + checkAccountHasMinecraft(); + getMinecraftAccountInfo(); + } catch (IOException e) { + throw new AuthenticateIOException(UIEnv.getRsb().getString("authconnectfailed"),e); + } + } + private void startMsAuth() throws IOException { + Response response= HttpRequest.sendPost("https://login.microsoftonline.com/consumers/oauth2/v2.0/devicecode?mkt={LocalLang.CurrentLang}", "client_id="+CONST.clientid+"&scope=XboxLive.signin%20offline_access"); + if(response.getCode()!=200) { + throw new IOException("start MsAuth Failed!"); + } + JsonObject jobj=(JsonObject) new JsonParser().parse(response.getResult()); + // System.out.println(jobj); + device_code=jobj.get("device_code").getAsString(); + user_code=jobj.get("user_code").getAsString(); + verification_uri=jobj.get("verification_uri").getAsString(); + expires_in=jobj.get("expires_in").getAsInt(); + interval=jobj.get("interval").getAsInt(); + message=jobj.get("message").getAsString(); + } + private void openBrowser(long delay) { + new Timer("delay",true).schedule(new TimerTask() { + + @Override + public void run() { + Desktop dt= Desktop.getDesktop(); + if(dt.isSupported(Action.BROWSE)) { + try { + dt.browse(URI.create(verification_uri)); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + }, delay); + } + private void waitMsUser() throws IOException, AuthenticateCancelException { + long startTime=System.nanoTime()/1000000000L; + while(System.nanoTime()/1000000000L-startTime map=new HashMap<>(); + map.put("Authorization","Bearer "+mc_access_token); + Response resp=HttpRequest.sendGet("https://api.minecraftservices.com/entitlements/mcstore",null, map); + if(resp.getCode()!=200) { + throw new HasntAuthenticateException("Dont Has Minecraft!"); + } + JsonObject jor=(JsonObject) new JsonParser().parse(resp.getResult()); + if(jor.get("error")!=null) { + throw new HasntAuthenticateException("Dont Has Minecraft!"); + } + JsonArray jarr=(JsonArray) jor.get("items"); + boolean have=false; + for(JsonElement je:jarr) { + JsonObject ie=(JsonObject) je; + if("game_minecraft".equals(ie.get("name").getAsString())) { + have=true; + } + } + if(!have) { + throw new HasntAuthenticateException("Dont Has Minecraft!"); + } + } + private void getMinecraftAccountInfo() throws IOException, AuthenticateException { + Map map=new HashMap<>(); + map.put("Authorization","Bearer "+mc_access_token); + Response resp=HttpRequest.sendGet("https://api.minecraftservices.com/minecraft/profile",null, map); + if(resp.getCode()!=200) { + throw new MinecraftAuthenticateException("Minecraft account error!"); + } + JsonObject jor=(JsonObject) new JsonParser().parse(resp.getResult()); + if(jor.get("error")!=null) { + throw new MinecraftAuthenticateException("Minecraft account error!"); + } + super.setUsername(jor.get("name").getAsString()); + String su=jor.get("id").getAsString(); + StringBuilder sb=new StringBuilder(su); + if(sb.indexOf("-")==-1) { + sb.insert(20, '-'); + sb.insert(16, '-'); + sb.insert(12, '-'); + sb.insert(8, '-'); + } + super.setUuid(UUID.fromString( sb.toString())); + super.setGame_token(mc_access_token); + } + private void refreshMsToken() throws IOException { + Response response= HttpRequest.sendPost("https://login.live.com/oauth20_token.srf", "client_id="+CONST.clientid+"&refresh_token="+ms_refresh_token+"&grant_type=refresh_token"); + if(response.getCode()!=200) { + throw new IOException("start MsAuth Failed!"+response.getResult()); + } + JsonObject res=(JsonObject) new JsonParser().parse(response.getResult()); + ms_access_token=res.get("access_token").getAsString(); + ms_refresh_token=res.get("refresh_token").getAsString(); + } + public static void main(String[] args) throws IOException, AuthenticateException { + MicrosoftAuth ma=new MicrosoftAuth((x)->{System.out.println(x);}); + } + @Override + public AuthType getAuthType() { + return AuthType.MICROSOFT; + } + @Override + protected Session createSession() throws IOException, AuthenticateException { + refresh(); + return new Session(getUuid(), getUsername(), getGame_token(),UserType.MSA ) ; + } + @Override + public void setUsername(String username) { + } + @Override + public void setUuid(UUID uuid) { + } + @Override + public void setGame_token(String game_token) { + } +} diff --git a/src/org/knemc/auth/MinecraftAuthenticateException.java b/src/org/knemc/auth/MinecraftAuthenticateException.java new file mode 100644 index 0000000..830f2bb --- /dev/null +++ b/src/org/knemc/auth/MinecraftAuthenticateException.java @@ -0,0 +1,31 @@ +package org.knemc.auth; + +public class MinecraftAuthenticateException extends AuthenticateException { + + public MinecraftAuthenticateException() { + super(); + // TODO 自动生成的构造函数存根 + } + + public MinecraftAuthenticateException(String message, Throwable cause, boolean enableSuppression, + boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + // TODO 自动生成的构造函数存根 + } + + public MinecraftAuthenticateException(String message, Throwable cause) { + super(message, cause); + // TODO 自动生成的构造函数存根 + } + + public MinecraftAuthenticateException(String message) { + super(message); + // TODO 自动生成的构造函数存根 + } + + public MinecraftAuthenticateException(Throwable cause) { + super(cause); + // TODO 自动生成的构造函数存根 + } + +} diff --git a/src/org/knemc/auth/OfflineAuth.java b/src/org/knemc/auth/OfflineAuth.java new file mode 100644 index 0000000..4c9c021 --- /dev/null +++ b/src/org/knemc/auth/OfflineAuth.java @@ -0,0 +1,31 @@ +package org.knemc.auth; + +import static java.nio.charset.StandardCharsets.UTF_8; + +import java.util.UUID; + +import org.knemc.auth.Session.UserType; +import org.knemcl.main.CONST; + +public class OfflineAuth extends Auth { + private static UUID getUUIDFromUserName(String username) { + return UUID.nameUUIDFromBytes(("OfflinePlayer:" + username).getBytes(UTF_8)); + } + @Override + public AuthType getAuthType() { + return AuthType.OFFLINE; + } + @Override + protected Session createSession() { + UUID uid=getUuid(); + if(uid==null) { + uid=getUUIDFromUserName(getUsername()); + } + String gt=getGame_token(); + if(gt==null) { + gt=uid.toString(); + } + return new Session(uid, getUsername(), gt,UserType.LEGACY ); + } + +} diff --git a/src/org/knemc/auth/Session.java b/src/org/knemc/auth/Session.java new file mode 100644 index 0000000..357b995 --- /dev/null +++ b/src/org/knemc/auth/Session.java @@ -0,0 +1,52 @@ +package org.knemc.auth; + +import java.io.Serializable; +import java.util.UUID; + +public class Session implements Serializable{ + @Override + public String toString() { + return "Session [uuid="+uuid+", name_in_game="+name_in_game+", token_key="+token_key + +", user_type="+user_type+"]"; + } + public Session(UUID uuid, String name_in_game, String token_key, + UserType user_type) { + super(); + this.uuid = uuid; + this.name_in_game = name_in_game; + this.token_key = token_key; + this.user_type = user_type; + } + public Session(){ + + } + private UUID uuid; + private String name_in_game; + private String token_key; + private UserType user_type; + + public UUID getUuid() { + return uuid; + } + public String getName_in_game() { + return name_in_game; + } + public String getToken_key() { + return token_key; + } + public UserType getUser_type() { + return user_type; + } + + public enum UserType{ + LEGACY("legacy"), + MSA("msa"); + public final String command; + private UserType(String command){ + this.command=command; + } + public String toString(){ + return command; + } + } +} diff --git a/src/org/knemc/auth/UserConfig.java b/src/org/knemc/auth/UserConfig.java new file mode 100644 index 0000000..b033fb7 --- /dev/null +++ b/src/org/knemc/auth/UserConfig.java @@ -0,0 +1,73 @@ +package org.knemc.auth; + +import static java.nio.charset.StandardCharsets.UTF_8; + +import java.awt.Image; +import java.io.IOException; +import java.io.Serializable; +import java.util.UUID; + +import javax.swing.JButton; +import org.knemc.auth.Session.UserType; +import org.knemcl.launch.Config; + +public class UserConfig extends Config implements Serializable { + /** + * + */ + private static final long serialVersionUID = 1L; + + @Override + public String getName() { + return auth.getUsername(); + } + + @Override + public void setName(String name) { + auth.setUsername(name); + } + public Auth getAuth() { + return auth; + } + public void setAuth(Auth auth) { + this.auth = auth; + } + private Auth auth=new OfflineAuth(); + public String getGame_token() { + return auth.getGame_token(); + } + public UUID getUuid() { + return auth.getUuid(); + } + public void setUuid(UUID uuid) { + auth.setUuid(uuid); + } + + + @Override + public String toString() { + return auth.getUsername()+" "+auth.getAuthType(); + } + + public Session auth() throws IOException, AuthenticateException { + /*if(auth_type.equals(AuthType.OFFLINE)) { + UUID uid=uuid; + if(uid==null) { + uid=getUUIDFromUserName(getName()); + } + String gt=game_token; + if(gt==null) { + gt=uid.toString(); + } + return new Session(uid, getName(), gt,UserType.LEGACY ); + }else if(auth_type.equals(AuthType.MICROSOFT)){ + return new Session(uuid, getName(), game_token,UserType.MSA ) ; + }else + return null;*/ + return auth.createSession(); + } + public AuthType getAuthType() { + return auth.getAuthType(); + } + +} diff --git a/src/org/knemc/auth/XBOXAuthenticateException.java b/src/org/knemc/auth/XBOXAuthenticateException.java new file mode 100644 index 0000000..9e72c82 --- /dev/null +++ b/src/org/knemc/auth/XBOXAuthenticateException.java @@ -0,0 +1,31 @@ +package org.knemc.auth; + +public class XBOXAuthenticateException extends AuthenticateException { + + public XBOXAuthenticateException() { + super(); + // TODO 自动生成的构造函数存根 + } + + public XBOXAuthenticateException(String message, Throwable cause, boolean enableSuppression, + boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + // TODO 自动生成的构造函数存根 + } + + public XBOXAuthenticateException(String message, Throwable cause) { + super(message, cause); + // TODO 自动生成的构造函数存根 + } + + public XBOXAuthenticateException(String message) { + super(message); + // TODO 自动生成的构造函数存根 + } + + public XBOXAuthenticateException(Throwable cause) { + super(cause); + // TODO 自动生成的构造函数存根 + } + +} diff --git a/src/org/knemc/auth/YggdrasilService.java b/src/org/knemc/auth/YggdrasilService.java new file mode 100644 index 0000000..70a0a0e --- /dev/null +++ b/src/org/knemc/auth/YggdrasilService.java @@ -0,0 +1,6 @@ +package org.knemc.auth; + +public interface YggdrasilService { + public Session authenticate(String mlusername,String mpass)throws AuthenticateException; + +} diff --git a/src/org/knemcl/download/BMCLAPIDownloadSource.java b/src/org/knemcl/download/BMCLAPIDownloadSource.java new file mode 100644 index 0000000..4f235c2 --- /dev/null +++ b/src/org/knemcl/download/BMCLAPIDownloadSource.java @@ -0,0 +1,55 @@ +package org.knemcl.download; + +import java.net.MalformedURLException; +import java.net.URL; + +public class BMCLAPIDownloadSource extends DownloadSource{ + + @Override + public URL openStream(URL u) { + String str=u.toString(); + try { + + if(str.startsWith("http://launchermeta.mojang.com/")) { + return new URL(str.replace("http://launchermeta.mojang.com/", "https://bmclapi2.bangbang93.com/")); + } + if(str.startsWith("http://launcher.mojang.com/")) { + return new URL(str.replace("http://launcher.mojang.com/", "https://bmclapi2.bangbang93.com/")); + } + + if(str.startsWith("https://launchermeta.mojang.com/")) { + return new URL(str.replace("https://launchermeta.mojang.com/", "https://bmclapi2.bangbang93.com/")); + } + if(str.startsWith("https://launcher.mojang.com/")) { + return new URL(str.replace("https://launcher.mojang.com/", "https://bmclapi2.bangbang93.com/")); + } + + + if(str.startsWith("http://resources.download.minecraft.net/")) { + return new URL(str.replace("http://resources.download.minecraft.net/", "https://bmclapi2.bangbang93.com/assets/")); + } + if(str.startsWith("https://resources.download.minecraft.net/")) { + return new URL(str.replace("https://resources.download.minecraft.net/", "https://bmclapi2.bangbang93.com/assets/")); + } + + + if(str.startsWith("http://libraries.minecraft.net/")) { + return new URL(str.replace("http://libraries.minecraft.net/", "https://bmclapi2.bangbang93.com/maven/")); + } + if(str.startsWith("https://libraries.minecraft.net/")) { + return new URL(str.replace("https://libraries.minecraft.net/", "https://bmclapi2.bangbang93.com/maven/")); + } + + if(str.startsWith("http://files.minecraftforge.net/maven/")) { + return new URL(str.replace("http://files.minecraftforge.net/maven/", "https://bmclapi2.bangbang93.com/maven/")); + } + if(str.startsWith("https://files.minecraftforge.net/maven/")) { + return new URL(str.replace("https://files.minecraftforge.net/maven/", "https://bmclapi2.bangbang93.com/maven/")); + } + } catch (MalformedURLException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/org/knemcl/download/DefaultDownloadSource.java b/src/org/knemcl/download/DefaultDownloadSource.java new file mode 100644 index 0000000..9c45350 --- /dev/null +++ b/src/org/knemcl/download/DefaultDownloadSource.java @@ -0,0 +1,12 @@ +package org.knemcl.download; + +import java.net.URL; + +public class DefaultDownloadSource extends DownloadSource { + + @Override + public URL openStream(URL u) { + return u; + } + +} diff --git a/src/org/knemcl/download/DownloadImpl.java b/src/org/knemcl/download/DownloadImpl.java new file mode 100644 index 0000000..f369b51 --- /dev/null +++ b/src/org/knemcl/download/DownloadImpl.java @@ -0,0 +1,250 @@ +package org.knemcl.download; + +import java.awt.Color; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.function.Consumer; + +import javax.swing.JProgressBar; + +import org.kne.cloud.network.klalb.MonitoredInputStream; +import org.kne.util.Task; +import org.knemcl.main.CONST; +import org.knemcl.ui.UIEnv; + +public class DownloadImpl extends Task{ + private URL url; + private File file; + + + + + private JProgressBar progressBar; + //private ByteBuffer bb; + private ByteArrayOutputStream cache; + private Consumerendlistener; + private Consumersuccesslistener; + private Consumererrorlistener; + private static List< DownloadSource> defaultDownloadSources=new ArrayList(); + static { + defaultDownloadSources.add(new BMCLAPIDownloadSource()); + //defaultDownloadSources.add(new MCBBSDownloadSource()); + defaultDownloadSources.add(new DefaultDownloadSource()); + } + + + public static List getDefaultDownloadSources() { + return defaultDownloadSources; + } + + + + private List< DownloadSource> currDownloadSources=new ArrayList(); + + + public Consumer getErrorlistener() { + return errorlistener; + } + public Consumer getSuccesslistener() { + return successlistener; + } + public void setSuccesslistener(Consumer successlistener) { + this.successlistener = successlistener; + } + public void setErrorlistener(Consumer errorlistener) { + this.errorlistener = errorlistener; + } + public JProgressBar getProgressBar() { + return progressBar; + } + public void setProgressBar(JProgressBar progressBar) { + this.progressBar = progressBar; + } + public URL getUrl() { + return url; + } + public File getFile() { + return file; + } + public Consumer getEndlistener() { + return endlistener; + } + public void setEndlistener(Consumer endlistener) { + this.endlistener = endlistener; + } + public DownloadImpl(URL url, File file) { + super(); + this.url = url; + this.file = file; + this.currDownloadSources=getDefaultDownloadSources(); + } + public DownloadImpl(URL url, File file,ListdownloadSources) { + super(); + this.url = url; + this.file = file; + this.currDownloadSources=downloadSources; + } + private class SUP implements Comparable{ + private DownloadSource ds; + private URL url; + public SUP(DownloadSource ds, URL url) { + super(); + this.ds = ds; + this.url = url; + } + @Override + public int compareTo(SUP o) { + long a=ds.getMonitor().getLatency(); + long b=o.ds.getMonitor().getLatency(); + if(a>b) { + return 1; + }else if(1 rurl=new ArrayList(); + for (Iterator iterator = currDownloadSources.iterator(); iterator.hasNext();) { + DownloadSource dss = (DownloadSource) iterator.next(); + URL tu=dss.openStream(url); + if(tu!=null) + rurl.add(new SUP(dss,tu)); + } + if(rurl.isEmpty()) { + throw new IOException("找不到可用的下载源"); + } + + Collections.sort(rurl); + System.out.println(rurl); + + + InputStream ins = null; + boolean success=false; + + int count=0; + while(count cmb; + + public ClientInstaller(KNEManager km) { + super(km); + setTitle(UIEnv.getRsb().getString("installclient")); + JPanel p=ysp.getView(); + + ComboSettingItem csi=new ComboSettingItem(UIEnv.getRsb().getString("installpath"), itemWth,CONST.settingheight); + cmb=csi.getComboBox(); + p.add(csi); + + getOkbutton().addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + Version ver=getVersion(); + ClientLocation cll=(ClientLocation) cmb.getSelectedItem(); + DownloadTask tskl=new DownloadTask(UIEnv.getRsb().getString("downloadversion")+ver.getId(),ver.getUrl(),cll.getJsonFileById(ver.getId())); + km.getTaskController().putTask(tskl); + KNEMCLTask kmt=new KNEMCLTask(UIEnv.getRsb().getString("createconfig")) { + + /** + * + */ + private static final long serialVersionUID = 1L; + + @Override + public void runTask() throws Exception { + ClientLaunchConfig clfg=new ClientLaunchConfig(); + clfg.setInstallLocation(new ClientVersionInstalled(cll, ver.getId())); + + ClientLaunchPanel clfn=((ClientLaunchPanel)km.clf); + String name=ver.getId(); + //String name=clfn.getNewName(ver.getId()); + clfg.setName(name); + clfg.setJavaLocation(null); + clfg.setUser(((UserPanel)km.users).getDefaultUser()); + //KNEManager.saveObjectToFile(clfg, FileUtil.getNotExistsFile( clfn.getConfigdir(), ".dat")); + ClientEditConfigDialog cecd=(ClientEditConfigDialog) clfn.getEcd(); + + KNEMCLTask tsk=clfg.createCheckTask(km); + cecd.apply(tsk,clfg); + clfn.loadConfigList(); + } + + }; + kmt.getWaitings().add(tskl); + km.getTaskController().putTask(kmt); + setVisible(false); + } + }); + } + + @Override + public void reload() { + cmb.removeAllItems(); + XDefaultListModelcls= getManager().getLauncherdata().getClientLocations(); + for (int i = 0; i{ + version=ver; + txf.setText(ver.getId()); + }); + km.chooser.setVisible(true); + } + }); + + } +} diff --git a/src/org/knemcl/install/MCVersionList.java b/src/org/knemcl/install/MCVersionList.java new file mode 100644 index 0000000..5996d1a --- /dev/null +++ b/src/org/knemcl/install/MCVersionList.java @@ -0,0 +1,8 @@ +package org.knemcl.install; + +import java.util.List; +import java.util.function.Consumer; + +public class MCVersionList{ + +} diff --git a/src/org/knemcl/install/Version.java b/src/org/knemcl/install/Version.java new file mode 100644 index 0000000..3d5fd6c --- /dev/null +++ b/src/org/knemcl/install/Version.java @@ -0,0 +1,117 @@ +package org.knemcl.install; + +public final class Version implements java.io.Serializable{ + static final long serialVersionUID = 2225101543115740876l; + private final String releaseTime; + private final String id; + private final String url; + private final String type; + + public String getReleaseTime() { + return releaseTime; + } + + + + public String getId() { + return id; + } + + + + public String getUrl() { + return url; + } + + + + public String getType() { + return type; + } + + + + public Version(String id, String url, String type, String releaseTime) { + this.id=id; + this.url=url; + this.type=type; + this.releaseTime=releaseTime; + } + + + + + + + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((id == null) ? 0 : id.hashCode()); + result = prime * result + + ((releaseTime == null) ? 0 : releaseTime.hashCode()); + result = prime * result + ((type == null) ? 0 : type.hashCode()); + result = prime * result + ((url == null) ? 0 : url.hashCode()); + return result; + } + + + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Version other = (Version) obj; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + if (releaseTime == null) { + if (other.releaseTime != null) + return false; + } else if (!releaseTime.equals(other.releaseTime)) + return false; + if (type == null) { + if (other.type != null) + return false; + } else if (!type.equals(other.type)) + return false; + if (url == null) { + if (other.url != null) + return false; + } else if (!url.equals(other.url)) + return false; + return true; + } + + + + public Version setId(String id) { + return new Version(id, url, type, releaseTime); + } + + public String toStringU() { + + return id +"-"+type; + } + + @Override + public String toString() { + + return id; + } + + + + public Version copy() { + + return new Version(id, url, type, releaseTime); + } + +} diff --git a/src/org/knemcl/install/VersionChooser.java b/src/org/knemcl/install/VersionChooser.java new file mode 100644 index 0000000..c55e3d7 --- /dev/null +++ b/src/org/knemcl/install/VersionChooser.java @@ -0,0 +1,178 @@ +package org.knemcl.install; + +import java.awt.Color; +import java.awt.Dimension; +import org.kne.ui.XFrame; +import org.kne.ui.YScrollPane; +import org.knemcl.download.DefaultDownloadSource; +import org.knemcl.download.DownloadSource; +import org.knemcl.task.DownloadTask; +import org.knemcl.task.KNEMCLTask; +import org.knemcl.main.CONST; +import org.knemcl.main.KNEManager; +import org.knemcl.ui.UIEnv; +import org.knemcl.uitool.ButtonSettingItem; +import org.knemcl.uitool.SettingItem; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; +import javax.swing.JRadioButton; +import javax.swing.JCheckBox; +import javax.swing.JButton; + +public class VersionChooser extends XFrame { + private Consumer con; + public Consumer getCon() { + return con; + } + public void setCon(Consumer con) { + this.con = con; + } + + private VersionlistJsonAnalyser vlja; + private JCheckBox release; + private JCheckBox snapshot; + private JCheckBox old; + private YScrollPane ysp; + private JButton refresh; + private File f; + private KNEManager km; + public void analyse() throws IOException{ + vlja=new VersionlistJsonAnalyser(f); + reload(); + } + private void reload() { + int val=ysp.getScrollBar().getValue(); + JPanel view=ysp.getView(); + view.removeAll(); + Listv=vlja.getVs(); + for (int i = 0; ids=new ArrayList<>(); + ds.add(new DefaultDownloadSource()); + DownloadTask tskl=new DownloadTask(UIEnv.getRsb().getString("checkinggameupdate"),"https://launchermeta.mojang.com/mc/game/version_manifest.json",CONST.versionslistfile,ds); + km.getTaskController().putTask(tskl); + KNEMCLTask kmt=new KNEMCLTask(UIEnv.getRsb().getString("loadingversionlist")) { + + @Override + public void runTask() throws Exception { + VersionChooser.this.analyse(); + } + + @Override + public List getWaitings() { + Listl=new ArrayList(); + l.add(tskl); + return l; + } + }; + km.getTaskController().putTask(kmt); + } + public VersionChooser(KNEManager km,File f) { + this.km=km; + this.f=f; + setTitle(UIEnv.getRsb().getString("chooseversiion")); + setResizable(false); + setTitleColor(new Color(0,0,0,128)); + getTitlelabel().setForeground(Color.WHITE); + getTitlelabel().setFont(UIEnv.getFont().deriveFont(16.0f)); + setSize(710, 560); + setLocationRelativeTo(null); + + JPanel panel = new JPanel(); + getContentPane().add(panel, BorderLayout.NORTH); + + release = new JCheckBox(UIEnv.getRsb().getString("release")); + release.setSelected(true); + panel.add(release); + release.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + reload(); + } + }); + + snapshot = new JCheckBox(UIEnv.getRsb().getString("snapshot")); + panel.add(snapshot); + snapshot.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + reload(); + } + }); + + old = new JCheckBox(UIEnv.getRsb().getString("old")); + panel.add(old); + + refresh = new JButton(); + refresh.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + checkGameUpdate(); + } + }); + refresh.setText("\u5237\u65B0"); + panel.add(refresh); + old.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + reload(); + } + }); + + ysp = new YScrollPane(690); + getContentPane().add(ysp, BorderLayout.CENTER); + } + +} diff --git a/src/org/knemcl/install/VersionlistJsonAnalyser.java b/src/org/knemcl/install/VersionlistJsonAnalyser.java new file mode 100644 index 0000000..240ccd6 --- /dev/null +++ b/src/org/knemcl/install/VersionlistJsonAnalyser.java @@ -0,0 +1,80 @@ +package org.knemcl.install; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import com.google.gson.stream.JsonReader; + +public class VersionlistJsonAnalyser { + private File jsonfile; + private Listvs=new ArrayList(); + + public File getJsonfile() { + return jsonfile; + } + public List getVs() { + return vs; + } + public VersionlistJsonAnalyser(File jsonfile) throws IOException { + super(); + this.jsonfile = jsonfile; + loadversionURLS(); + } + private void loadversionURLS() throws IOException{ + JsonReader json = null; + try { + json = new JsonReader(new FileReader(jsonfile)); + json.setLenient(true); + json.beginObject(); + while(json.hasNext()){ + switch(json.nextName()){ + case "versions": + json.beginArray(); + while(json.hasNext()){ + json.beginObject(); + String id=""; + String url=""; + String type=""; + String releaseTime=""; + while(json.hasNext()){ + + switch(json.nextName()){ + case "id": + id=json.nextString(); + break; + case "url": + url=json.nextString(); + break; + case "type": + type=json.nextString(); + break; + case "releaseTime": + releaseTime=json.nextString(); + break; + default: + json.skipValue(); + break; + } + } + + vs.add(new Version(id, url,type,releaseTime)); + json.endObject(); + } + json.endArray(); + break; + default: + json.skipValue(); + break; + } + } + json.endObject(); + } finally{ + if(json!=null) + json.close(); + } + + } +} diff --git a/src/org/knemcl/launch/ArgumentReplacer.java b/src/org/knemcl/launch/ArgumentReplacer.java new file mode 100644 index 0000000..a3b9bed --- /dev/null +++ b/src/org/knemcl/launch/ArgumentReplacer.java @@ -0,0 +1,27 @@ +package org.knemcl.launch; + +import java.util.*; +import java.util.Map.Entry; + +public class ArgumentReplacer { + Map map=new HashMap(); + public String replace(String s){ + Set> es=map.entrySet(); + Iterator> it=es.iterator(); + while (it.hasNext()) { + Entry type = it.next(); + s=s.replace(type.getKey(), type.getValue()); + } + return s; + } + public Map getMap() { + return map; + } + public void replaceList(Listsrc,Listdes){ + for (int i = 0; iassets=new ArrayList<>(); + public File getJsonfile() { + return jsonfile; + } + + public List getAssets() { + return assets; + } + + public AssetsJsonAnalyser(File jsonfile) throws IOException { + this.jsonfile=jsonfile; + if(!jsonfile.exists()){ + throw new FileNotFoundException("找不到资源索引文件"); + } + code(); + } + private void code() throws IOException { + JsonReader json=null; + try{ + json= new JsonReader(new InputStreamReader(new FileInputStream(jsonfile),Charset.forName("utf8"))); + json.setLenient(true); + json.beginObject(); + while(json.hasNext()){ + switch(json.nextName()){ + case "objects": + json.beginObject(); + while(json.hasNext()){ + String name=json.nextName(); + json.beginObject(); + while(json.hasNext()){ + switch (json.nextName()) { + case "hash": + String hash=json.nextString(); + assets.add(new Asset(name, hash)); + /* + + if(f.exists()){ + + }else{ + f.getParentFile().mkdirs(); + f.createNewFile(); + + downitem d=MainFrame.down.downlaod("Minecraft资源文件:"+name, "https://resources.download.minecraft.net/"+hash4, f,true); + downs.add(d); + + }*/ + break; + + default: + json.skipValue(); + break; + }} + json.endObject(); + } + json.endObject(); + break; + default: + json.skipValue(); + break; + } + } + json.endObject(); + } finally{ + json.close(); + } + + } +} diff --git a/src/org/knemcl/launch/ClientLaunchConfig.java b/src/org/knemcl/launch/ClientLaunchConfig.java new file mode 100644 index 0000000..dd028dd --- /dev/null +++ b/src/org/knemcl/launch/ClientLaunchConfig.java @@ -0,0 +1,432 @@ +package org.knemcl.launch; + +import java.awt.Image; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.Reader; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicReference; +import java.util.zip.ZipEntry; +import java.util.zip.ZipException; +import java.util.zip.ZipFile; +import javax.imageio.ImageIO; + +import org.kne.cloud.network.minecraft.MinecraftServerAddress; +import org.kne.cloud.network.MultipurposeSocketAddress; +import org.kne.console.JavaCommandLine; +import org.knemc.auth.Session; +import org.knemc.auth.UserConfig; +import org.knemcl.download.DownloadOrder; +import org.knemcl.task.CheckTask; +import org.knemcl.task.ClientLaunchTask; +import org.knemcl.task.DownloadTask; +import org.knemcl.task.GroupDownloadTask; +import org.knemcl.main.CONST; +import org.knemcl.main.KNEManager; +import org.knemcl.task.KNEMCLTask; +import org.knemcl.ui.ConfigListPanel; +import org.knemcl.ui.ProcessingFrame; +import org.knemcl.ui.UIEnv; + +public class ClientLaunchConfig extends LaunchConfig { + + /** + * + */ + private static final long serialVersionUID = 1L; + private UserConfig user; + private ClientVersionInstalled installLocation; + private boolean independent=false; + private String bindServer; + private String bindSave; + + public String getBindServer() { + return bindServer; + } + + public void setBindServer(String bindServer) { + this.bindServer = bindServer; + } + + public String getBindSave() { + return bindSave; + } + + public void setBindSave(String bindSave) { + this.bindSave = bindSave; + } + + public boolean isIndependent() { + return independent; + } + + public void setIndependent(boolean independent) { + this.independent = independent; + } + + public UserConfig getUser() { + return user; + } + + public void setUser(UserConfig user) { + this.user = user; + } + + public ClientVersionInstalled getVersionInstalled() { + return installLocation; + } + + public void setInstallLocation(ClientVersionInstalled installLocation) { + this.installLocation = installLocation; + } + + public File getJsonFile(){ + return installLocation.getJsonFile(); + } + + private transient VersionJsonAnalyser vja; + public VersionJsonAnalyser getVersionJsonAnalyser() throws IOException { + if(vja==null){ + vja=analyse(installLocation.getJsonFile()); + } + return vja; + } + private void reloadCommandLine(KNEManager km, boolean b) throws Exception{ + AtomicReference sess=new AtomicReference<>(); + AtomicReference exc=new AtomicReference(); + KNEMCLTask kmt=new KNEMCLTask(UIEnv.getRsb().getString("authmsa")) { + + @Override + public void runTask() throws Throwable { + try { + sess.set(user.auth()); + }catch(Exception e) { + exc.set(e); + } + } + }; + km.getTaskController().putTask(kmt); + clearAnalyse(); + installLocation.getLocation().checkLaunchProfile(); + getCommandline().setWorkdir(installLocation.getLocation().getDotmc()); + if(getJavaLocation()!=null){ + getCommandline().setProgram(getJavaLocation().getJava_exe()); + }else{ + JavaLocation jl=km.getJavamanager().getDefaultByMajor(getVersionJsonAnalyser().getJavaMajorVersionDef()); + if(jl!=null){ + getCommandline().setProgram(jl.getJava_exe()); + }else{ + jl=km.getJavamanager().getDefault(); + if(jl==null) { + throw new JavaNotFoundException("Can't auto match java"); + } + getCommandline().setProgram(jl.getJava_exe()); + } + } + if(!getCommandline().getProgram().exists()) { + throw new JavaNotFoundException("Java executable file not found"); + } + Lists=getVersionJsonAnalyser().getLibraries(); + VersionJsonAnalyser ed=getVersionJsonAnalyser().getRoot(); + String id=ed.getVersionid(); + if(!b) { + DownloadTask gdc=null,gdri=null; + + File core=getVersionInstalled().getLocation().getJarFileById(id); + if((!core.exists())||(core.length()==0)){ + if(getVersionJsonAnalyser().getClientURL()!=null){ + gdc=new DownloadTask(UIEnv.getRsb().getString("downloadcore"), new DownloadOrder(core, getVersionJsonAnalyser().getClientURL(), id)); + km.getTaskController().putTask(gdc); + } + } + + Listdod=new ArrayList<>(); + Iteratoritc=s.iterator(); + while (itc.hasNext()) { + Library typed= itc.next(); + File libf=new File(getVersionInstalled().getLocation().getLibsDir(),typed.getLibraryfile()); + if((!libf.exists())||libf.length()==0){ + //System.out.println(typed.getName()+" "+typed.getUrl()); + if(typed.getUrl()!=null) + dod.add(new DownloadOrder(libf, typed.getUrl(), typed.getName())); + } + } + GroupDownloadTask gdt=null,gda=null; + if(!dod.isEmpty()){ + gdt=new GroupDownloadTask(UIEnv.getRsb().getString("downloadlibraries"), dod); + km.getTaskController().putTask(gdt); + + } + File fres=new File(getVersionInstalled().getLocation().getAssetsDir(),"indexes/"+getVersionJsonAnalyser().getAssetsindex()+".json"); + if((!fres.exists())||fres.length()==0){ + if(getVersionJsonAnalyser().getAssetsURL()!=null){ + gdri=new DownloadTask(UIEnv.getRsb().getString("downloadassetsindex"), new DownloadOrder(fres, getVersionJsonAnalyser().getAssetsURL(),getVersionJsonAnalyser().getAssetsindex() )); + km.getTaskController().putTask(gdri); + } + } + if(gdri!=null){ + gdri.waitForEnd(); + } + Listdoda=new ArrayList<>(); + if(fres.exists()){ + + AssetsJsonAnalyser aja=new AssetsJsonAnalyser(fres); + List n=aja.getAssets(); + for (Iterator iterator = n.iterator(); iterator.hasNext();) { + Asset asset = iterator.next(); + File fa=asset.getFile(getVersionInstalled().getLocation().getAssetsDir()); + if((!fa.exists())||fa.length()==0){ + doda.add(new DownloadOrder(fa, asset.getURL("https://resources.download.minecraft.net/"), asset.getName())); + } + } + + } + if(!doda.isEmpty()){ + gda=new GroupDownloadTask(UIEnv.getRsb().getString("downloadassets"), doda); + km.getTaskController().putTask(gda); + } + + + if(gdt!=null){ + gdt.waitForEnd(); + } + if(gda!=null){ + gda.waitForEnd(); + } + if(gdc!=null){ + gdc.waitForEnd(); + } + } + File dirn=getVersionInstalled().getLocation().getNativeDirById(id); + getCommandline().getCps().clear(); + Listcps2=new ArrayList(); + Iteratorit=s.iterator(); + while (it.hasNext()) { + Library type= it.next(); + if(type.checkRule(km.getSystemInfo())){ + if(!type.isNative()){ + cps2.add("."+File.separatorChar+"libraries"+File.separatorChar+type.getLibraryfile().replace('/', File.separatorChar)); + }else{ + File libf=new File(getVersionInstalled().getLocation().getLibsDir(),type.getLibraryfile()); + decompress(libf,dirn); + cps2.add("."+File.separatorChar+"libraries"+File.separatorChar+type.getLibraryfile().replace('/', File.separatorChar)); + } + } + } + + cps2.add("."+File.separatorChar+"versions"+File.separatorChar+id+File.separatorChar+id+".jar"); + Listsag=getCommandline().getArgs(); + sag.clear(); + //sag.add("-XX:+UseG1GC"); + //sag.add("-XX:-UseAdaptiveSizePolicy"); + sag.add("-Dfml.ignoreInvalidMinecraftCertificates=true"); + sag.add("-Dfml.ignorePatchDiscrepancies=true"); + sag.add("-XX:+UnlockExperimentalVMOptions"); + if(getVersionJsonAnalyser().getJvmarguments().isEmpty()){ + getCommandline().setNativepath(dirn); + getCommandline().getCps().addAll(cps2); + }else{ + getCommandline().setNativepath(null); + + ArgumentReplacer arp=new ArgumentReplacer(); + Mapreps=arp.getMap(); + reps.put("${launcher_version}", CONST.kver); + reps.put("${launcher_name}", CONST.name); + reps.put("${natives_directory}", dirn.getAbsolutePath()); + reps.put("${library_directory}", getVersionInstalled().getLocation().getLibsDir().getAbsolutePath()); + reps.put("${classpath_separator}", ";"); + reps.put("${classpath}", JavaCommandLine.makeClassPath(cps2)); + reps.put("${version_name}", id); + arp.replaceList(getVersionJsonAnalyser().getJvmarguments(), sag); + } + sag.addAll(getUVMargs()); + + + kmt.waitForEnd(); + + Session session=sess.get(); + if(session==null) { + throw exc.get(); + } + + Listjag=getCommandline().getJargs(); + jag.clear(); + Listargs=getVersionJsonAnalyser().getArguments(); + ArgumentReplacer arp=new ArgumentReplacer(); + Mapreps=arp.getMap(); + reps.put("${auth_player_name}", session.getName_in_game()); + reps.put("${version_name}", CONST.name+" "+CONST.kver); + reps.put("${game_directory}", getGameDir().getAbsolutePath()); + reps.put("${assets_root}", getVersionInstalled().getLocation().getAssetsDir().getAbsolutePath()); + reps.put("${game_assets}", getVersionInstalled().getLocation().getAssetsDir().getAbsolutePath()); + reps.put("${assets_index_name}", getVersionJsonAnalyser().getAssetsindex()); + reps.put("${auth_uuid}", session.getUuid().toString()); + reps.put("${auth_access_token}",session.getToken_key()); + reps.put("${user_type}",session.getUser_type().toString()); + reps.put("${version_type}", CONST.name+" "+CONST.kver); + reps.put("${user_properties}", "{}"); + arp.replaceList(args, jag); + jag.addAll(getUPCargs()); + getCommandline().setMainclass(getVersionJsonAnalyser().getMain()); + } + public File getGameDir() { + return (independent?getVersionInstalled().getJsonDir().getAbsoluteFile():getVersionInstalled().getLocation().getDotmc().getAbsoluteFile()); + } + + /*public KNEMCLTask createCheckTaskBeforeLaunch(KNEManager km) { + KNEMCLTask tsk=new KNEMCLTask(CONST.checkconfig) { + + @Override + public void runTask() throws Exception { + ProcessingFrame psf=new ProcessingFrame(CONST.checking); + psf.setVisible(true); + psf.getProgressBar().setIndeterminate(true); + + try{ + reloadCommandLine(km,isIgnorecheck()); + //System.out.println(getCommandline()); + }finally{ + psf.getProgressBar().setIndeterminate(false); + psf.getProgressBar().setValue(100); + progressBar.setValue(100); + progressBar.setString(CONST.checkdone); + psf.setVisible(false); + } + } + + @Override + public List getWaitings() { + return null; + } + }; + km.getTaskController().putTask(tsk); + return tsk; + } + public KNEMCLTask createCheckTask(KNEManager km){ + KNEMCLTask tsk=new KNEMCLTask(CONST.checkconfig) { + + @Override + public void runTask() throws Exception { + ProcessingFrame psf=new ProcessingFrame(CONST.checking); + psf.setVisible(true); + psf.getProgressBar().setIndeterminate(true); + + try{ + reloadCommandLine(km,false); + //System.out.println(getCommandline()); + }finally{ + psf.getProgressBar().setIndeterminate(false); + psf.getProgressBar().setValue(100); + progressBar.setValue(100); + progressBar.setString(CONST.checkdone); + psf.setVisible(false); + } + } + + @Override + public List getWaitings() { + return null; + } + }; + km.getTaskController().putTask(tsk); + return tsk; + }*/ + private void decompress(File libf,File dirn) throws IOException { + if(libf.exists()){ + ZipFile zipf=null; + try{ + zipf=new ZipFile(libf); + Enumerationzn=zipf.entries(); + while (zn.hasMoreElements()) { + ZipEntry zipEntry = (ZipEntry) zn.nextElement(); + if((!zipEntry.getName().startsWith("META-INF"))&&(!zipEntry.getName().contains("/"))){ + InputStream in=null; + OutputStream out=null; + try{ + in=zipf.getInputStream(zipEntry); + out=new FileOutputStream(new File(dirn,zipEntry.getName())); + int len=-1; + byte[]b=new byte[8192]; + while((len=in.read(b))!=-1){ + out.write(b, 0, len); + } + }finally{ + if(in!=null) + in.close(); + if(out!=null) + out.close(); + } + } + } + }finally{ + if(zipf!=null) + zipf.close(); + } + } + } + + public void clearAnalyse() { + vja=null; + } + + private VersionJsonAnalyser analyse(File f) throws IOException { + VersionJsonAnalyser vjs=new VersionJsonAnalyser(f); + String inh=vjs.getInherits(); + if(inh!=null){ + vjs.addAll(analyse(installLocation.getLocation().getJsonFileById(inh))); + } + return vjs; + } + + @Override + public void checkData(KNEManager km) throws Exception { + reloadCommandLine(km, false); + } + + @Override + public void updateCommandLine(KNEManager km) throws Exception { + reloadCommandLine(km, isIgnorecheck()); + + } + + @Override + public KNEMCLTask createCheckTask(KNEManager km) { + CheckTask ct=new CheckTask(km, this); + km.getTaskController().putTask(ct); + return ct; + } + + @Override + public KNEMCLTask createLaunchTask(KNEManager km) { + ClientLaunchTask ct=new ClientLaunchTask(this,km); + km.getTaskController().putTask(ct); + return ct; + } + + public KNEMCLTask createLaunchTask(KNEManager km, MultipurposeSocketAddress msa) throws UnknownHostException, IOException { + msa.connectSocket(10000).close(); + ClientLaunchTask ct=new ClientLaunchTask(this,km,msa); + km.getTaskController().putTask(ct); + return ct; + } + + public KNEMCLTask createLaunchTask(KNEManager km, String save) { + ClientLaunchTask ct=new ClientLaunchTask(this,km,save); + km.getTaskController().putTask(ct); + return ct; + } + + public File getSavesDir() { + return new File(getGameDir(),"saves"); + } + +} diff --git a/src/org/knemcl/launch/ClientLocation.java b/src/org/knemcl/launch/ClientLocation.java new file mode 100644 index 0000000..5acdb32 --- /dev/null +++ b/src/org/knemcl/launch/ClientLocation.java @@ -0,0 +1,139 @@ +package org.knemcl.launch; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.PrintStream; +import java.io.Serializable; +import java.util.*; +import org.knemcl.main.CONST; +public class ClientLocation implements Serializable,EditablePath{ + private static final long serialVersionUID = 1L; + private File dotmc; + public ClientLocation(File dotmc) { + super(); + this.dotmc = dotmc; + } + + public ClientLocation() { + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime*result+((dotmc==null) ? 0 : dotmc.hashCode()); + return result; + } + @Override + public boolean equals(Object obj) { + if (this==obj) + return true; + if (obj==null) + return false; + if (getClass()!=obj.getClass()) + return false; + ClientLocation other = (ClientLocation) obj; + if (dotmc==null) { + if (other.dotmc!=null) + return false; + } else if (!dotmc.equals(other.dotmc)) + return false; + return true; + } + public File getDotmc() { + return dotmc; + } + public void setDotmc(File dotmc) { + this.dotmc = dotmc; + } + @Override + public String toString() { + return dotmc.toString(); + } + + public File getVersionsDir() { + return new File(dotmc,"versions"); + } + public File getSavesDir() { + return new File(dotmc,"saves"); + } + public File getLibsDir() { + return new File(dotmc,"libraries"); + } + public File getAssetsDir() { + return new File(dotmc,"assets"); + } + public File getJsonDirById(String versionid) { + return new File(getVersionsDir(),versionid); + } + public File getJsonFileById(String versionid) { + return new File(getVersionsDir(),versionid+"/"+versionid+".json"); + } + public File getJarFileById(String versionid) { + return new File(getVersionsDir(),versionid+"/"+versionid+".jar"); + } + public File getNativeDirById(String versionid) { + File f=new File(getVersionsDir(),versionid+"/"+versionid+"-natives"); + if(!f.exists()) + f.mkdirs(); + return f; + } + public List getAllVersionInstalled(){ + List l=new ArrayList(); + File vd=getVersionsDir(); + if(!vd.exists()) + vd.mkdirs(); + File[]f=vd.listFiles(); + if (f!=null) + for (int i = 0; iUVMargs=new ArrayList(); + private ListUPCargs=new ArrayList(); + private boolean ignorecheck=false; + + + public boolean isIgnorecheck() { + return ignorecheck; + } + + public void setIgnorecheck(boolean ignorecheck) { + this.ignorecheck = ignorecheck; + } + public boolean isNolaunchimmediately() { + return nolaunchimmediately; + } + + public List getUVMargs() { + return UVMargs; + } + + public List getUPCargs() { + return UPCargs; + } + + public void setNolaunchimmediately(boolean nolaunchimmediately) { + this.nolaunchimmediately = nolaunchimmediately; + } + + public JavaCommandLine getCommandline() { + return commandline; + } + + public JavaLocation getJavaLocation() { + return javaLocation; + } + + public void setJavaLocation(JavaLocation javaLocation) { + this.javaLocation = javaLocation; + } + + + + + public abstract void checkData(KNEManager km) throws Exception; + public abstract void updateCommandLine(KNEManager km) throws Exception; + + public abstract KNEMCLTask createCheckTask(KNEManager km) ; + public abstract KNEMCLTask createLaunchTask(KNEManager km) ; +} diff --git a/src/org/knemcl/launch/LaunchException.java b/src/org/knemcl/launch/LaunchException.java new file mode 100644 index 0000000..071f9b7 --- /dev/null +++ b/src/org/knemcl/launch/LaunchException.java @@ -0,0 +1,25 @@ +package org.knemcl.launch; + +public class LaunchException extends Exception { + + public LaunchException() { + super(); + } + + protected LaunchException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } + + public LaunchException(String message, Throwable cause) { + super(message, cause); + } + + public LaunchException(String message) { + super(message); + } + + public LaunchException(Throwable cause) { + super(cause); + } + +} diff --git a/src/org/knemcl/launch/Library.java b/src/org/knemcl/launch/Library.java new file mode 100644 index 0000000..2a8335a --- /dev/null +++ b/src/org/knemcl/launch/Library.java @@ -0,0 +1,121 @@ +package org.knemcl.launch; + +import java.io.*; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Objects; + +import org.knemcl.main.KNEManager; +import org.knemcl.main.SystemInfo; + +public class Library implements Comparable{ + private String libraryfile; + private String url; + private String name; + private Rule rule; + private boolean isnative; + private String classify; + private Map platformNames; + + public Rule getRule() { + return rule; + } + + public void setRule(Rule rule) { + this.rule = rule; + } + + public String getLibraryfile() { + return libraryfile; + } + + public void setLibraryfile(String libraryfile) { + this.libraryfile = libraryfile; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public int hashCode() { + return Objects.hash(classify, isnative, libraryfile, name, url); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Library other = (Library) obj; + return Objects.equals(classify, other.classify) && isnative == other.isnative + && Objects.equals(libraryfile, other.libraryfile) && Objects.equals(name, other.name) + && Objects.equals(url, other.url); + } + + @Override + public String toString() { + return "Library [libraryfile=" + libraryfile + ", url=" + url + ", name=" + name + ", rule=" + rule + + ", isnative=" + isnative + ", classify=" + classify + "]"; + } + + public void setNative(boolean b) { + this.isnative = b; + } + + public boolean isNative() { + return isnative; + } + @Override + public int compareTo(Library o) { + return name.compareTo(o.name); + } + + public boolean checkRule(SystemInfo si) { + if(rule==null) { + if(classify!=null) { + for (Iterator> iterator = platformNames.entrySet().iterator(); iterator.hasNext();) { + Entry v= (Entry) iterator.next(); + if(si.getOsName().toLowerCase().contains(v.getKey())) { + return classify.equals(v.getValue()); + } + } + return false; + + }else { + return true; + } + }else { + return rule.check(si); + } + } + + public void setClassify(String classify) { + this.classify=classify; + } + + public String getClassify() { + return classify; + } + + public void setPlatformNames(Map platformNames) { + this.platformNames=platformNames; + } + + } diff --git a/src/org/knemcl/launch/Rule.java b/src/org/knemcl/launch/Rule.java new file mode 100644 index 0000000..3520c9f --- /dev/null +++ b/src/org/knemcl/launch/Rule.java @@ -0,0 +1,81 @@ +package org.knemcl.launch; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import org.knemcl.main.KNEManager; +import org.knemcl.main.SystemInfo; + +import com.google.gson.stream.JsonReader; + +public class Rule { + private List ri=new ArrayList<>(); + + public List getRi() { + return ri; + } + public boolean check(SystemInfo si){ + boolean b=false; + for (int i = 0; i libraries = new ArrayList(); + private List arguments=new ArrayList<>(); + private List jvmarguments=new ArrayList<>(); + private String assetsindex; + private String assetsURL; + private String inherits; + private String main; + private String serverURL; + private String clientURL; + + private String versionid; + + private Integer javamajorVersion; + + + public File getJsonfile() { + return jsonfile; + } + + public VersionJsonAnalyser(File jsonfile) throws IOException { + this.jsonfile=jsonfile; + if(!jsonfile.exists()){ + throw new FileNotFoundException("找不到版本描述文件"); + } + code(); + } + private void code() throws IOException { + JsonReader jr = null; + try { + jr = new JsonReader(new InputStreamReader(new FileInputStream(jsonfile),Charset.forName("utf8"))); + jr.setLenient(true); + jr.beginObject(); + while (jr.hasNext()) { + String name = jr.nextName(); + if (name.equals("assetIndex")) { + jr.beginObject(); + while (jr.hasNext()) { + switch (jr.nextName()) { + case "id": + this.assetsindex = jr.nextString(); + break; + case "url": + this.assetsURL = jr.nextString(); + break; + default: + jr.skipValue(); + break; + } + } + jr.endObject(); + }else if(name.equals("inheritsFrom")){ + this.inherits=jr.nextString(); + } else if (name.equals("libraries")) { + suchlib(jr); + }else if(name.equals("id")){ + versionid=jr.nextString(); + }else if (name.equals("javaVersion")) { + jr.beginObject(); + while(jr.hasNext()){//"javaVersion": {"component": "java-runtime-alpha", "majorVersion": 16} + String tmp=jr.nextName(); + if(tmp.equals("majorVersion")){ + javamajorVersion=jr.nextInt(); + }else{ + jr.skipValue(); + } + } + jr.endObject(); + } else if (name.equals("mainClass")) { + main = jr.nextString(); + } else if (name.equals("downloads")) { + getCoredownURL(jr); + }else if(name.equals("minecraftArguments")){ + String[]s=jr.nextString().split(" "); + for (int i = 0; i platformName=new HashMap<>(); + Library l = new Library(); + while (jr.hasNext()) { + String name = jr.nextName(); + if (name.equals("name")) { + l.setName(jr.nextString()); + } else if (name.equals("downloads")) { + jr.beginObject(); + while (jr.hasNext()) { + String name1 = jr.nextName(); + if (name1.equals("artifact")) { + jr.beginObject(); + while (jr.hasNext()) { + String nametwo = jr.nextName(); + if (nametwo.equals("path")) { + l.setLibraryfile(jr.nextString()); + } else if (nametwo.equals("url")) { + l.setUrl(jr.nextString()); + } else { + jr.skipValue(); + } + } + jr.endObject(); + } else if (name1.equals("classifiers")) { + + jr.beginObject(); + while (jr.hasNext()) { + String classify = jr.nextName(); + Library ln=new Library(); + ln.setNative(true); + ln.setClassify(classify); + ln.setPlatformNames(platformName); + jr.beginObject(); + while (jr.hasNext()) { + String namethree = jr.nextName(); + if (namethree.equals("path")) { + ln.setLibraryfile(jr.nextString()); + } else if (namethree.equals("url")) { + ln.setUrl(jr.nextString()); + } else { + jr.skipValue(); + } + } + jr.endObject(); + libraries.add(ln); + } + jr.endObject(); + + } else { + jr.skipValue(); + } + } + jr.endObject(); + } else if (name.equals("url")) { + urlhead=jr.nextString(); + isforge=true; + } else if (name.equals("rules")) { + l.setRule(Rule.loadfromJson(jr)); + }else if(name.equals("natives")) { + jr.beginObject(); + while(jr.hasNext()) { + String snn=jr.nextName(); + platformName.put(snn,jr.nextString()); + } + jr.endObject(); + + } else { + jr.skipValue(); + } + + } + if(l.getLibraryfile()==null){ + String s=l.getName(); + String strs[]=s.split(":"); + + strs[0]=strs[0].replace('.', '/'); + l.setLibraryfile(strs[0]+"/"+strs[1]+"/"+strs[2]+"/"+strs[1]+"-"+strs[2]+".jar"); + } + if(l.getUrl()==null){ + if(urlhead==null){ + urlhead="https://libraries.minecraft.net/"; + } + //if(isforge){ + String s=l.getName(); + String strs[]=s.split(":"); + strs[0]=strs[0].replace('.', '/'); + l.setUrl(urlhead+strs[0]+"/"+strs[1]+"/"+strs[2]+"/"+strs[1]+"-"+strs[2]+".jar"); + //} + } + libraries.add(l); + jr.endObject(); + } + jr.endArray(); + } + @Override + public String toString() { + return "VersionJsonAnalyser [jsonfile="+jsonfile+", libraries="+libraries+", arguments=" + +arguments+", assetsindex="+assetsindex+", assetsURL="+assetsURL+", inherits=" + +inherits+", main="+main+", serverURL="+serverURL+", clientURL="+clientURL + +", versionid="+versionid+", jmajorVersion="+javamajorVersion+"]"; + } + + + public List getLibraries() { + return libraries; + } + + public String getAssetsindex() { + return assetsindex; + } + + public String getAssetsURL() { + return assetsURL; + } + + public String getInherits() { + return inherits; + } + + public String getMain() { + return main; + } + + public String getServerURL() { + return serverURL; + } + + public String getClientURL() { + return clientURL; + } + + public List getArguments() { + return arguments; + } + + public List getJvmarguments() { + return jvmarguments; + } + + public String getVersionid() { + return versionid; + } + + public Integer getJavaMajorVersion() { + return javamajorVersion; + } + + public int getJavaMajorVersionDef() { + if(javamajorVersion==null) + return 8; + return javamajorVersion.intValue(); + } + + public VersionJsonAnalyser getAddall() { + return addall; + } + + public void addAll(VersionJsonAnalyser l){ + libraries.addAll(l.libraries); + + int n=l.arguments.size(); + for (int i = 0; i{return getLauncherdata().getUserConfigList();}, this); + + psb.setValue(45); + psi.setText("loading launcher"); + clf=new ClientLaunchPanel(this); + + psb.setValue(55); + psi.setText("loading network controller"); + MultipurposeSocketAddress.getSocketTypeRegister().put("DETTCP",new SocketType(null, new ProtocolDetectorServerSocketFactory())); + klalbController=new KLALBController(); + klalbController.registerToProxyTypeAs("KLALB"); + klalbStateGUI =new KLALBStateGUI2(klalbController, UIEnv.getRsb().getString("klalb")+" V"+org.kne.cloud.network.klalb.CONST.klalbver); + remoteRelay=new RemoteRelay(klalbController); + remoteRelay.setNetworkPorts(getLauncherdata().getNetworkPorts()); + + psb.setValue(65); + psi.setText("loading online lobby"); + serverList=new ServerListPanel(this); + + psb.setValue(75); + psi.setText("loading main window"); + mainwindow =new MainWindow(this); + + psb.setValue(85); + psi.setText("loading task controller"); + tsc=new TaskController(((MainWindow) mainwindow).getRv()); + + psb.setValue(95); + psi.setText("checking game update"); + chooser=new VersionChooser(this,CONST.versionslistfile); + chooser.checkGameUpdate(); + clienti=new ClientInstaller(this); + + + psb.setValue(100); + psi.setText("opening main window"); + mainwindow.setVisible(true); + //serverList.startScanning(); + + }catch(Exception e){ + e.printStackTrace(); + CrashReport cr= new CrashReport(null, true); + cr.addWindowListener(new WindowListener() { + + @Override + public void windowOpened(WindowEvent arg0) { + // TODO 自动生成的方法存根 + + } + + @Override + public void windowIconified(WindowEvent arg0) { + // TODO 自动生成的方法存根 + + } + + @Override + public void windowDeiconified(WindowEvent arg0) { + // TODO 自动生成的方法存根 + + } + + @Override + public void windowDeactivated(WindowEvent arg0) { + // TODO 自动生成的方法存根 + + } + + @Override + public void windowClosing(WindowEvent arg0) { + System.exit(1); + } + + @Override + public void windowClosed(WindowEvent arg0) { + + } + + @Override + public void windowActivated(WindowEvent arg0) { + // TODO 自动生成的方法存根 + + } + }); + cr.report(e, "load failed"); + }finally { + if(psi!=null) + psi.setVisible(false); + } + + } + private void checkDirs() { + if(!CONST.data.exists()){ + CONST.data.mkdirs(); + } + if(!CONST.clientconfig.exists()){ + CONST.clientconfig.mkdirs(); + } + if(!CONST.serverconfig.exists()){ + CONST.serverconfig.mkdirs(); + } + if(!CONST.userconfig.exists()){ + CONST.userconfig.mkdirs(); + } + } + public LauncherData getLauncherdata() { + return launcherdata; + } + public OnlineSearchData getSearchdata() { + return searchdata; + } + public AutoProperties getProperties() { + return properties; + } + public void showMainWindow(){ + mainwindow.setVisible(true); + } + public JavaManager getJavamanager() { + return javamanager; + } + public void installClient() { + clienti.setVisible(true); + } + public SystemInfo getSystemInfo() { + return sysinfo; + } + +} diff --git a/src/org/knemcl/main/SystemInfo.java b/src/org/knemcl/main/SystemInfo.java new file mode 100644 index 0000000..41518c6 --- /dev/null +++ b/src/org/knemcl/main/SystemInfo.java @@ -0,0 +1,32 @@ +package org.knemcl.main; + +public class SystemInfo { + private String osName; + private String osArch; + private String osVersion; + public String getOsName() { + return osName; + } + public String getOsArch() { + return osArch; + } + + public String getOsVersion() { + return osVersion; + } + public SystemInfo(String osName, String osArch, String osVersion) { + super(); + this.osName = osName; + this.osArch = osArch; + this.osVersion = osVersion; + } + public SystemInfo() { + this.osName = System.getProperty("os.name"); + this.osArch = System.getProperty("os.arch"); + this.osVersion = System.getProperty("os.version"); + } + @Override + public String toString() { + return "SystemInfo [osName=" + osName + ", osArch=" + osArch + ", osVersion=" + osVersion + "]"; + } +} diff --git a/src/org/knemcl/network/LatencyAscendComparator.java b/src/org/knemcl/network/LatencyAscendComparator.java new file mode 100644 index 0000000..2752c0c --- /dev/null +++ b/src/org/knemcl/network/LatencyAscendComparator.java @@ -0,0 +1,25 @@ +package org.knemcl.network; + +import java.util.Comparator; + +import org.kne.cloud.network.minecraft.MinecraftServerPinger; + +public class LatencyAscendComparator implements Comparator { + private String name="LatencyAscendComparator"; + public LatencyAscendComparator() { + super(); + } + public LatencyAscendComparator(String name) { + super(); + this.name = name; + } + @Override + public int compare(MinecraftServerPinger o1, MinecraftServerPinger o2) { + return Long.compare(o1.getLatency(), o2.getLatency()); + } + + @Override + public String toString() { + return name; + } +} diff --git a/src/org/knemcl/network/LatencyDescendComparator.java b/src/org/knemcl/network/LatencyDescendComparator.java new file mode 100644 index 0000000..68e6525 --- /dev/null +++ b/src/org/knemcl/network/LatencyDescendComparator.java @@ -0,0 +1,24 @@ +package org.knemcl.network; + +import java.util.Comparator; + +import org.kne.cloud.network.minecraft.MinecraftServerPinger; + +public class LatencyDescendComparator implements Comparator { + private String name="LatencyDescendComparator"; + public LatencyDescendComparator() { + super(); + } + public LatencyDescendComparator(String name) { + super(); + this.name = name; + } + @Override + public int compare(MinecraftServerPinger o1, MinecraftServerPinger o2) { + return Long.compare(o2.getLatency(), o1.getLatency()); + } + @Override + public String toString() { + return name; + } +} diff --git a/src/org/knemcl/network/LocalRelay.java b/src/org/knemcl/network/LocalRelay.java new file mode 100644 index 0000000..c25b985 --- /dev/null +++ b/src/org/knemcl/network/LocalRelay.java @@ -0,0 +1,130 @@ +package org.knemcl.network; + +import java.io.Closeable; +import java.io.IOException; +import java.net.Socket; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.function.Consumer; +import java.util.function.Supplier; + +import org.kne.cloud.network.MultipurposeSocketAddress; +import org.kne.cloud.network.ProtocolDetectorSocket; +import org.kne.cloud.network.SocketListener; +import org.kne.cloud.network.frpc.FrpcIni; +import org.kne.cloud.network.frpc.FrpcProcess; +import org.kne.cloud.network.klalb.KLALBController; +import org.kne.cloud.network.klalb.KLALBRemoteLine; +import org.kne.cloud.network.klalb.KLALBVirtualServerSocket; +import org.kne.cloud.network.klalb.KLALBVirtualSocket; +import org.kne.cloud.network.klalb.StreamKLALBPacketLink; +import org.kne.cloud.network.minecraft.KLALBJsonMotdInserter; +import org.kne.cloud.network.minecraft.MinecraftSocketBridge; + +public class LocalRelay implements Closeable,AutoCloseable{ + private KLALBController kc; + private MultipurposeSocketAddress connect; + private List frpcs=new ArrayList<>(); + private SocketListener tcpl2; + private SocketListener sl; + + public LocalRelay(KLALBController kc, MultipurposeSocketAddress connect,SocketListener sl) throws IOException { + super(); + this.kc = kc; + this.connect = connect; + this.sl=sl; + open(); + } + + private void open() throws IOException { + try { + + Consumercs=(soc)->{ + //System.out.println(soc); + Socket s=null; + try { + s=connect.connectSocket(); + MinecraftSocketBridge dsb=new MinecraftSocketBridge(soc, s); + dsb.getBridgeBA().getTransformers().add(new KLALBJsonMotdInserter(()->{return kc.getSelf().getAddress();},(Supplier)()->{return 23333;})); + dsb.run(); + } catch (UnknownHostException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + }finally { + if(s!=null) + try { + s.close(); + } catch (IOException e1) { + // TODO 自动生成的 catch 块 + e1.printStackTrace(); + } + try { + soc.close(); + } catch (IOException e) { + // TODO 自动生成的 catch 块 + e.printStackTrace(); + } + } + + }; + sl.setCon(cs); + tcpl2=new SocketListener(new MultipurposeSocketAddress("KLALB_Stream", "::0", 23333)); + tcpl2.setCon((soc)->{ + Socket s=null; + try { + if(soc instanceof KLALBVirtualSocket) { + KLALBVirtualSocket klv=(KLALBVirtualSocket) soc; + klv.setCompress(1); + } + s=connect.connectSocket(); + s.setTcpNoDelay(true); + //soc.setTcpNoDelay(true); + //((KLALBVirtualSocket) soc).setCompress(1); + MinecraftSocketBridge dsb=new MinecraftSocketBridge(soc, s); + dsb.getBridgeBA().getTransformers().add(new KLALBJsonMotdInserter(()->{return kc.getSelf().getAddress();},()->{return 23333;})); + //dsb.getSab().setDelay(1); + dsb.run(); + /*CompressedSocketBridge csb=new CompressedSocketBridge(s, soc); + csb.getSab().setDelay(1); + csb.run();*/ + } catch (UnknownHostException e) { + // TODO 自动生成的 catch 块 + e.printStackTrace(); + } catch (IOException e) { + // TODO 自动生成的 catch 块 + e.printStackTrace(); + }finally { + if(s!=null) + try { + s.close(); + } catch (IOException e1) { + // TODO 自动生成的 catch 块 + e1.printStackTrace(); + } + try { + soc.close(); + } catch (IOException e) { + // TODO 自动生成的 catch 块 + e.printStackTrace(); + } + } + + }); + }catch(Exception e) { + if(tcpl2!=null) + tcpl2.close(); + throw e; + } + } + + @Override + public void close() throws IOException { + sl.setCon(null); + if(tcpl2!=null) + tcpl2.close(); + } + +} diff --git a/src/org/knemcl/network/MinecraftChatText.java b/src/org/knemcl/network/MinecraftChatText.java new file mode 100644 index 0000000..b6f4ee0 --- /dev/null +++ b/src/org/knemcl/network/MinecraftChatText.java @@ -0,0 +1,277 @@ +package org.knemcl.network; + +import java.awt.Color; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import javax.swing.text.BadLocationException; +import javax.swing.text.Document; +import javax.swing.text.SimpleAttributeSet; +import javax.swing.text.StyleConstants; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.JsonPrimitive; + +import netscape.javascript.JSObject; + +public class MinecraftChatText { + private Listlst=new ArrayList(); + public static class TextEntry{ + + public TextEntry(SimpleAttributeSet sas, String text) { + super(); + this.sas = sas; + this.text = text; + } + private SimpleAttributeSet sas; + private String text; + public SimpleAttributeSet getSas() { + return sas; + } + public String getText() { + return text; + } + + } + public MinecraftChatText(String jsonortext,boolean isold) { + SimpleAttributeSet defaul=new SimpleAttributeSet(); + StyleConstants.setForeground(defaul ,Color.DARK_GRAY); + StyleConstants.setFontSize(defaul, 13); + StyleConstants.setFontFamily(defaul, "微软雅黑"); + if(isold) { + analyseOldChatText(jsonortext,defaul); + }else { + JsonObject jobj=(JsonObject) new JsonParser().parse(jsonortext); + //try { + analyseJsonChatText(jobj,defaul); + //}catch(Exception e) { + //System.err.println(jsonortext); + //} + } + } + private void analyseOldChatText(String jsonortext, SimpleAttributeSet defaul) { + SimpleAttributeSet cur=defaul; + StringBuilder sbf=new StringBuilder(); + boolean switc=false; + for (int i = 0; i < jsonortext.length(); i++) { + char c=jsonortext.charAt(i); + if(c=='\u00a7'||c=='§') { + switc=true; + }else { + if(switc) { + if(!sbf.isEmpty()) { + lst.add(new TextEntry(cur,sbf.toString())); + sbf.setLength(0); + } + cur=(SimpleAttributeSet) cur.clone(); + switch(c) { + case '0': + StyleConstants.setForeground(cur, black); + break; + case '1': + StyleConstants.setForeground(cur, dark_blue); + break; + case '2': + StyleConstants.setForeground(cur, dark_green); + break; + case '3': + StyleConstants.setForeground(cur, dark_aqua); + break; + case '4': + StyleConstants.setForeground(cur,dark_red); + break; + case '5': + StyleConstants.setForeground(cur,dark_purple); + break; + case '6': + StyleConstants.setForeground(cur, gold); + break; + case '7': + StyleConstants.setForeground(cur, gray); + break; + case '8': + StyleConstants.setForeground(cur, dark_gray); + break; + case '9': + StyleConstants.setForeground(cur, blue); + break; + case 'a': + StyleConstants.setForeground(cur, green); + break; + case 'b': + StyleConstants.setForeground(cur, aqua); + break; + case 'c': + StyleConstants.setForeground(cur, red); + break; + case 'd': + StyleConstants.setForeground(cur, red); + break; + case 'e': + StyleConstants.setForeground(cur, yellow); + break; + case 'f': + StyleConstants.setForeground(cur,white); + break; + case 'k': + break; + case 'l': + StyleConstants.setBold(cur, true); + break; + case 'm': + StyleConstants.setStrikeThrough(cur, true); + break; + case 'n': + StyleConstants.setUnderline(cur, true); + break; + case 'o': + StyleConstants.setItalic(cur, true); + break; + case 'r': + cur=defaul; + break; + } + switc=false; + }else { + sbf.append(c); + } + } + } + if(!sbf.isEmpty()) { + lst.add(new TextEntry(cur,sbf.toString())); + sbf.setLength(0); + } + } + private void analyseJsonChatText(JsonObject jobj,SimpleAttributeSet sas) { + String text=null; + JsonElement jetext=jobj.get("text"); + if(jetext!=null) { + text=jetext.getAsString(); + } + + JsonElement jeb=jobj.get("bold"); + if(jeb!=null) { + boolean bold=jeb.getAsBoolean(); + StyleConstants.setBold(sas, bold); + } + + JsonElement jei=jobj.get("italic"); + if(jei!=null) { + boolean italic=jei.getAsBoolean(); + StyleConstants.setItalic(sas, italic); + } + + JsonElement jeu=jobj.get("underlined"); + if(jeu!=null) { + boolean underlined=jeu.getAsBoolean(); + StyleConstants.setUnderline(sas, underlined); + } + + JsonElement jes=jobj.get("strikethrough"); + if(jes!=null) { + boolean strikethrough=jes.getAsBoolean(); + StyleConstants.setStrikeThrough(sas, strikethrough); + } + + JsonElement jec=jobj.get("color"); + if(jec!=null) { + String colord=jec.getAsString(); + Color c=processColor(colord); + StyleConstants.setForeground(sas, c); + } + + if(text!=null) { + if(jec!=null) { + lst.add(new TextEntry(sas, text)); + }else { + analyseOldChatText(text, sas); + } + } + JsonArray jextra=(JsonArray) jobj.get("extra"); + if(jextra!=null) + for(JsonElement je:jextra) { + if(je instanceof JsonObject) { + analyseJsonChatText((JsonObject)je,(SimpleAttributeSet) sas.clone()); + }else if(je instanceof JsonPrimitive){ + analyseOldChatText(je.getAsString(), sas); + } + } + + } + public static final Color black=new Color(0, 0, 0); + public static final Color dark_blue=new Color(0, 0, 170); + public static final Color dark_green=new Color(0, 170, 0); + public static final Color dark_aqua=new Color(0, 170, 170); + public static final Color dark_red=new Color(170, 0, 0); + public static final Color dark_purple=new Color(170, 0, 170); + public static final Color gold=new Color(255, 170, 0); + public static final Color gray=new Color(170, 170, 170); + public static final Color dark_gray=new Color(85, 85, 85); + public static final Color blue=new Color(85, 85, 255); + public static final Color green=new Color(85, 255, 85); + public static final Color aqua=new Color(85, 255, 255); + public static final Color red=new Color(255, 85, 85); + public static final Color light_purple=new Color(255, 85, 255); + public static final Color yellow=new Color(255, 255, 85); + public static final Color white=new Color(255, 255, 255); + private Color processColor(String colorstring) { + if(colorstring.startsWith("#")) { + String sub=colorstring.substring(1); + return new Color(Integer.parseInt(sub, 16)); + } + switch(colorstring) { + case "black": + return black; + case "dark_blue": + return dark_blue; + case "dark_green": + return dark_green; + case "dark_aqua": + return dark_aqua; + case "dark_red": + return dark_red; + case "dark_purple": + return dark_purple; + case "gold": + return gold; + case "gray": + return gray; + case "dark_gray": + return dark_gray; + case "blue": + return blue; + case "green": + return green; + case "aqua": + return aqua; + case "red": + return red; + case "light_purple": + return light_purple; + case "yellow": + return yellow; + case "white": + return white; + } + return Color.DARK_GRAY; + } + public void insertToDocument(int location,Document doc) throws BadLocationException { + for (Iterator iterator = lst.iterator(); iterator.hasNext();) { + TextEntry textEntry = (TextEntry) iterator.next(); + doc.insertString(location, textEntry.getText(),textEntry.getSas()); + location+=textEntry.getText().length(); + } + } + public String toString() { + StringBuilder sb=new StringBuilder(); + for (Iterator iterator = lst.iterator(); iterator.hasNext();) { + TextEntry textEntry = (TextEntry) iterator.next(); + sb.append(textEntry.getText()); + } + return sb.toString(); + } +} diff --git a/src/org/knemcl/network/NetworkPort.java b/src/org/knemcl/network/NetworkPort.java new file mode 100644 index 0000000..0c1b2ba --- /dev/null +++ b/src/org/knemcl/network/NetworkPort.java @@ -0,0 +1,148 @@ +package org.knemcl.network; + +import java.io.IOException; +import java.io.Serializable; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.net.SocketException; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Objects; +import java.util.Set; + +import org.ini4j.InvalidFileFormatException; +import org.kne.cloud.network.MultipurposeSocketAddress; +import org.kne.cloud.network.frpc.FrpcIni; + +public class NetworkPort implements Serializable{ + + private static final long serialVersionUID = 1L; + + private int type=0; + private String data; + + private transient FrpcIni frpcini2; + public FrpcIni getFrpcini2() { + return frpcini2; + } + public void setFrpcini2(FrpcIni frpcini2) { + this.frpcini2 = frpcini2; + } + public int getType() { + return type; + } + @Override + public String toString() { + return data; + } + public void setType(int type) { + this.type = type; + } + public NetworkPort() { + super(); + // TODO 自动生成的构造函数存根 + } + public String getData() { + return data; + } + public void setData(String data) { + this.data = data; + } + public NetworkPort(int type, String data) { + super(); + this.type = type; + this.data = data; + } + @Override + public int hashCode() { + return Objects.hash(data, type); + } + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + NetworkPort other = (NetworkPort) obj; + return Objects.equals(data, other.data) && type == other.type; + } + public List getAllRemoteAddress() throws IOException{ + Listmsas=new ArrayList<>(); + if(type==0) { + MultipurposeSocketAddress msax=new MultipurposeSocketAddress(data); + if(InetAddress.getByName( msax.getHost()).isAnyLocalAddress()) { + + Enumerationeu= NetworkInterface.getNetworkInterfaces(); + while (eu.hasMoreElements()) { + NetworkInterface networkInterface = (NetworkInterface) eu.nextElement(); + if(networkInterface.isUp()) { + //System.out.println(networkInterface+" "+networkInterface.isUp()); + Enumerationei= networkInterface.getInetAddresses(); + while (ei.hasMoreElements()) { + InetAddress inetAddress = (InetAddress) ei.nextElement(); + MultipurposeSocketAddress bd=new MultipurposeSocketAddress(msax.getType(),inetAddress.getHostAddress(),msax.getPort()); + msas.add(bd); + } + } + } + }else { + msas.add(msax); + } + }else if(type==1){ + FrpcIni frpcini; + try { + frpcini = new FrpcIni(data); + } catch (InvalidFileFormatException e1) { + throw new RuntimeException(e1); + } + + String tunnel=null; + Set e=frpcini.keySet(); + for (Iterator iterator = e.iterator(); iterator.hasNext();) { + String key = iterator.next(); + if(!key.equals("common")) { + tunnel=key; + break; + } + } + if(tunnel==null) { + throw new IllegalArgumentException("cant found avaliable tunnel!"); + } + + msas.add(new MultipurposeSocketAddress(frpcini.getType(tunnel).toUpperCase(), frpcini.getServerAddr(), frpcini.getRemotePort(tunnel))); + }else if(type==2) { + FrpcIni frpcini; + try { + if(frpcini2!=null) { + frpcini=frpcini2; + }else { + frpcini = new FrpcIni(data); + } + } catch (InvalidFileFormatException e1) { + throw new RuntimeException(e1); + } + + String tunnel=null; + Set e=frpcini.keySet(); + for (Iterator iterator = e.iterator(); iterator.hasNext();) { + String key = iterator.next(); + if(!key.equals("common")) { + tunnel=key; + break; + } + } + if(tunnel==null) { + throw new IllegalArgumentException("cant found avaliable tunnel!"); + } + + msas.add(new MultipurposeSocketAddress(frpcini.getType(tunnel).toUpperCase(), frpcini.getServerAddr(), frpcini.getRemotePort(tunnel))); + } + return msas; + } +} diff --git a/src/org/knemcl/network/NetworkPortType.java b/src/org/knemcl/network/NetworkPortType.java new file mode 100644 index 0000000..0536c5c --- /dev/null +++ b/src/org/knemcl/network/NetworkPortType.java @@ -0,0 +1,16 @@ +package org.knemcl.network; + +import org.knemcl.ui.UIEnv; + +public enum NetworkPortType{ + DEFAULT(UIEnv.getRsb().getString("defaultport")),FRP(UIEnv.getRsb().getString("frp")), DYNFRP(UIEnv.getRsb().getString("dynfrp")), SCANONLY(UIEnv.getRsb().getString("scanonly")); + + private String str; + private NetworkPortType(String string) { + this.str=string; + } + @Override + public String toString() { + return str; + } +} \ No newline at end of file diff --git a/src/org/knemcl/network/PlayerAscendComparator.java b/src/org/knemcl/network/PlayerAscendComparator.java new file mode 100644 index 0000000..614412b --- /dev/null +++ b/src/org/knemcl/network/PlayerAscendComparator.java @@ -0,0 +1,25 @@ +package org.knemcl.network; + +import java.util.Comparator; + +import org.kne.cloud.network.minecraft.MinecraftServerPinger; + +public class PlayerAscendComparator implements Comparator { + private String name="PlayerAscendComparator"; + public PlayerAscendComparator() { + super(); + } + public PlayerAscendComparator(String name) { + super(); + this.name = name; + } + @Override + public int compare(MinecraftServerPinger o1, MinecraftServerPinger o2) { + return Integer.compare(o1.getOnline(), o2.getOnline()); + } + + @Override + public String toString() { + return name; + } +} diff --git a/src/org/knemcl/network/PlayerDescendComparator.java b/src/org/knemcl/network/PlayerDescendComparator.java new file mode 100644 index 0000000..0ae9886 --- /dev/null +++ b/src/org/knemcl/network/PlayerDescendComparator.java @@ -0,0 +1,24 @@ +package org.knemcl.network; + +import java.util.Comparator; + +import org.kne.cloud.network.minecraft.MinecraftServerPinger; + +public class PlayerDescendComparator implements Comparator { + private String name="PlayerDescendComparator"; + public PlayerDescendComparator() { + super(); + } + public PlayerDescendComparator(String name) { + super(); + this.name = name; + } + @Override + public int compare(MinecraftServerPinger o1, MinecraftServerPinger o2) { + return Integer.compare(o2.getOnline(), o1.getOnline()); + } + @Override + public String toString() { + return name; + } +} diff --git a/src/org/knemcl/network/RemoteRelay.java b/src/org/knemcl/network/RemoteRelay.java new file mode 100644 index 0000000..021beda --- /dev/null +++ b/src/org/knemcl/network/RemoteRelay.java @@ -0,0 +1,196 @@ +package org.knemcl.network; + +import java.io.IOException; +import java.net.BindException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.UUID; + +import javax.swing.event.ListDataEvent; +import javax.swing.event.ListDataListener; + +import org.ini4j.Profile.Section; +import org.kne.cloud.network.MultipurposeSocketAddress; +import org.kne.cloud.network.SocketListener; +import org.kne.cloud.network.frpc.FrpcIni; +import org.kne.cloud.network.frpc.FrpcServerSocket; +import org.kne.cloud.network.klalb.KLALBController; +import org.kne.cloud.network.klalb.KLALBProtocolDetectSocketListener; +import org.knemcl.uitool.XDefaultListModel; + +public class RemoteRelay { + private KLALBController controller; + private XDefaultListModel networkPorts; + private MapsocketListeners=new LinkedHashMap<>(); + public XDefaultListModel getNetworkPorts() { + return networkPorts; + } + + public void setNetworkPorts(XDefaultListModel networkPorts) { + List ths=new LinkedList<>(); + this.networkPorts = networkPorts; + for (int i = 0; i < networkPorts.getSize(); i++) { + NetworkPort np=networkPorts.getElementAt(i); + Thread t=new Thread(()->{ + SocketListener sl=null; + try { + if(np.getType()==0) { + sl=new KLALBProtocolDetectSocketListener(new MultipurposeSocketAddress(np.getData()),controller); + synchronized (socketListeners) { + socketListeners.put(np, sl); + List sflt= controller.getSelflineTable(); + synchronized (sflt) { + try { + List ras= np.getAllRemoteAddress(); + for (Iterator iterator2 = ras.iterator(); iterator2.hasNext();) { + MultipurposeSocketAddress networkPortSA = iterator2.next(); + sflt.add(networkPortSA); + + } + } catch (IOException e) { + e.printStackTrace(); + } + + } + } + }else if(np.getType()==1){ + sl=new KLALBProtocolDetectSocketListener(new FrpcServerSocket(new FrpcIni(np.getData())),controller); + synchronized (socketListeners) { + socketListeners.put(np, sl); + List sflt= controller.getSelflineTable(); + synchronized (sflt) { + try { + List ras= np.getAllRemoteAddress(); + for (Iterator iterator2 = ras.iterator(); iterator2.hasNext();) { + MultipurposeSocketAddress networkPortSA = iterator2.next(); + sflt.add(networkPortSA); + + } + } catch (IOException e) { + e.printStackTrace(); + } + + } + } + }else if(np.getType()==2) { + FrpcIni fi=new FrpcIni(np.getData()); + FrpcServerSocket fss = null; + while(true) { + try { + fss=new FrpcServerSocket(fi); + np.setFrpcini2(fi); + break; + }catch(BindException e) { + if(fss!=null) + fss.close(); + + String tunnel=null; + Set est=fi.keySet(); + for (Iterator iterator = est.iterator(); iterator.hasNext();) { + String key = iterator.next(); + if(!key.equals("common")) { + tunnel=key; + break; + } + } + if(tunnel!=null) { + fi.setRemotePort(tunnel, fi.getRemotePort(tunnel)+1); + Section s=fi.remove(tunnel); + String unm=UUID.randomUUID().toString(); + fi.put(unm, s); + s.setName(unm); + + } + } + } + sl=new KLALBProtocolDetectSocketListener(fss,controller); + synchronized (socketListeners) { + socketListeners.put(np, sl); + List sflt= controller.getSelflineTable(); + synchronized (sflt) { + try { + List ras= np.getAllRemoteAddress(); + for (Iterator iterator2 = ras.iterator(); iterator2.hasNext();) { + MultipurposeSocketAddress networkPortSA = iterator2.next(); + sflt.add(networkPortSA); + + } + } catch (IOException e) { + e.printStackTrace(); + } + + } + } + } + + } catch (IOException e) { + e.printStackTrace(); + } + }); + t.start(); + ths.add(t); + } + /*for (Iterator iterator = ths.iterator(); iterator.hasNext();) { + Thread thread = (Thread) iterator.next(); + try { + thread.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }*/ + /*controller.setSelflineTableSupplier(()->{ + StringBuilder stb=new StringBuilder(); + Setnp=socketListeners.keySet(); + for (Iterator iterator = np.iterator(); iterator.hasNext();) { + NetworkPort networkPort = iterator.next(); + try { + List ras= networkPort.getAllRemoteAddress(); + for (Iterator iterator2 = ras.iterator(); iterator2.hasNext();) { + MultipurposeSocketAddress networkPortSA = iterator2.next(); + stb.append(networkPortSA); + stb.append('\n'); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + return stb.toString(); + });*/ + /*List sflt= controller.getSelflineTable(); + synchronized (sflt) { + Setnp=socketListeners.keySet(); + for (Iterator iterator = np.iterator(); iterator.hasNext();) { + NetworkPort networkPort = iterator.next(); + try { + List ras= networkPort.getAllRemoteAddress(); + for (Iterator iterator2 = ras.iterator(); iterator2.hasNext();) { + MultipurposeSocketAddress networkPortSA = iterator2.next(); + sflt.add(networkPortSA); + + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }*/ + } + + public Map getSocketListeners() { + return socketListeners; + } + + public RemoteRelay(KLALBController kc) { + this.controller=kc; + } + + public KLALBController getController() { + return controller; + } + +} diff --git a/src/org/knemcl/network/SearchDescendComparator.java b/src/org/knemcl/network/SearchDescendComparator.java new file mode 100644 index 0000000..a255a30 --- /dev/null +++ b/src/org/knemcl/network/SearchDescendComparator.java @@ -0,0 +1,62 @@ +package org.knemcl.network; + +import java.util.Comparator; +import java.util.WeakHashMap; + +import org.kne.cloud.network.minecraft.MinecraftServerPinger; + +import javassist.compiler.ast.Keyword; + +public class SearchDescendComparator implements Comparator { + private String name="PlayerDescendComparator"; + private String keyword=""; + public SearchDescendComparator() { + super(); + } + public SearchDescendComparator(String name) { + super(); + this.name = name; + } + + public String getKeyword() { + return keyword; + } + public void setKeyword(String keyword) { + this.keyword = keyword; + cache.clear(); + } + @Override + public int compare(MinecraftServerPinger o1, MinecraftServerPinger o2) { + double w1=getWeight(o1); + double w2=getWeight(o2); + return Double.compare(w2, w1); + } + + private WeakHashMap cache=new WeakHashMap<>(); + private double getWeight(MinecraftServerPinger o1) { + Double d=cache.get(o1); + if(d==null) { + d=Double.valueOf(calcWeight(o1,keyword)); + cache.put(o1, d); + } + return d; + } + protected double calcWeight(MinecraftServerPinger o1,String keyword) { + double total; + double matched=0; + MinecraftChatText mct=new MinecraftChatText(o1.getDescription(), o1.isOldDescription()); + String str=mct.toString(); + total=str.length(); + for (int i = 0; i < str.length(); i++) { + char c=str.charAt(i); + if(keyword.contains(Character.toString(c))) { + matched++; + } + } + return matched/total; + } + @Override + public String toString() { + return name; + } +} diff --git a/src/org/knemcl/network/ServersNBTFile.java b/src/org/knemcl/network/ServersNBTFile.java new file mode 100644 index 0000000..6ae61dc --- /dev/null +++ b/src/org/knemcl/network/ServersNBTFile.java @@ -0,0 +1,128 @@ +package org.knemcl.network; + +import java.io.File; +import java.io.IOException; +import java.net.UnknownHostException; +import java.util.*; + +import org.kne.io.Task; + +import com.github.steveice10.opennbt.NBTIO; +import com.github.steveice10.opennbt.tag.builtin.ByteTag; +import com.github.steveice10.opennbt.tag.builtin.CompoundTag; +import com.github.steveice10.opennbt.tag.builtin.ListTag; +import com.github.steveice10.opennbt.tag.builtin.StringTag; +import com.github.steveice10.opennbt.tag.builtin.Tag; + +public class ServersNBTFile extends Vector{ + + public ServersNBTFile() { + + } + public ServersNBTFile(File f) throws IOException { + loadFrom(f); + } + public void loadFrom(File f) throws IOException { + CompoundTag ct= NBTIO.readFile(f,false,false); + // System.out.println(ct); + ListTag cts=ct.get("servers"); + for(Tag cte:cts) { + if(cte instanceof CompoundTag) { + CompoundTag cter=(CompoundTag) cte; + StringTag ipport=cter.get("ip"); + StringTag name=cter.get("name"); + StringTag icon=cter.get("icon"); + ByteTag bta=cter.get("acceptTextures"); + ByteTag bt=cter.get("hidden"); + StringTag bte=cter.get("extra"); + add(new ServerEntry(name.getValue(), ipport.getValue(),icon==null?null:icon.getValue(), bta==null?null:bta.getValue(),bt==null?null:bt.getValue(),bte==null?null:bte.getValue())); + } + } + } + public void saveTo(File f) throws IOException { + CompoundTag cp=new CompoundTag(""); + ListTag cts=new ListTag("servers"); + for (Iterator iterator = this.iterator(); iterator.hasNext();) { + ServerEntry type = (ServerEntry) iterator.next(); + CompoundTag cter=new CompoundTag(""); + cter.put(new StringTag("ip", type.getHostport())); + cter.put(new StringTag("name", type.getName())); + if(type.getIcon()!=null) + cter.put(new StringTag("icon", type.getIcon())); + + if(type.getAcceptTextures()!=null) + cter.put(new ByteTag("acceptTextures", type.getAcceptTextures())); + + if(type.getIshide()!=null) + cter.put(new ByteTag("hidden", type.getIshide())); + + if(type.getExtra()!=null) + cter.put(new StringTag("extra", type.getExtra())); + cts.add(cter); + } + cp.put(cts); + NBTIO.writeFile(cp, f, false, false); + } + public static class ServerEntry{ + private String name; + private String hostport; + private String icon; + + private Byte acceptTextures; + private Byte ishide; + + private String extra; + public String getIcon() { + return icon; + } + + public ServerEntry(String name, String hostport, String icon, Byte acceptTextures, Byte ishide, String extra) { + super(); + this.name = name; + this.hostport = hostport; + this.icon = icon; + this.acceptTextures = acceptTextures; + this.ishide = ishide; + this.extra = extra; + } + + public String getExtra() { + return extra; + } + public Byte getAcceptTextures() { + return acceptTextures; + } + public String getName() { + return name; + } + public String getHostport() { + return hostport; + } + public Byte getIshide() { + return ishide; + } + @Override + public int hashCode() { + return Objects.hash(extra, hostport, name); + } + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ServerEntry other = (ServerEntry) obj; + return Objects.equals(extra, other.extra) && Objects.equals(hostport, other.hostport) + && Objects.equals(name, other.name); + } + @Override + public String toString() { + return "ServerEntry [name=" + name + ", hostport=" + hostport + ", icon=" + icon + ", acceptTextures=" + + acceptTextures + ", ishide=" + ishide + ", extra=" + extra + "]"; + } + + + } +} diff --git a/src/org/knemcl/storge/LauncherData.java b/src/org/knemcl/storge/LauncherData.java new file mode 100644 index 0000000..eda6b6b --- /dev/null +++ b/src/org/knemcl/storge/LauncherData.java @@ -0,0 +1,97 @@ +package org.knemcl.storge; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; + +import javax.swing.DefaultListModel; +import org.knemcl.launch.ClientLocation; +import org.knemcl.launch.Config; +import org.knemcl.launch.JavaLocation; +import org.knemcl.network.NetworkPort; +import org.knemcl.uitool.XDefaultListModel; + +public class LauncherData extends HashMap{ + + + + /** + * + */ + private static final long serialVersionUID = 2690184619585724646L; + public XDefaultListModel getJavaLocations(){ + XDefaultListModel jdlm=(XDefaultListModel) get("JavaLocation"); + if(jdlm==null) { + jdlm=new XDefaultListModel(); + jdlm.addElement(new JavaLocation(new File("java/openjdk-21.0.2_windows-x64/bin/java.exe"))); + jdlm.addElement(new JavaLocation(new File("java/openjdk-21.0.2_linux-x64/bin/java"))); + put("JavaLocation",jdlm); + } + return jdlm; + } + public XDefaultListModel getClientLocations(){ + XDefaultListModel cdlm=(XDefaultListModel) get("ClientLocation"); + if(cdlm==null) { + cdlm=new XDefaultListModel(); + cdlm.addElement(new ClientLocation(new File("client/.minecraft"))); + put("ClientLocation",cdlm); + } + return cdlm; + } + public XDefaultListModel getNetworkPorts(){ + XDefaultListModel xcdlm=(XDefaultListModel) get("NetworkPorts"); + if(xcdlm==null) { + xcdlm=new XDefaultListModel(); + String mcl=""" + [common] + server_addr = frp.104300.xyz + server_port = 7000 + token = www.126126.xyz + [knelauncher01] + type = tcp + local_ip = 127.0.0.1 + local_port = 7461 + remote_port = 49968 + """; + xcdlm.addElement(new NetworkPort(2,mcl)); + + String mclx=""" + [common] + server_addr = 07f4acdef99b.ofalias.net + server_port = 7201 + token = nXwiBVvMKS7EXm7j + [knelauncher02] + type = tcp + local_ip = 127.0.0.1 + local_port = 7461 + remote_port = 49968 + """; + xcdlm.addElement(new NetworkPort(2,mclx)); + String scanx=""" + ip.8mi.work:50000~ip.8mi.work:60000 + breeze.asia + """; + xcdlm.addElement(new NetworkPort(3, scanx)); + put("NetworkPorts",xcdlm); + } + return xcdlm; + } + public List getClientLaunchConfigList(){ + List clcl=(List) get("ClientLaunchConfigList"); + if(clcl==null) { + clcl=new ArrayList(); + put("ClientLaunchConfigList",clcl); + } + return clcl; + } + public List getUserConfigList() { + List ucl=(List) get("UserConfigList"); + if(ucl==null) { + ucl=new ArrayList(); + put("UserConfigList",ucl); + } + return ucl; + } +} diff --git a/src/org/knemcl/storge/OnlineSearchData.java b/src/org/knemcl/storge/OnlineSearchData.java new file mode 100644 index 0000000..c65065b --- /dev/null +++ b/src/org/knemcl/storge/OnlineSearchData.java @@ -0,0 +1,27 @@ +package org.knemcl.storge; + +import java.io.File; +import java.io.Serializable; +import java.util.HashMap; +import java.util.LinkedHashMap; + +import org.kne.cloud.network.MultipurposeSocketAddress; +import org.kne.cloud.network.minecraft.MinecraftServerPinger; +import org.knemcl.launch.JavaLocation; +import org.knemcl.uitool.XDefaultListModel; + +public class OnlineSearchData extends HashMap { + + /** + * + */ + private static final long serialVersionUID = 1L; + public LinkedHashMap getSearchData(){ + LinkedHashMap jdlm=(LinkedHashMap) get("SearchData"); + if(jdlm==null) { + jdlm=new LinkedHashMap(); + put("SearchData",jdlm); + } + return jdlm; + } +} diff --git a/src/org/knemcl/task/CheckTask.java b/src/org/knemcl/task/CheckTask.java new file mode 100644 index 0000000..bb3bb01 --- /dev/null +++ b/src/org/knemcl/task/CheckTask.java @@ -0,0 +1,48 @@ +package org.knemcl.task; + +import org.knemcl.launch.JavaNotFoundException; +import org.knemcl.launch.LaunchConfig; +import org.knemcl.main.CONST; +import org.knemcl.main.KNEManager; +import org.knemcl.ui.ProcessingFrame; +import org.knemcl.ui.UIEnv; +import org.knemcl.uitool.CrashReport; + +public class CheckTask extends KNEMCLTask { + + private KNEManager manager; + private LaunchConfig config; + + public CheckTask(KNEManager km,LaunchConfig config) { + super(UIEnv.getRsb().getString("checkconfig")); + this.manager=km; + this.config=config; + } + + public LaunchConfig getConfig() { + return config; + } + + public KNEManager getManager() { + return manager; + } + + @Override + public void runTask() throws Exception { + ProcessingFrame psf=new ProcessingFrame(UIEnv.getRsb().getString("checking")); + psf.setVisible(true); + psf.getProgressBar().setIndeterminate(true); + + try{ + config.checkData(manager); + }catch(JavaNotFoundException jr){ + new CrashReport(psf, true).report(jr, UIEnv.getRsb().getString("javanotfound")); + }finally{ + psf.getProgressBar().setIndeterminate(false); + psf.getProgressBar().setValue(100); + progressBar.setValue(100); + progressBar.setString(UIEnv.getRsb().getString("checkdone")); + psf.setVisible(false); + } + } +} diff --git a/src/org/knemcl/task/ClientLaunchTask.java b/src/org/knemcl/task/ClientLaunchTask.java new file mode 100644 index 0000000..0518819 --- /dev/null +++ b/src/org/knemcl/task/ClientLaunchTask.java @@ -0,0 +1,249 @@ +package org.knemcl.task; +import java.io.File; +import java.io.IOException; +import java.net.Inet6Address; +import java.net.InetSocketAddress; +import java.net.ServerSocket; +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.CountDownLatch; + +import org.kne.cloud.network.MultipurposeSocketAddress; +import org.kne.cloud.network.SocketToSocketProxy; +import org.kne.cloud.network.minecraft.MinecraftServerAddress; +import org.kne.cloud.network.minecraft.MinecraftServerPinger; +import org.kne.console.ProcessItem; +import org.knemcl.launch.ClientLaunchConfig; +import org.knemcl.main.KNEManager; +import org.knemcl.network.LocalRelay; +import org.knemcl.network.ServersNBTFile; +import org.knemcl.network.ServersNBTFile.ServerEntry; +import org.knemcl.ui.NetworkPortSelector; +import org.knemcl.ui.UIEnv; +public class ClientLaunchTask extends LaunchTask { + + private long begin; + private MultipurposeSocketAddress msa; + private SocketToSocketProxy stspe; + private String save; + private Inet6Address virtualAddress; + private int virtualPort; + private ServerSocket alc; + + private LocalRelay localrelay=null; + public ClientLaunchTask(ClientLaunchConfig lfg,KNEManager km) { + super(UIEnv.getRsb().getString("launcht")+lfg.getName(),lfg, km); + } + public ClientLaunchTask(ClientLaunchConfig lfg,KNEManager km,ListextraJvmArgs,ListextraJavaArgs) { + super(UIEnv.getRsb().getString("launcht")+lfg.getName(),lfg, km,extraJvmArgs,extraJavaArgs); + } + + public ClientLaunchTask(ClientLaunchConfig launchConfig, KNEManager manager, MultipurposeSocketAddress msa) { + super(UIEnv.getRsb().getString("launcht")+launchConfig.getName(),launchConfig, manager); + this.msa=msa; + } + + public ClientLaunchTask(ClientLaunchConfig launchConfig, KNEManager manager, String save) { + super(UIEnv.getRsb().getString("launcht")+launchConfig.getName(),launchConfig, manager); + this.save=save; + } + public MultipurposeSocketAddress getMsa() { + return msa; + } + @Override + public ClientLaunchConfig getLaunchConfig() { + return (ClientLaunchConfig) super.getLaunchConfig(); + } + private static MultipurposeSocketAddress checkKLALB(ClientLaunchConfig launchConfig, MultipurposeSocketAddress msa0) { + MultipurposeSocketAddress msa=msa0; + + return msa; + } + @Override + public void runTask() throws Throwable { + try { + getProcessingFrame().setVisible(true); + getProcessingFrame().getProgressBar().setIndeterminate(true); + + setLock(new CountDownLatch(1)); + begin = System.currentTimeMillis(); + + + if(msa!=null) { + if(Boolean.parseBoolean( getManager().getProperties().getProperty("enableklalb"))) { + try { + MinecraftServerPinger sp=new MinecraftServerPinger(msa); + if(sp.getKlalbversion()!=null) + if(sp.getKlalbversion().split("\\.")[0].equals("3")) { + virtualAddress= getManager().getKlalbController().getRemoteVaddrBySocketAddress(msa); + //System.out.println(sp.getKlalbvaddr()); + virtualPort=sp.getKlalbvport(); + try { + alc=new ServerSocket(0); + }finally { + if(alc!=null) + alc.close(); + } + msa=new MultipurposeSocketAddress("127.0.0.1", alc.getLocalPort()); + getManager().getKlalbStateGUI().setVisible(true); + } + }catch(Exception e){ + e.printStackTrace(); + } + } + File f=new File(getLaunchConfig().getVersionInstalled().getLocation().getDotmc(),"servers.dat"); + if(f.exists()) { + try { + ServersNBTFile snf=new ServersNBTFile(f); + for (Iterator iterator = snf.iterator(); iterator.hasNext();) { + ServerEntry serverEntry = (ServerEntry) iterator.next(); + if(serverEntry.getName().equals(UIEnv.getRsb().getString("latestserver"))) { + iterator.remove(); + } + } + if(msa instanceof MinecraftServerAddress) { + snf.add(0, new ServerEntry(UIEnv.getRsb().getString("latestserver"), ((MinecraftServerAddress)msa).toOriginString(), null, null, null, null)); + }else { + snf.add(0, new ServerEntry(UIEnv.getRsb().getString("latestserver"), msa.toString(), null, null, null, null)); + } + snf.saveTo(f); + } catch (IOException ex) { + ex.printStackTrace(); + } + } + Listalst=getExtraJavaArgs(); + if(msa instanceof MinecraftServerAddress) { + MinecraftServerAddress mmsa=(MinecraftServerAddress) msa; + alst.add("--server"); + alst.add(mmsa.getOriginAddr()); + alst.add("--port"); + alst.add(Integer.toString(mmsa.getOriginPort()) ); + alst.add("--quickPlayMultiplayer"); + alst.add(mmsa.toOriginString()); + }else { + alst.add("--server"); + alst.add(msa.getHost()); + alst.add("--port"); + alst.add(Integer.toString(msa.getPort()) ); + alst.add("--quickPlayMultiplayer"); + alst.add(msa.toString()); + } + }else if(save!=null) { + Listalst=getExtraJavaArgs(); + alst.add("--quickPlaySingleplayer"); + alst.add(save); + } + getExtraJvmArgs().add("-javaagent:"+new File("agents/agnet-1.0-SNAPSHOT.jar").getAbsolutePath()); + + super.runTask(); + }catch(Exception e) { + if(stspe!=null) + stspe.close(); + throw e; + }finally { + synchronized (getProcessingFrame()) { + getProcessingFrame().setVisible(false); + } + } + } + @Override + protected void installDaemons(ProcessItem processItem2) { + processItem2.getStartlistener().add((x)->{ + //System.out.println("start"); + if(virtualAddress!=null) + try { + stspe=new SocketToSocketProxy( new MultipurposeSocketAddress((InetSocketAddress) alc.getLocalSocketAddress()),new MultipurposeSocketAddress("KLALB_Stream", new InetSocketAddress(virtualAddress, virtualPort))); + } catch (IOException e) { + e.printStackTrace(); + } + }); + processItem2.getFirstoutlistener().add((xc)->{ + synchronized (getProcessingFrame()) { + getProcessingFrame().setText(UIEnv.getRsb().getString("watingforlaunch")); + } + }); + processItem2.getConsole().getConoutlistener().add((str)->{ + //System.out.println(str); + if((!str.contains("[CHAT]"))&&(!str.contains("[Not Secure]"))) { + + String sl=str.toLowerCase(); + try { + + if(sl.contains("started serving on ")||sl.contains("started on ")) { + int idx=str.lastIndexOf(" "); + if(idx!=-1) { + String s=str.substring(idx+1); + int port=Integer.parseInt(s); + getRemoteRelaySelector().setCon((np)->{ + try { + localrelay=new LocalRelay(getManager().getKlalbController(), new MultipurposeSocketAddress("127.0.0.1", port),getManager().getRemoteRelay().getSocketListeners().get(np)); + } catch (IOException e) { + e.printStackTrace(); + } + }); + getRemoteRelaySelector().setOpeningPort(port); + getRemoteRelaySelector().setVisible(true); + //System.out.println(port); + } + } + }catch(RuntimeException re) { + re.printStackTrace(); + } + try { + if(sl.contains("stopping server")) { + getRemoteRelaySelector().setVisible(false); + if(localrelay!=null) + try { + localrelay.close(); + } catch (IOException e1) { + e1.printStackTrace(); + } + //System.out.println("stops"); + } + }catch(RuntimeException re) { + + } + } + if(!(str.toLowerCase().contains("lwjgl version"))) + return; + new Thread(()->{ + long end=System.currentTimeMillis(); + synchronized (getProcessingFrame()) { + getProcessingFrame().setText(UIEnv.getRsb().getString("launchtime")+(end-begin)+"ms"); + } + try { + Thread.sleep(2000); + } catch (Exception e) { + e.printStackTrace(); + } + synchronized (getProcessingFrame()) { + getProcessingFrame().setVisible(false); + } + getLock().countDown(); + }).start(); + }); + processItem2.getEndlistener().add((x)->{ + synchronized (getProcessingFrame()) { + getProcessingFrame().setVisible(false); + } + getLock().countDown(); + if(localrelay!=null) + try { + localrelay.close(); + } catch (IOException e1) { + e1.printStackTrace(); + } + if(stspe!=null) + try { + stspe.close(); + } catch (IOException e) { + e.printStackTrace(); + } + }); + + getRemoteRelaySelector().setVisible(false); + + } + + +} diff --git a/src/org/knemcl/task/DownloadTask.java b/src/org/knemcl/task/DownloadTask.java new file mode 100644 index 0000000..7226709 --- /dev/null +++ b/src/org/knemcl/task/DownloadTask.java @@ -0,0 +1,81 @@ +package org.knemcl.task; + +import java.awt.Color; +import java.io.*; +import java.net.*; +import java.nio.ByteBuffer; +import java.nio.channels.FileChannel; +import java.util.List; + +import javax.imageio.ImageIO; + +import org.knemcl.download.DownloadImpl; +import org.knemcl.download.DownloadOrder; +import org.knemcl.download.DownloadSource; +import org.knemcl.task.KNEMCLTask; +import org.knemcl.main.CONST; +import org.knemcl.uitool.CrashReport; + +public class DownloadTask extends KNEMCLTask { + private String url; + private File file; + private List dss; + public String getUrl() { + return url; + } + + public File getFile() { + return file; + } + public DownloadTask(String name,String url,File f) { + this(name,url,f,DownloadImpl.getDefaultDownloadSources()); + } + public DownloadTask(String name,String url,File f,Listdss) { + super(name); + this.url=url; + this.file=f; + this.dss=dss; + try { + setIcon(ImageIO.read(DownloadTask.class.getResource("/assets/download.png"))); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public DownloadTask(String name, DownloadOrder downloadOrder) { + this(name,downloadOrder.getUrl(),downloadOrder.getFile()); + } + public DownloadTask(String name, DownloadOrder downloadOrder,Listdss) { + this(name,downloadOrder.getUrl(),downloadOrder.getFile(),dss); + + } + + @Override + public void runTask() throws IOException { + synchronized (progressBar) { + progressBar.setIndeterminate(false); + } + DownloadImpl dil=new DownloadImpl(new URL(url),file,dss); + /*dil.setErrorlistener((x)->{ + synchronized (progressBar) { + progressBar.setForeground(Color.RED); + progressBar.setString(CONST.downloadfailed); + } + x.printStackTrace(); + }); + dil.setSuccesslistener((x)->{ + synchronized (progressBar) { + progressBar.setString(CONST.downloadsuccess); + } + });*/ + dil.setProgressBar(progressBar); + dil.run(); + + } + + @Override + public List getWaitings() { + return null; + } + +} diff --git a/src/org/knemcl/task/GroupDownloadTask.java b/src/org/knemcl/task/GroupDownloadTask.java new file mode 100644 index 0000000..5560398 --- /dev/null +++ b/src/org/knemcl/task/GroupDownloadTask.java @@ -0,0 +1,87 @@ +package org.knemcl.task; + +import java.io.*; +import java.net.*; +import java.nio.ByteBuffer; +import java.nio.channels.FileChannel; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +import javax.imageio.ImageIO; + +import org.kne.util.Task; +import org.knemcl.task.KNEMCLTask; +import org.knemcl.ui.UIEnv; +import org.knemcl.download.DownloadImpl; +import org.knemcl.download.DownloadOrder; +import org.knemcl.main.CONST; +import org.knemcl.uitool.CrashReport; + +public class GroupDownloadTask extends KNEMCLTask { + private List ord; + private static ExecutorService exc=Executors.newVirtualThreadPerTaskExecutor(); + private volatile int ok=0; + private volatile int err=0; + public GroupDownloadTask(String name,Listo) { + super(name); + this.ord=o; + try { + setIcon(ImageIO.read(DownloadTask.class.getResource("/assets/download.png"))); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public void runTask() throws IOException { + synchronized (progressBar) { + progressBar.setIndeterminate(false); + progressBar.setString(UIEnv.getRsb().getString("preparedowngroup")); + } + + updateBar(); + Listlst=new ArrayList(); + for (int i = 0; i{ + ok++; + updateBar(); + }); + dil.setErrorlistener((e)->{ + e.printStackTrace(); + err++; + updateBar(); + }); + exc.execute(dil); + lst.add(dil); + } + + for (int i = 0; i getWaitings() { + return null; + } + +} diff --git a/src/org/knemcl/task/KNEMCLTask.java b/src/org/knemcl/task/KNEMCLTask.java new file mode 100644 index 0000000..157f645 --- /dev/null +++ b/src/org/knemcl/task/KNEMCLTask.java @@ -0,0 +1,109 @@ +package org.knemcl.task; + +import java.net.SocketTimeoutException; +import java.util.*; +import java.util.function.*; + +import org.knemcl.main.CONST; +import org.knemcl.ui.UIEnv; +import org.knemcl.uitool.CrashReport; +import org.knemcl.uitool.ProgressListPanel; + +public abstract class KNEMCLTask extends ProgressListPanel implements Runnable{ + public KNEMCLTask(String name) { + super(name); + } + private boolean usepool=false; + private Object startlock=new Object(); + private Object endlock=new Object(); + private volatile boolean executed=false; + private volatile boolean start=false; + private volatile boolean end=false; + + private volatile boolean hide=false; + private Consumerrev; + + public Consumer getRev() { + return rev; + } + public void setRev(Consumer rev) { + this.rev = rev; + } + + public boolean isHide() { + return hide; + } + public void setHide(boolean hide) { + this.hide = hide; + } + public boolean isExecuted() { + return executed; + } + public void setExecuted(boolean executed) { + this.executed = executed; + } + public boolean isStart() { + return start; + } + public boolean isEnd() { + return end; + } + public boolean isUsepool() { + return usepool; + } + public void setUsepool(boolean usepool) { + this.usepool = usepool; + } + public void run(){ + start=true; + synchronized (startlock) { + startlock.notifyAll(); + } + getProgressBar().setIndeterminate(true); + getProgressBar().setString(UIEnv.getRsb().getString("executing")); + if(rev!=null) + rev.accept(this); + try { + runTask(); + } catch (Throwable e) { + new CrashReport(null, true).report(e, UIEnv.getRsb().getString("unknownerror")); + } + end=true; + synchronized (endlock) { + endlock.notifyAll(); + } + getProgressBar().setString(UIEnv.getRsb().getString("executed")); + if(rev!=null) + rev.accept(this); + } + public void waitForStart(){ + if(!start){ + synchronized (startlock) { + try { + startlock.wait(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + public void waitForEnd(){ + if(!end){ + synchronized (endlock) { + try { + endlock.wait(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + + private List waitings=new Vector<>(); + + public List getWaitings(){ + return waitings; + } + + abstract public void runTask() throws Throwable; +} diff --git a/src/org/knemcl/task/LaunchTask.java b/src/org/knemcl/task/LaunchTask.java new file mode 100644 index 0000000..6f4adad --- /dev/null +++ b/src/org/knemcl/task/LaunchTask.java @@ -0,0 +1,132 @@ +package org.knemcl.task; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.function.Consumer; + +import org.kne.console.JavaCommandLine; +import org.kne.console.ProcessItem; +import org.knemcl.launch.JavaNotFoundException; +import org.knemcl.launch.LaunchConfig; +import org.knemcl.main.CONST; +import org.knemcl.main.KNEManager; +import org.knemcl.network.LocalRelay; +import org.knemcl.ui.ProcessingFrame; +import org.knemcl.ui.NetworkPortSelector; +import org.knemcl.ui.UIEnv; +import org.knemcl.uitool.CrashReport; + +public class LaunchTask extends KNEMCLTask { + private LaunchConfig lfg; + private KNEManager km; + private ProcessItem processItem; + + private NetworkPortSelector remoteRelaySelector; + + public NetworkPortSelector getRemoteRelaySelector() { + return remoteRelaySelector; + } + + private List extraJvmArgs=new ArrayList<>(); + private List extraJavaArgs=new ArrayList<>(); + + public List getExtraJvmArgs() { + return extraJvmArgs; + } + + public List getExtraJavaArgs() { + return extraJavaArgs; + } + + private volatile CountDownLatch lock ; + + public void setLock(CountDownLatch lock) { + this.lock = lock; + } + + public CountDownLatch getLock() { + return lock; + } + + private ProcessingFrame processingFrame = new ProcessingFrame(UIEnv.getRsb().getString("launching")); + + public ProcessingFrame getProcessingFrame() { + return processingFrame; + } + + public ProcessItem getProcessItem() { + return processItem; + } + + public KNEManager getManager() { + return km; + } + + public LaunchConfig getLaunchConfig() { + return lfg; + } + + public LaunchTask(String name, LaunchConfig lfg, KNEManager km) { + super(name); + this.lfg = lfg; + this.km = km; + this.remoteRelaySelector=new NetworkPortSelector(km.getRemoteRelay()); + } + + public LaunchTask(String name, LaunchConfig lfg, KNEManager km, List extraJvmArgs2, + List extraJavaArgs2) { + super(name); + this.lfg = lfg; + this.km = km; + this.remoteRelaySelector=new NetworkPortSelector(km.getRemoteRelay()); + this.extraJvmArgs = extraJvmArgs2; + this.extraJavaArgs = extraJavaArgs2; + } + + @Override + public void runTask() throws Throwable { + processingFrame.setVisible(true); + processingFrame.getProgressBar().setIndeterminate(true); + try { + LaunchConfig clf = getLaunchConfig(); + clf.updateCommandLine(getManager()); + + JavaCommandLine jcmd = clf.getCommandline(); + if (extraJvmArgs != null) + jcmd.getArgs().addAll(extraJvmArgs); + if (extraJavaArgs != null) + jcmd.getJargs().addAll(extraJavaArgs); + ProcessBuilder psb = jcmd.makeProcessbBuilder(); + + getProgressBar().setIndeterminate(false); + processItem = new ProcessItem(psb, clf.getName()); + processItem.setIcon(getIcon()); + getManager().getMainwindow().getLv().add(processItem); + + installDaemons(processItem); + + if (!getLaunchConfig().isNolaunchimmediately()) { + processItem.start(); + } + if(lock!=null) + lock.await(); + }catch(JavaNotFoundException jr){ + new CrashReport(processingFrame, true).report(jr, UIEnv.getRsb().getString("javanotfound")); + }catch(Exception e) { + if(processItem!=null) { + getManager().getMainwindow().getLv().remove(processItem); + } + throw e; + } finally { + synchronized (processingFrame) { + processingFrame.setVisible(false); + } + } + } + + protected void installDaemons(ProcessItem processItem2) { + + }; +} diff --git a/src/org/knemcl/task/TaskController.java b/src/org/knemcl/task/TaskController.java new file mode 100644 index 0000000..d9d486a --- /dev/null +++ b/src/org/knemcl/task/TaskController.java @@ -0,0 +1,101 @@ +package org.knemcl.task; + +import java.util.*; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.function.Consumer; +import javax.swing.JPanel; +import javax.swing.JProgressBar; +import org.kne.ui.YScrollPane; +import org.knemcl.task.KNEMCLTask; +import org.knemcl.ui.UIEnv; +import org.knemcl.main.CONST; + +public class TaskController extends Thread{ + private Object lock=new Object(); + ExecutorService exec=Executors.newCachedThreadPool(); + List l=new Vector(); + private JPanel showing; + + public TaskController(JPanel jPanel) { + super(); + this.showing = jPanel; + setName("KNEMC-TaskController"); + start(); + } + + public void putTask(KNEMCLTask task){ + l.add(task); + synchronized (showing) { + showing.add(task); + } + task.setRev(new Consumer() { + + @Override + public void accept(KNEMCLTask t) { + update(); + } + }); + update(); + } + + public void update(){ + synchronized (lock) { + lock.notifyAll(); + } + } + @Override + public void run() { + while(true){ + for (int i0 = l.size()-1; i0>=0; i0--) { + KNEMCLTask klt0=l.get(i0); + if(klt0.isEnd()){ + l.remove(i0); + synchronized (showing) { + showing.remove(klt0); + } + } + } + for (int i = 0; i lw=klt.getWaitings(); + if(klt.isExecuted()||klt.isStart()){ + continue; + } + if(containsOne(l,lw)){ + JProgressBar jg=klt.getProgressBar(); + synchronized (jg) { + jg.setString(UIEnv.getRsb().getString("waiting")); + } + continue; + } + if(klt.isUsepool()){ + exec.execute(klt); + }else{ + new Thread(klt).start(); + } + klt.setExecuted(true); + } + synchronized (lock) { + try { + lock.wait(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + + private static boolean containsOne(List l2, List lw) { + if(lw==null||l2==null) + return false; + for (int i = 0; i cmb; + private JComboBox cmv; + private JComboBox cmj; + private JComboBox cub; + private JTextField txm; + private JCheckBox cb; + private JCheckBox verib; + private JRadioButton jrb1; + private JRadioButton jrb2; + private JRadioButton jrb3; + private JTextField txmsa; + private JTextField txmse; + public ClientEditConfigDialog( ConfigListPanel w,KNEManager km) { + super(w,km); + setTitle(UIEnv.getRsb().getString("editconfig")); + + + + } + + @Override + protected boolean checkManager() throws Exception { + if(super.checkManager()){ + if(cmv.getSelectedItem()==null){ + JOptionPane.showMessageDialog(this, UIEnv.getRsb().getString("vernonull"), UIEnv.getRsb().getString("error"), JOptionPane.ERROR_MESSAGE); + return false; + } + if(cub.getSelectedItem()==null){ + JOptionPane.showMessageDialog(this, UIEnv.getRsb().getString("usrnonnull"), UIEnv.getRsb().getString("error"), JOptionPane.ERROR_MESSAGE); + return false; + } + try{ + Integer.parseInt(txm.getText()); + }catch(NumberFormatException e){ + JOptionPane.showMessageDialog(this, UIEnv.getRsb().getString("numberonly"), UIEnv.getRsb().getString("error"), JOptionPane.ERROR_MESSAGE); + return false; + } + + return true; + }else{ + return false; + } + } + + @Override + protected KNEMCLTask applyManager(Config config2c) throws Exception { + super.applyManager(config2c); + ClientLaunchConfig config2x=(ClientLaunchConfig) config2c; + config2x.setInstallLocation((ClientVersionInstalled) cmv.getSelectedItem()); + + Object o=cmj.getSelectedItem(); + if(o instanceof JavaLocation){ + JavaLocation jl=(JavaLocation)o; + config2x.setJavaLocation(jl); + }else{ + config2x.setJavaLocation(null); + } + config2x.getCommandline().setXmx(Integer.parseInt(txm.getText())); + config2x.setUser((UserConfig) cub.getSelectedItem()); + config2x.setIgnorecheck(cb.isSelected()); + config2x.setIndependent(verib.isSelected()); + config2x.setBindSave(txmsa.getText()); + config2x.setBindServer(txmse.getText()); + return null; + } + + + @Override + public void setConfig(Config configc) { + super.setConfig(configc); + ClientLaunchConfig config=(ClientLaunchConfig) configc; + reload(); + ClientVersionInstalled vid=((ClientLaunchConfig) config).getVersionInstalled(); + if(vid!=null){ + cmb.setSelectedItem(vid.getLocation()); + cmv.setSelectedItem(vid); + } + + JavaLocation jl=config.getJavaLocation(); + if(jl!=null){ + cmj.setSelectedItem(jl); + } + txm.setText(Integer.toString(config.getCommandline().getXmx())); + if(config.getUser()!=null) + cub.setSelectedItem(config.getUser()); + + cb.setSelected(config.isIgnorecheck()); + verib.setSelected(config.isIndependent()); + + if(config.getBindSave()==null||config.getBindSave().isEmpty()) { + if(config.getBindServer()==null||config.getBindServer().isEmpty()) { + jrb1.setSelected(true); + }else { + jrb3.setSelected(true); + txmse.setText(config.getBindServer()); + } + }else { + if(config.getBindServer()==null||config.getBindServer().isEmpty()) { + jrb2.setSelected(true); + txmsa.setText(config.getBindSave()); + }else { + + } + } + if(jrb1.isSelected()) { + txmsa.setEnabled(false); + txmsa.setText(""); + txmse.setEnabled(false); + txmse.setText(""); + }else if(jrb2.isSelected()) { + txmsa.setEnabled(true); + txmse.setEnabled(false); + txmse.setText(""); + }else if(jrb3.isSelected()){ + txmsa.setEnabled(false); + txmsa.setText(""); + txmse.setEnabled(true); + } + } + + public void reloadVersions() { + cmv.removeAllItems(); + ClientLocation clt=(ClientLocation) cmb.getSelectedItem(); + if(clt==null) + return; + List l=clt.getAllVersionInstalled(); + for (int i = 0; i dlm=km.getLauncherdata().getClientLocations(); + cmv.setEnabled(dlm.getSize()>0); + for (int i = 0; i dlj=(List) km.getJavamanager().getAvaliableJavaLocations(); + for (int i = 0; i=2) { + launch(); + } + } + }); + centerTextPanex.setBorder(null); + //centerTextPanex.setFocusable(false); + centerTextPanex.setOpaque(false); + getContextPanel().add(centerTextPanex,BorderLayout.CENTER); + centerTextPanex.setEditable(false); + JPanel jlbp=new JPanel(); + jlbp.setOpaque(false); + jlb = new JLabel(); + jlb.setPreferredSize(new Dimension(100, 50)); + jlb.setHorizontalAlignment(SwingConstants.RIGHT); + + + jlbplys = new JLabel(); + jlbplys.setPreferredSize(new Dimension(100, 50)); + jlbplys.setHorizontalAlignment(SwingConstants.RIGHT); + jlbp.setLayout(new GridLayout(2,1)); + jlbp.add(jlb); + jlbp.add(jlbplys); + getContextPanel().add(jlbp,BorderLayout.EAST); + doc=centerTextPanex.getStyledDocument(); + centerTextPane=centerTextPanex; + } + + @Override + protected void updateContent() { + forceImage=null; + if(getCfg().getBindServer()!=null&&(!getCfg().getBindServer().isEmpty())) { + new Thread(()->{ + while(doc==null) { + try { + Thread.sleep(10); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + try { + doc.remove(0, doc.getLength()); + } catch (BadLocationException e1) { + e1.printStackTrace(); + } + try { + MinecraftServerAddress msa=MinecraftServerAddress.findAddress(getCfg().getBindServer()); + MinecraftServerPinger msp=new MinecraftServerPinger(msa); + MinecraftChatText mct=new MinecraftChatText(msp.getDescription(),msp.isOldDescription()); + try { + mct.insertToDocument(doc.getLength(), doc); + } catch (BadLocationException e) { + e.printStackTrace(); + } + forceImage=msp.getIcon(); + if(msp.getLatency()==-1) { + jlb.setText( "?ms"); + }else { + jlb.setText( msp.getLatency()/1000000L+"ms"); + } + if(msp.getKlalbversion()==null) { + jlb.setIcon(null); + }else { + jlb.setIcon(new ImageIcon( ImageIO.read(ClientLaunchConfig.class.getResourceAsStream("/assets/KNEL.png")).getScaledInstance(20, 20, Image.SCALE_SMOOTH))); + } + + jlbplys.setText(msp.getOnline()+"/"+msp.getMax()); + } catch (UnknownHostException e) { + try { + doc.insertString(doc.getLength(),UIEnv.getRsb().getString("unknownhost") , abs2); + } catch (BadLocationException e1) { + e1.printStackTrace(); + } + } catch (IOException e) { + try { + doc.insertString(doc.getLength(),UIEnv.getRsb().getString("cantconnect") , abs2); + } catch (BadLocationException e1) { + e1.printStackTrace(); + } + }/*catch(Exception e) { + try { + doc.insertString(doc.getLength(),UIEnv.getRsb().getString("unknownerror") , abs2); + } catch (BadLocationException e1) { + e1.printStackTrace(); + } + }*/ + super.updateContent(); + }).start(); + }else if(getCfg().getBindSave()!=null&&(!getCfg().getBindSave().isEmpty())) { + new Thread(()->{ + while(doc==null) { + try { + Thread.sleep(10); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + try { + doc.remove(0, doc.getLength()); + } catch (BadLocationException e1) { + e1.printStackTrace(); + } + File ff=null; + File f= new File(getCfg().getSavesDir(),getCfg().getBindSave()); + if(f.exists()&&f.isDirectory()) { + ff=f; + }else { + File fx=new File(getCfg().getBindSave()); + if(fx.exists()&&fx.isDirectory()) { + ff=fx; + } + } + try { + File ldat=new File(ff,"level.dat"); + CompoundTag cpt= NBTIO.readFile(ldat); + CompoundTag cdata=(CompoundTag) cpt.get("Data"); + //System.out.println(cpt); + try { + doc.insertString(doc.getLength(),((StringTag)(cdata).get("LevelName")).getValue() , abs3); + } catch (BadLocationException e1) { + e1.printStackTrace(); + } + try { + File icon=new File(ff,"icon.png"); + forceImage=ImageIO.read(icon); + } catch (IOException e) { + } + }catch(IOException e) { + try { + doc.insertString(doc.getLength(),UIEnv.getRsb().getString("cantfindsave") , abs2); + } catch (BadLocationException e1) { + e1.printStackTrace(); + } + } + super.updateContent(); + }).start(); + } + super.updateContent(); + } + + @Override + public ClientLaunchConfig getCfg() { + return (ClientLaunchConfig) super.getCfg(); + } + + @Override + public String getSubTitle() { + String n=UIEnv.getRsb().getString("unknown"); + if(getCfg().getVersionInstalled()!=null){ + n=getCfg().getVersionInstalled().getVersionid(); + } + return n; + } + @Override + public Image getImage() { + if(forceImage!=null) { + return forceImage; + } + + if(getCfg().getVersionInstalled().getVersionid().toLowerCase().contains("forge")) { + try { + return ImageIO.read(LaunchConfig.class.getResourceAsStream("/assets/forge.png")); + } catch (IOException e) { + e.printStackTrace(); + } + }else if(getCfg().getVersionInstalled().getVersionid().toLowerCase().contains("fabric")) { + try { + return ImageIO.read(LaunchConfig.class.getResourceAsStream("/assets/fabric.png")); + } catch (IOException e) { + } + } + try { + return ImageIO.read(LaunchConfig.class.getResourceAsStream("/assets/craft_table.png")); + } catch (IOException e) { + } + return null; + } + @Override + public void launch() { + if(getCfg().getBindServer()!=null&&(!getCfg().getBindServer().isEmpty())) { + try { + getCfg().createLaunchTask(getClf().getManager(),MinecraftServerAddress.findAddress(getCfg().getBindServer())).setIcon(getImage()); + }catch(UnknownHostException ex) { + JOptionPane.showMessageDialog(ClientLaunchConfigPanel.this,UIEnv.getRsb().getString("unknownhost"), UIEnv.getRsb().getString("error"), JOptionPane.ERROR_MESSAGE); + }catch(ConnectException exc) { + JOptionPane.showMessageDialog(ClientLaunchConfigPanel.this,UIEnv.getRsb().getString("cantconnect"), UIEnv.getRsb().getString("error"), JOptionPane.ERROR_MESSAGE); + }catch (Exception ex) { + new CrashReport(null, true).report(ex, UIEnv.getRsb().getString("error")); + } + }else if(getCfg().getBindSave()!=null&&(!getCfg().getBindSave().isEmpty())){ + getCfg().createLaunchTask(getClf().getManager(),getCfg().getBindSave()).setIcon(getImage()); + }else { + getCfg().createLaunchTask(getClf().getManager()).setIcon(getImage()); + } + } + + @Override + protected void installNetworkButtons() { + JButton jbt=new JButton(); + jbt.setToolTipText(UIEnv.getRsb().getString("joinserver")); + try { + jbt.setIcon(new ImageIcon(ImageIO.read(LaunchConfig.class.getResourceAsStream("/assets/connect.png")).getScaledInstance(dss.width-2, dss.height-2, Image.SCALE_SMOOTH))); + } catch (IOException e) { + e.printStackTrace(); + } + jbt.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + + msae.setVisible(true); + } + }); + jbt.setSize(dss); + jbt.setPreferredSize(dss); + getButtonPanel().add(jbt); + super.installNetworkButtons(); + } + + + + @Override + protected void check() { + LaunchConfig lfg= (LaunchConfig) getCfg(); + KNEMCLTask tsk=lfg.createCheckTask(getClf().getManager()); + tsk.setIcon(getImage()); + getClf().ecd.apply(tsk,lfg); + } + +} diff --git a/src/org/knemcl/ui/ClientLaunchPanel.java b/src/org/knemcl/ui/ClientLaunchPanel.java new file mode 100644 index 0000000..b4867bd --- /dev/null +++ b/src/org/knemcl/ui/ClientLaunchPanel.java @@ -0,0 +1,68 @@ +package org.knemcl.ui; + +import java.awt.Component; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; +import javax.swing.JFrame; +import javax.swing.SpringLayout; +import javax.swing.JPanel; +import javax.swing.JButton; +import org.kne.util.AutoProperties; +import org.kne.util.FileUtil; +import org.knemcl.launch.ClientLaunchConfig; +import org.knemcl.task.ClientLaunchTask; +import org.knemcl.launch.Config; +import org.knemcl.task.KNEMCLTask; +import org.knemcl.launch.LaunchConfig; +import org.knemcl.main.CONST; +import org.knemcl.main.KNEManager; +import org.knemcl.uitool.ConfigPanel; +import org.knemcl.uitool.LaunchConfigPanel; + +public class ClientLaunchPanel extends LaunchPanel{ + public ClientLaunchPanel(KNEManager kmr){ + super(()->{return kmr.getLauncherdata().getClientLaunchConfigList();},kmr); + //setTitle(CONST.launchclient); + /*getLaunchbut().setText(CONST.launchmc); + getLaunchbut().addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + LaunchConfig lfg= (LaunchConfig) getSelectedConfig(); + ClientLaunchTask clt=new ClientLaunchTask(lfg,getManager()); + windowManager.getTaskController().putTask(clt); + } + }); + getCheckbut().addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + LaunchConfig lfg= (LaunchConfig) getSelectedConfig(); + ecd.setOldname(lfg.getName()); + KNEMCLTask tsk=((ClientLaunchConfig) lfg).check(getManager()); + ecd.apply(tsk,lfg); + + } + });*/ + } + + @Override + public EditConfigDialog loadEditConfigDialog() { + return new ClientEditConfigDialog(this,getManager()); + } + + @Override + public ConfigPanel getConfigPanel(Config lcfg) { + return new ClientLaunchConfigPanel((LaunchConfig) lcfg,this); + } + + @Override + public Config makeEmptyConfig() { + return new ClientLaunchConfig(); + } + +} diff --git a/src/org/knemcl/ui/ClientPathListSettingItem.java b/src/org/knemcl/ui/ClientPathListSettingItem.java new file mode 100644 index 0000000..0a14e1b --- /dev/null +++ b/src/org/knemcl/ui/ClientPathListSettingItem.java @@ -0,0 +1,28 @@ +package org.knemcl.ui; + +import java.awt.Font; + +import javax.swing.DefaultListModel; + +import org.knemcl.launch.ClientLocation; +import org.knemcl.main.CONST; +import org.knemcl.uitool.XDefaultListModel; + +public class ClientPathListSettingItem extends PathListSettingItem { + + public ClientPathListSettingItem(String text, Font deriveFont, int w, int h, XDefaultListModel lm) { + super(text, deriveFont, w, h, lm); + } + + public ClientPathListSettingItem(String text, int w, int h, XDefaultListModel lm) { + super(text, w, h, lm); + } + { + getPit().setTitle(UIEnv.getRsb().getString("selectinstalldir")); + } + @Override + protected ClientLocation createEmpty() { + return new ClientLocation(); + } + +} diff --git a/src/org/knemcl/ui/ConfigListPanel.java b/src/org/knemcl/ui/ConfigListPanel.java new file mode 100644 index 0000000..25eb5f4 --- /dev/null +++ b/src/org/knemcl/ui/ConfigListPanel.java @@ -0,0 +1,230 @@ +package org.knemcl.ui; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Image; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import java.util.UUID; +import java.util.function.Supplier; + +import javax.swing.JPanel; + +import org.kne.ui.XFrame; +import org.kne.ui.YScrollPane; +import org.kne.util.FileUtil; +import org.knemcl.launch.Config; +import org.knemcl.launch.LaunchConfig; +import org.knemcl.main.CONST; +import org.knemcl.main.KNEManager; +import org.knemcl.uitool.ConfigPanel; +import org.knemcl.uitool.LaunchConfigPanel; + +import javax.imageio.ImageIO; +import javax.swing.ImageIcon; +import javax.swing.JButton; + +public abstract class ConfigListPanel extends ListPanel { + + + protected EditConfigDialog ecd; + //protected File configdir; + + private Supplier> configListSupplier; + + public Supplier> getConfigListSupplier() { + return configListSupplier; + } + + /*public void setConfigListSupplier(Supplier> configListSupplier) { + this.configListSupplier = configListSupplier; + }*/ + + public EditConfigDialog getEcd() { + return ecd; + } + + + +/* public File getConfigdir() { + return configdir; + }*/ + + public ConfigListPanel(Supplier> configListSp, KNEManager kmr) { + super(kmr); + this.configListSupplier = configListSp; + + + JButton btnNewButton = new JButton(UIEnv.getRsb().getString("createconfig")); + UIEnv.defbut(btnNewButton,18); + add(btnNewButton, BorderLayout.NORTH); + btnNewButton.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + ecd.setConfig(makeEmptyConfig()); + ecd.setVisible(true); + } + }); + + JButton btnNewButton1 = new JButton(); + Dimension dim=new Dimension(26,26); + try { + btnNewButton1.setIcon(new ImageIcon(ImageIO.read(ConfigListPanel.class.getResourceAsStream("/assets/refresh.png")).getScaledInstance(dim.width-2, dim.height-2, Image.SCALE_SMOOTH))); + } catch (IOException e1) { + e1.printStackTrace(); + } + btnNewButton1.setToolTipText(UIEnv.getRsb().getString("refresh")); + //UIEnv.defbut(btnNewButton1,18); + btnNewButton1.setPreferredSize(dim); + btnNewButton1.setSize(dim); + btnNewButton1.setMaximumSize(btnNewButton1.getPreferredSize()); + btnNewButton1.setMinimumSize(btnNewButton1.getPreferredSize()); + btnNewButton.setLayout(new BorderLayout()); + btnNewButton.add(btnNewButton1, BorderLayout.EAST); + btnNewButton1.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + loadConfigList(); + } + }); + + ecd=loadEditConfigDialog(); + ecd.setConfigConsumer((e)->{ + deleteConfigByUUID(e.getConfigUUID()); + configListSupplier.get().add(e); + kmr.writeData(); + loadConfigList(); + }); + } + public List loadConfigObjects(){ + List l=configListSupplier.get(); + /*File[]n=configdir.listFiles(); + Arrays.sort(n, (a,b)->{ + long x=b.lastModified()-a.lastModified(); + if(x>0){ + return 1; + }else if(x<0){ + return -1; + }else { + return 0; + } + }); + for (int i = 0; i l=configListSupplier.get(); + for (Iterator iterator = l.iterator(); iterator.hasNext();) { + Config config = (Config) iterator.next(); + if(lcfg.equals(config)) { + iterator.remove(); + } + } + kmr.writeData(); + } + /*public void deleteConfigByName(String lcfg){ + File[]n=configdir.listFiles(); + for (int i = 0; i l=configListSupplier.get(); + for (Iterator iterator = l.iterator(); iterator.hasNext();) { + Config config = (Config) iterator.next(); + if(lcfg.equals(config.getConfigUUID())) { + iterator.remove(); + } + } + kmr.writeData(); + } + /*public String getNewName(String str){ + String ret=str; + int n=1; + while(checkName(ret)){ + ret=new StringBuilder(str).append('(').append(n++).append(')').toString(); + } + return ret; + }*/ + /*protected boolean checkName(String lcfg){ + File[]n=configdir.listFiles(); + for (int i = 0; ilobj=loadConfigObjects(); + for (int i = 0; i{ + if(getSelected()!=null){ + getSelected().dounSelect(); + } + setSelected(cpl); + //checkIsSelected(); + if(n.getClickCount()>=2){ + doubleClick(); + } + }); + ysp.getView().add(cpl); + } + //checkIsSelected(); + } + + //protected abstract void checkIsSelected(); + public ConfigPanel getSelected() { + return (ConfigPanel) super.getSelected(); + } + public Config getSelectedConfig() { + return (Config) getSelected().getCfg(); + } + public void setSelected(ConfigPanel selected) { + super.setSelected(selected); + } + public abstract EditConfigDialog loadEditConfigDialog(); + public abstract ConfigPanel getConfigPanel(Config lcfg); + public abstract Config makeEmptyConfig(); +} diff --git a/src/org/knemcl/ui/EditConfigDialog.java b/src/org/knemcl/ui/EditConfigDialog.java new file mode 100644 index 0000000..0fcd1c6 --- /dev/null +++ b/src/org/knemcl/ui/EditConfigDialog.java @@ -0,0 +1,149 @@ +package org.knemcl.ui; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Window; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; +import javax.swing.JButton; +import javax.swing.JDialog; +import javax.swing.JPanel; +import javax.swing.border.LineBorder; + +import org.kne.ui.XFrame; +import org.kne.ui.YScrollPane; +import org.knemcl.launch.Config; +import org.knemcl.task.KNEMCLTask; +import org.knemcl.main.CONST; +import org.knemcl.main.KNEManager; +import org.knemcl.uitool.CrashReport; + +public abstract class EditConfigDialog extends XFrame { + private Consumerc; + private Config config; + private KNEManager manager; + private ConfigListPanel ld; + protected YScrollPane ysp; + protected int itemWidth; + + public EditConfigDialog(ConfigListPanel s, KNEManager manager2) { + this.manager = manager2; + ld= (ConfigListPanel) s; + setResizable(false); + setIconImage(UIEnv.getIcon()); + getTitlepanel().setBorder(new LineBorder(Color.LIGHT_GRAY)); + getContentPane().setBackground(Color.WHITE); + setTitleColor(UIEnv.getDefaultTitleColor()); + getTitlelabel().setFont(UIEnv.getFont().deriveFont(16.0f)); + + setSize(800, 600); + setLocationRelativeTo(null); + getContentPane().setLayout(new BorderLayout(0, 0)); + + //UIEnv.defbut(okbut,25); + ysp=new YScrollPane(770); + ysp.setBorder(new LineBorder(UIEnv.getDefaultcolor())); + getContentPane().add(ysp); + JPanel panel = new JPanel(); + getContentPane().add(panel, BorderLayout.SOUTH); + panel.setLayout(new BorderLayout(0, 0)); + + itemWidth=ysp.getView().getWidth()-10; + + + + + + JButton ok = new JButton(UIEnv.getRsb().getString("ok")); + UIEnv.defbut(ok); + panel.add(ok, BorderLayout.WEST); + ok.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + new Thread(()->{ + try { + if(!checkManager()){ + return; + } + } catch (Exception e1) { + new CrashReport(EditConfigDialog.this,true).report(e1,"检查配置失败"); + } + try { + KNEMCLTask tsk=applyManager(getConfig()); + EditConfigDialog.this.setVisible(false); + apply(tsk,getConfig()); + } catch (Exception e1) { + new CrashReport(EditConfigDialog.this,true).report(e1,"保存配置失败"); + } + }).start(); + } + + }); + + JButton cancel = new JButton(UIEnv.getRsb().getString("cancel")); + UIEnv.defbut(cancel); + panel.add(cancel, BorderLayout.EAST); + cancel.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + EditConfigDialog.this.setVisible(false); + } + }); + } + + protected abstract boolean checkManager() throws Exception; + protected abstract KNEMCLTask applyManager(Config config2) throws Exception; + + + public KNEManager getManager() { + return manager; + } + + public void setManager(KNEManager manager) { + this.manager = manager; + } + + public Config getConfig() { + return config; + } + + public ConfigListPanel getLd() { + return ld; + } + + public void setConfig(Config config) { + this.config = config; + } + public Consumer getConfigConsumer() { + return c; + } + + public void setConfigConsumer(Consumer c) { + this.c = c; + } + public void apply(Config cfg) { + apply(null,cfg); + } + public void apply(KNEMCLTask bewait,Config cfg) { + getManager().getTaskController().putTask(new KNEMCLTask(UIEnv.getRsb().getString("saving")) { + + @Override + public void runTask() throws Exception { + c.accept(cfg); + } + + @Override + public List getWaitings() { + Listl=new ArrayList(); + if(bewait!=null) + l.add(bewait); + return l; + } + }); + } +} diff --git a/src/org/knemcl/ui/EditLaunchConfigDialog.java b/src/org/knemcl/ui/EditLaunchConfigDialog.java new file mode 100644 index 0000000..93e5f90 --- /dev/null +++ b/src/org/knemcl/ui/EditLaunchConfigDialog.java @@ -0,0 +1,111 @@ +package org.knemcl.ui; + import java.awt.Font; + +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JTextArea; +import javax.swing.JTextField; + +import org.knemcl.launch.Config; +import org.knemcl.launch.LaunchConfig; +import org.knemcl.main.CONST; +import org.knemcl.main.KNEManager; +import org.knemcl.task.KNEMCLTask; +import org.knemcl.uitool.SettingItem; +import org.knemcl.uitool.TextAreaSettingItem; +import org.knemcl.uitool.TextSettingItem; +public abstract class EditLaunchConfigDialog extends EditConfigDialog{ + + private JTextField jtf; + + private JTextArea jtpc,jtvm; + public void setConfig(Config config) { + super.setConfig(config); + jtf.setText(config.getName()); + LaunchConfig lfg=(LaunchConfig) config; + StringBuilder sbp=new StringBuilder(); + lfg.getUPCargs().forEach((s)->{ + sbp.append(s); + sbp.append('\n'); + }); + jtpc.setText(sbp.toString()); + StringBuilder sbj=new StringBuilder(); + lfg.getUVMargs().forEach((s)->{ + sbj.append(s); + sbj.append('\n'); + }); + jtvm.setText(sbj.toString()); + } + + public EditLaunchConfigDialog(ConfigListPanel s,KNEManager manager){ + super(s,manager); + + + + JPanel jp=ysp.getView(); + SettingItem si=new SettingItem(UIEnv.getRsb().getString("basicsets"),UIEnv.getFont().deriveFont(20.0f).deriveFont(Font.BOLD),itemWidth,CONST.settingheight); + jp.add(si); + TextSettingItem tsi=new TextSettingItem(UIEnv.getRsb().getString("configname"),itemWidth,CONST.settingheight); + jp.add(tsi); + jtf = tsi.getTextField(); + + addBasicItems(); + + SettingItem sai=new SettingItem(UIEnv.getRsb().getString("advancesets"),UIEnv.getFont().deriveFont(20.0f).deriveFont(Font.BOLD),itemWidth,CONST.settingheight); + ysp.getView().add(sai); + + TextAreaSettingItem tasi=new TextAreaSettingItem(UIEnv.getRsb().getString("progargs"),itemWidth,CONST.settinglistheight); + ysp.getView().add(tasi); + jtpc=tasi.getTextArea(); + + TextAreaSettingItem tasvi=new TextAreaSettingItem(UIEnv.getRsb().getString("vmargs"),itemWidth,CONST.settinglistheight); + ysp.getView().add(tasvi); + jtvm=tasvi.getTextArea(); + + addAdvanceItems(); + } + protected abstract void addAdvanceItems(); + + protected abstract void addBasicItems(); + + @Override + protected boolean checkManager() throws Exception { + if("".equals(jtf.getText())){ + JOptionPane.showMessageDialog(EditLaunchConfigDialog.this, UIEnv.getRsb().getString("nonull"), UIEnv.getRsb().getString("error"), JOptionPane.ERROR_MESSAGE); + return false; + } + /*if(getOldname()==null){ + if(getLd().checkName(jtf.getText())){ + JOptionPane.showMessageDialog(EditLaunchConfigDialog.this, CONST.exists, CONST.error, JOptionPane.ERROR_MESSAGE); + return false; + } + }else{ + if(getLd().checkNameWithout(jtf.getText(),getOldname())){ + JOptionPane.showMessageDialog(EditLaunchConfigDialog.this, CONST.exists, CONST.error, JOptionPane.ERROR_MESSAGE); + return false; + } + }*/ + return true; + } + @Override + protected KNEMCLTask applyManager(Config config2) throws Exception { + config2.setName(jtf.getText()); + LaunchConfig lcfg=(LaunchConfig) config2; + lcfg.getUPCargs().clear(); + String[]argspc=jtpc.getText().split("\n"); + for (int i = 0; i < argspc.length; i++) { + String s=argspc[i].trim(); + if(!s.isEmpty()) + lcfg.getUPCargs().add(s); + } + lcfg.getUVMargs().clear(); + String[]argsvm=jtvm.getText().split("\n"); + for (int i = 0; i < argsvm.length; i++) { + String s=argsvm[i].trim(); + if(!s.isEmpty()) + lcfg.getUVMargs().add(s); + } + return null; + } + } + diff --git a/src/org/knemcl/ui/JavaPathListSettingItem.java b/src/org/knemcl/ui/JavaPathListSettingItem.java new file mode 100644 index 0000000..44e6cab --- /dev/null +++ b/src/org/knemcl/ui/JavaPathListSettingItem.java @@ -0,0 +1,32 @@ +package org.knemcl.ui; + +import java.awt.Font; + +import javax.swing.filechooser.FileFilter; +import javax.swing.filechooser.FileNameExtensionFilter; + +import org.knemcl.launch.ClientLocation; +import org.knemcl.launch.JavaLocation; +import org.knemcl.main.CONST; +import org.knemcl.uitool.XDefaultListModel; + +public class JavaPathListSettingItem extends PathListSettingItem { + + public JavaPathListSettingItem(String text, Font deriveFont, int w, int h, XDefaultListModel lm) { + super(text, deriveFont, w, h, lm); + } + + public JavaPathListSettingItem(String text, int w, int h, XDefaultListModel lm) { + super(text, w, h, lm); + } + { + //FileFilter filter = new FileNameExtensionFilter("java", "exe"); + //getPit().getJfc().setFileFilter(filter); + getPit().setTitle(UIEnv.getRsb().getString("selectjavadir")); + + } + @Override + protected JavaLocation createEmpty() { + return new JavaLocation(); + } +} diff --git a/src/org/knemcl/ui/Language.java b/src/org/knemcl/ui/Language.java new file mode 100644 index 0000000..98c7e5a --- /dev/null +++ b/src/org/knemcl/ui/Language.java @@ -0,0 +1,22 @@ +package org.knemcl.ui; + +public class Language { + private String key; + private String name; + public String getKey() { + return key; + } + public String getName() { + return name; + } + @Override + public String toString() { + return name ; + } + public Language(String key, String name) { + super(); + this.key = key; + this.name = name; + } + +} diff --git a/src/org/knemcl/ui/LaunchPanel.java b/src/org/knemcl/ui/LaunchPanel.java new file mode 100644 index 0000000..b62e952 --- /dev/null +++ b/src/org/knemcl/ui/LaunchPanel.java @@ -0,0 +1,168 @@ +package org.knemcl.ui; + +import javax.swing.JButton; +import javax.swing.JDialog; +import javax.swing.JFrame; +import javax.swing.JOptionPane; +import org.kne.ui.XFrame; +import org.kne.ui.YScrollPane; +import org.kne.util.FileUtil; +import org.knemcl.launch.ClientLaunchConfig; +import org.knemcl.launch.Config; +import org.knemcl.launch.LaunchConfig; +import org.knemcl.main.CONST; +import org.knemcl.main.KNEManager; +import org.knemcl.uitool.LaunchConfigPanel; +import java.awt.Color; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.*; +import java.util.*; +import java.util.function.Consumer; +import java.util.function.Supplier; +public abstract class LaunchPanel extends ConfigListPanel { + + + + + + + /*private JButton addbut; + private JButton delbut; + private JButton copybut; + private JButton editbut; + private JButton launchbut; + private JButton checkbut; + + + public JButton getLaunchbut() { + return launchbut; + } + + public JButton getCheckbut() { + return checkbut; + }*/ + + + + public LaunchPanel(Supplier> configdir, KNEManager windowManager){ + super(configdir, windowManager); + + /*launchbut = new JButton(); + launchbut.setBounds(563, 514, 219, 46); + add(launchbut); + UIEnv.defbut(launchbut,25); + launchbut.setForeground(Color.RED); + launchbut.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + setVisible(false); + } + }); + + addbut = new JButton(); + addbut.setBounds(563, 232, 219, 46); + addbut.setText(CONST.addconfig); + UIEnv.defbut(addbut,20); + add(addbut); + + checkbut = new JButton(); + checkbut.setEnabled(false); + checkbut.setBounds(563, 289, 219, 46); + checkbut.setText(CONST.checkconfig); + UIEnv.defbut(checkbut,20); + add(checkbut); + + delbut = new JButton(); + delbut.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + int ret=JOptionPane.showConfirmDialog(LaunchFrame.this, CONST.deletelaunchconfig, CONST.deleteconfirm, JOptionPane.YES_NO_OPTION); + if(ret==JOptionPane.YES_OPTION){ + deleteConfig( getSelectedConfig()); + loadConfigList(); + } + } + }); + delbut.setEnabled(false); + delbut.setText("\u5220\u9664\u542F\u52A8\u914D\u7F6E"); + delbut.setBounds(563, 458, 219, 46); + UIEnv.defbut(delbut,20); + add(delbut); + + copybut = new JButton(); + copybut.setEnabled(false); + copybut.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + String s=null; + do{ + s=JOptionPane.showInputDialog(CONST.copynewname); + if(s==null){ + return; + } + if("".equals(s)){ + JOptionPane.showMessageDialog(LaunchFrame.this, CONST.nonull, CONST.error, JOptionPane.ERROR_MESSAGE); + continue; + }else{ + Config c=getSelectedConfig(); + String old=c.getName(); + c.setName(s); + KNEManager.saveObjectToFile(c, FileUtil.getNotExistsFile(CONST.clientconfig, ".dat")); + c.setName(old); + loadConfigList(); + return; + } + }while(true); + } + }); + copybut.setText("\u590D\u5236\u542F\u52A8\u914D\u7F6E"); + copybut.setBounds(563, 402, 219, 46); + UIEnv.defbut(copybut,20); + add(copybut); + + editbut = new JButton(); + editbut.setEnabled(false); + editbut.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + ecd.setConfig( getSelectedConfig()); + ecd.setVisible(true); + } + }); + editbut.setText("\u7F16\u8F91\u542F\u52A8\u914D\u7F6E"); + editbut.setBounds(563, 346, 219, 46); + UIEnv.defbut(editbut,20); + add(editbut); + + addbut.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + ecd.setConfig(new ClientLaunchConfig()); + ecd.setVisible(true); + } + });*/ + + + loadConfigList(); + repaint(); + } + + /*@Override + protected void doubleClick() { + launchbut.doClick(); + }*/ + + /*@Override + protected void checkIsSelected(){ + boolean b=getSelectedPanel()!=null; + editbut.setEnabled(b); + copybut.setEnabled(b); + delbut.setEnabled(b); + launchbut.setEnabled(b); + checkbut.setEnabled(b); + } +*/ + +} diff --git a/src/org/knemcl/ui/ListItemPanel.java b/src/org/knemcl/ui/ListItemPanel.java new file mode 100644 index 0000000..810c487 --- /dev/null +++ b/src/org/knemcl/ui/ListItemPanel.java @@ -0,0 +1,186 @@ +package org.knemcl.ui; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Font; +import java.awt.Image; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.util.function.Consumer; + +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import javax.swing.border.LineBorder; + +import org.knemcl.main.CONST; + +public abstract class ListItemPanel extends JPanel { + private ListPanel lf; + + + protected Dimension dss=new Dimension(26,26); + + protected void updateContent() { + Image image=getImage(); + if(image!=null) + getIconLabel().setIcon(new ImageIcon(image.getScaledInstance(38, 38, Image.SCALE_SMOOTH))); + + getNameLabel().setText(getTitle()); + getVersionLabel().setText(getSubTitle()); + + } + + public abstract Image getImage(); + + public abstract String getTitle(); + public abstract String getSubTitle(); + + private JLabel iconLabel; + private Consumerselected; + private JLabel nameLabel; + private JLabel versionLabel; + private JPanel buttonPanel; + private JPanel contextPanel; + public JPanel getContextPanel() { + return contextPanel; + } + + public Consumer getSelected() { + return selected; + } + + public void setSelected(Consumer selected) { + this.selected = selected; + } + public JLabel getIconLabel() { + return iconLabel; + } + + + public JPanel getButtonPanel() { + return buttonPanel; + } + + public JLabel getNameLabel() { + return nameLabel; + } + + public JLabel getVersionLabel() { + return versionLabel; + } + + + + public ListItemPanel(ListPanel lf) { + this.lf=(ListPanel) lf; + + + Dimension d=new Dimension(CONST.settingwidth, 40); + setSize(d); + setBackground(UIEnv.getHalfTransparentDefaultColor()); + setPreferredSize(d); + setBorder(new LineBorder(UIEnv.getDefaultcolor())); + setLayout(new BorderLayout(0, 0)); + iconLabel = new JLabel(); + iconLabel.setHorizontalAlignment(SwingConstants.CENTER); + iconLabel.setPreferredSize(new Dimension(38, 38)); + add(iconLabel, BorderLayout.WEST); + + JPanel content0=new JPanel(); + content0.setLayout(new BorderLayout()); + JPanel content=new JPanel(); + content0.add(content,BorderLayout.CENTER); + content.setOpaque(false); + content0.setOpaque(false); + add(content0, BorderLayout.CENTER); + content.setLayout(new BorderLayout(0, 0)); + buttonPanel = new JPanel(); + FlowLayout flowLayout = (FlowLayout) buttonPanel.getLayout(); + flowLayout.setAlignment(FlowLayout.RIGHT); + buttonPanel.setOpaque(false); + /*Dimension dsm=new Dimension(100, 38); + buttonPanel.setSize(dsm); + buttonPanel.setPreferredSize(dsm);*/ + add(buttonPanel, BorderLayout.EAST); + nameLabel = new JLabel(); + nameLabel.setFont(UIEnv.getFont().deriveFont(18.0f)); + content.add(nameLabel); + + versionLabel = new JLabel(); + versionLabel.setFont(new Font("宋体", Font.PLAIN, 10)); + versionLabel.setForeground(Color.DARK_GRAY); + content.add(versionLabel, BorderLayout.SOUTH); + + contextPanel = new JPanel(); + contextPanel.setOpaque(false); + content0.add(contextPanel, BorderLayout.EAST); + contextPanel.setLayout(new BorderLayout(0, 0)); + + + addMouseListener(new MouseListener() { + + @Override + public void mouseReleased(MouseEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void mousePressed(MouseEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void mouseExited(MouseEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void mouseEntered(MouseEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void mouseClicked(MouseEvent e) { + select(e); + } + }); + installButtons(); + } + + abstract protected void installButtons() ; + + protected void select(MouseEvent e) { + if(selected!=null) + selected.accept(e); + + setBorder(new LineBorder(UIEnv.getSelectedcolor(),2)); + Container c= getParent(); + if(c!=null) + c.repaint(); + } + + /*public ListItemPanel() { + this(null); + }*/ + + public void doSelect() { + setBorder(new LineBorder(UIEnv.getSelectedcolor(),2)); + } + + public void dounSelect() { + setBorder(new LineBorder(UIEnv.getDefaultTitleColor())); + } + + public ListPanel getLf() { + return lf; + } +} diff --git a/src/org/knemcl/ui/ListPanel.java b/src/org/knemcl/ui/ListPanel.java new file mode 100644 index 0000000..5f25aef --- /dev/null +++ b/src/org/knemcl/ui/ListPanel.java @@ -0,0 +1,48 @@ +package org.knemcl.ui; + +import java.awt.BorderLayout; + +import javax.swing.JPanel; + +import org.kne.ui.YScrollPane; +import org.knemcl.main.CONST; +import org.knemcl.main.KNEManager; +import org.knemcl.uitool.ConfigPanel; + +public class ListPanel extends JPanel { + protected KNEManager kmr; + + protected YScrollPane ysp; + + private ListItemPanel selected; + + public ListPanel(KNEManager kmr2) { + this.kmr=kmr2; + /*setResizable(false); + setTitleColor(new Color(0,0,0,128)); + getTitlelabel().setForeground(Color.WHITE); + getTitlelabel().setFont(UIEnv.getFont().deriveFont(16.0f));*/ + //setSize(810, 610); + //setLocationRelativeTo(null); + setLayout(new BorderLayout()); + setOpaque(false); + ysp=new YScrollPane(CONST.settingwidthOfYC); + //ysp.setBounds(10, 10, 541, 551); + ysp.setOpaque(false); + add(ysp,BorderLayout.CENTER); + } + public KNEManager getManager() { + return kmr; + } + + public void setSelected(ListItemPanel selected) { + this.selected = selected; + } + public ListItemPanel getSelected() { + return selected; + } + +protected void doubleClick() { + + } +} diff --git a/src/org/knemcl/ui/MainWindow.java b/src/org/knemcl/ui/MainWindow.java new file mode 100644 index 0000000..a23a85b --- /dev/null +++ b/src/org/knemcl/ui/MainWindow.java @@ -0,0 +1,640 @@ +package org.knemcl.ui; +import static org.knemcl.ui.UIEnv.*; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Image; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.AdjustmentEvent; +import java.awt.event.AdjustmentListener; +import java.awt.event.ComponentEvent; +import java.awt.event.ComponentListener; +import java.awt.event.ContainerEvent; +import java.awt.event.ContainerListener; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.net.Socket; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.Random; +import javax.imageio.ImageIO; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JColorChooser; +import javax.swing.JComboBox; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JTabbedPane; +import javax.swing.JTextField; +import javax.swing.SpringLayout; + +import org.kne.ui.BackgroundLabel; +import org.kne.ui.BackgroundPanel; +import org.kne.ui.JIconFrame; +import org.kne.ui.KTabUI; +import org.kne.ui.XButton; +import org.kne.ui.XFrame; +import org.kne.ui.YScrollPane; +import org.kne.util.AutoProperties; +import org.knemcl.launch.ClientLocation; +import org.knemcl.launch.JavaLocation; +import org.knemcl.main.CONST; +import org.knemcl.main.KNEManager; +import org.knemcl.network.NetworkPort; +import org.knemcl.uitool.ButtonSettingItem; +import org.knemcl.uitool.CheckBoxSettingItem; +import org.knemcl.uitool.ComboSettingItem; +import org.knemcl.uitool.CrashReport; +import org.knemcl.uitool.ListSettingItem; +import org.knemcl.uitool.PathInput; +import org.knemcl.uitool.ProgressListPanel; +import org.knemcl.uitool.SettingItem; +import org.knemcl.uitool.TextAreaSettingItem; +import org.knemcl.uitool.TextButtonSettingItem; +import org.knemcl.uitool.TextSettingItem; +import org.knemcl.uitool.XDefaultListModel; + +import javax.swing.JScrollPane; +import java.awt.FlowLayout; +import javax.swing.ScrollPaneConstants; +import javax.swing.JScrollBar; +import javax.swing.BoxLayout; +import javax.swing.ComboBoxModel; +import javax.swing.DefaultListModel; + +import java.awt.Component; +import javax.swing.SwingConstants; +import javax.swing.UIManager; +import javax.swing.border.LineBorder; +import javax.swing.filechooser.FileFilter; +import javax.swing.filechooser.FileNameExtensionFilter; +public class MainWindow extends XFrame{ + //private ComponentListener clasdafperb; + //private BufferedImage i; + private AutoProperties iniv; + + private JPanel lv,rv; + + public JPanel getLv() { + return lv; + } + public void setLv(JPanel lv) { + this.lv = lv; + } + public JPanel getRv() { + return rv; + } + public void setRv(JPanel rv) { + this.rv = rv; + } + private KNEManager km; + public MainWindow(KNEManager Kmanager){ + this.iniv=Kmanager.getProperties(); + + km=Kmanager; + setTitle(CONST.name+" V"+CONST.kver); + setTitleColor(UIEnv.getDefaultTitleColor()); + getTitlelabel().setFont(UIEnv.getFont().deriveFont(17.0f)); + getTitlepanel().setBorder(new LineBorder(Color.LIGHT_GRAY)); + getTitlelabel().setHorizontalTextPosition(SwingConstants.LEADING); + getTitlelabel().setVerticalTextPosition(SwingConstants.CENTER); + try { + getTitlelabel().setIcon(new ImageIcon(ImageIO.read(MainWindow.class.getResourceAsStream("/assets/IPV6.png")).getScaledInstance(319/8, 148/8, Image.SCALE_SMOOTH))); + } catch (IOException e1) { + e1.printStackTrace(); + } + //getContentPane().setBackground(new Color(0,0,0,0)); + //getContentPane().setBackground(Color.WHITE); + setCursor(UIEnv. getCursor()); + setIconImage(getIcon()); + addWindowListener(new WindowListener() { + + @Override + public void windowOpened(WindowEvent e) { + + } + + @Override + public void windowIconified(WindowEvent e) { + + } + + @Override + public void windowDeiconified(WindowEvent e) { + + } + + @Override + public void windowDeactivated(WindowEvent e) { + + } + + @Override + public void windowClosing(WindowEvent e) { + + + System.exit(0); + } + + @Override + public void windowClosed(WindowEvent e) { + + } + + @Override + public void windowActivated(WindowEvent e) { + } + }); + getContentPane().setLayout(new BorderLayout(0, 0)); + + JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP); + tabbedPane.setUI(new KTabUI(Color.BLACK)); + tabbedPane.setOpaque(false); + tabbedPane.setFont(UIEnv.getFont().deriveFont(14.0f)); + getContentPane().add(tabbedPane); + tabbedPane.setBackground(UIEnv.getHalfTransparentDefaultColor()); + tabbedPane.setForeground(Color.GRAY); + JPanel res = new JPanel(); + res.setOpaque(false); + + JPanel mainpage = new JPanel(); + mainpage.setOpaque(false); + + + tabbedPane.addTab(UIEnv.getRsb().getString("mainpage"), null, mainpage, null); + JButton button_1 = new XButton(UIEnv.getRsb().getString("accounts")); + defbut(button_1); + button_1.setBounds(220, 154, 190, 40); + button_1.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + tabbedPane.setSelectedComponent(Kmanager.users); + } + + }); + JPanel central0 = new JPanel(); + central0.setOpaque(false); + GridBagLayout gbl_mainpage = new GridBagLayout(); + //mainpage.setOpaque(false); + central0.setLayout(gbl_mainpage); + JPanel central = new JPanel(); + central.setOpaque(false); + central.setSize(420, 250); + central.setPreferredSize(central.getSize()); + central.setMaximumSize(central.getSize()); + central.setMinimumSize(central.getSize()); + central.setLayout(null); + button_1.setIcon(null); + GridBagConstraints gbc_central = new GridBagConstraints(); + gbc_central.gridy = 0; + gbc_central.gridx = 0; + SpringLayout sl_mainpage = new SpringLayout(); + sl_mainpage.putConstraint(SpringLayout.NORTH, central0, 0, SpringLayout.NORTH, mainpage); + sl_mainpage.putConstraint(SpringLayout.WEST, central0, 0, SpringLayout.WEST, mainpage); + sl_mainpage.putConstraint(SpringLayout.SOUTH, central0, 0, SpringLayout.SOUTH, mainpage); + sl_mainpage.putConstraint(SpringLayout.EAST, central0, 0, SpringLayout.EAST, mainpage); + mainpage.setLayout(sl_mainpage); + gbl_mainpage.setConstraints(central, gbc_central); + mainpage.add(central0); + central0.add(central); + central.add(button_1); + JButton start = new XButton(UIEnv.getRsb().getString("launchclient")); + defbut(start); + start.setIcon(null); + start.setBounds(10, 10, 400, 40); + start.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + tabbedPane.setSelectedComponent(Kmanager.clf); + } + }); + + central.add(start); + JButton connects = new XButton(UIEnv.getRsb().getString("connets")); + defbut(connects); + connects.setBounds(10, 154, 190, 40); + connects.setIcon(null); + connects.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + tabbedPane.setSelectedComponent(Kmanager.serverList); + } + }); + //friends.setForeground(Color.BLACK); + central.add(connects); + + //mainpage.setOpaque(true); + //mainpage.add(icon,-1); + JButton minustart = new XButton(UIEnv.getRsb().getString("launchserver")); + defbut(minustart); + minustart.setBounds(10, 58, 400, 40); + minustart.setIcon(null); + minustart.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + + } + }); + central.add(minustart); + + JButton tools = new XButton(UIEnv.getRsb().getString("tools")); + defbut(tools); + tools.setBounds(10, 106, 400, 40); + tools.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + + } + }); + tools.setIcon(null); + central.add(tools); + + + tabbedPane.addTab(UIEnv.getRsb().getString("client"), null, Kmanager.clf, null); + + + //tabbedPane.addTab(CONST.server, null, panel_1, null); + + tabbedPane.addTab(UIEnv.getRsb().getString("accounts"), null, Kmanager.users, null); + + YScrollPane ist = new YScrollPane(CONST.settingwidthOfYC); + ist.setOpaque(false); + tabbedPane.addTab(UIEnv.getRsb().getString("install"), null, ist, null); + JPanel installs = ist.getView(); + SettingItem si0z=new SettingItem(UIEnv.getRsb().getString("install"),UIEnv.getFont().deriveFont(20.0f).deriveFont(Font.BOLD),CONST.settingwidth,CONST.settingheight); + installs.add(si0z); + ButtonSettingItem itm0=new ButtonSettingItem(UIEnv.getRsb().getString("installclient"),CONST.settingwidth,CONST.settingheight); + installs.add(itm0); + itm0.getButton().addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + Kmanager.installClient(); + } + }); + ButtonSettingItem itm1=new ButtonSettingItem(UIEnv.getRsb().getString("installserver"),CONST.settingwidth,CONST.settingheight); + installs.add(itm1); + itm1.getButton().addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + + } + }); + SettingItem si0c=new SettingItem(UIEnv.getRsb().getString("manageclient"),UIEnv.getFont().deriveFont(20.0f).deriveFont(Font.BOLD),CONST.settingwidth,CONST.settingheight); + installs.add(si0c); + + SettingItem si0s=new SettingItem(UIEnv.getRsb().getString("manageserver"),UIEnv.getFont().deriveFont(20.0f).deriveFont(Font.BOLD),CONST.settingwidth,CONST.settingheight); + installs.add(si0s); + + + + + tabbedPane.addTab(UIEnv.getRsb().getString("resourceplatform"), null, res, null); + + /* clasdafperb=new ComponentListener() { + + @Override + public void componentShown(ComponentEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void componentResized(ComponentEvent e) { + //System.out.println(s); + if(i!=null) + try{ + double dertax,dertay; + dertax=mainpage.getWidth()/(double)i.getWidth(); + dertay=mainpage.getHeight()/(double)i.getHeight(); + int w,h; + double prec=0; + if(dertax>dertay){ + prec=dertax; + }else{ + prec=dertay; + } + w=(int) (i.getWidth()*prec); + h=(int) (i.getHeight()*prec); + mainpage.setBackground(i, 0, 0,w,h); + }catch(Exception e2){ + e2.printStackTrace(); + new CrashReport(MainWindow.this, true).report(e2, "载入背景图片失败"); + } + } + + @Override + public void componentMoved(ComponentEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void componentHidden(ComponentEvent e) { + // TODO 自动生成的方法存根 + + } + }; + mainpage.addComponentListener(clasdafperb);*/ + + + tabbedPane.addTab(UIEnv.getRsb().getString("connets"), null, Kmanager.serverList, null); + + + + + YScrollPane scroll0 = new YScrollPane(CONST.settingwidthOfYC); + scroll0.setOpaque(false); + tabbedPane.addTab(UIEnv.getRsb().getString("setting"), null, scroll0, null); + JPanel settings = scroll0.getView(); + + + SettingItem si=new SettingItem(UIEnv.getRsb().getString("basicsets"),UIEnv.getFont().deriveFont(20.0f).deriveFont(Font.BOLD),CONST.settingwidth,CONST.settingheight); + settings.add(si); + ClientPathListSettingItem jdir0=new ClientPathListSettingItem(UIEnv.getRsb().getString("minecraftinstallpath") ,CONST.settingwidth,CONST.settinglistheight,km.getLauncherdata().getClientLocations()); + jdir0.setStoreRecall((v)->{ + km.writeData(); + }); + settings.add(jdir0); + + SettingItem si2=new SettingItem(UIEnv.getRsb().getString("javasetting") ,UIEnv.getFont().deriveFont(20.0f).deriveFont(Font.BOLD),CONST.settingwidth,CONST.settingheight); + settings.add(si2); + JavaPathListSettingItem jdir=new JavaPathListSettingItem(UIEnv.getRsb().getString("javapath") ,CONST.settingwidth,CONST.settinglistheight,(XDefaultListModel) km.getLauncherdata().get("JavaLocation")); + jdir.setStoreRecall((v)->{ + km.writeData(); + }); + settings.add(jdir); + SettingItem si2l=new SettingItem(UIEnv.getRsb().getString("networksetting"),UIEnv.getFont().deriveFont(20.0f).deriveFont(Font.BOLD),CONST.settingwidth,CONST.settingheight); + settings.add(si2l); + + CheckBoxSettingItem ncbsi =new CheckBoxSettingItem(UIEnv.getRsb().getString("enableklalb"), CONST.settingwidth,CONST.settingheight); + JCheckBox jcb=ncbsi.getCheckBox(); + String textk=iniv.getProperty("enableklalb"); + if(textk==null||"".equals(textk)){ + iniv.setProperty("enableklalb", "true"); + } + jcb.setSelected(Boolean.parseBoolean( iniv.getProperty("enableklalb"))); + jcb.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + iniv.setProperty("enableklalb", Boolean.toString( jcb.isSelected())); + } + }); + settings.add(ncbsi); + NetworkPortsListSettingItem frpss=new NetworkPortsListSettingItem(UIEnv.getRsb().getString("frpnode"), CONST.settingwidth, CONST.settinglistheight, (XDefaultListModel)km.getLauncherdata().get("NetworkPorts")); + frpss.setStoreRecall((v)->{ + km.writeData(); + }); + settings.add(frpss); + + SettingItem si2ll=new SettingItem(UIEnv.getRsb().getString("launchsetting"),UIEnv.getFont().deriveFont(20.0f).deriveFont(Font.BOLD),CONST.settingwidth,CONST.settingheight); + settings.add(si2ll); + TextSettingItem mem=new TextSettingItem(UIEnv.getRsb().getString("clientmemory"),CONST.settingwidth,CONST.settingheight); + settings.add(mem); + JTextField tmem=mem.getTextField(); + String text=iniv.getProperty("Cmem"); + if(text==null||"".equals(text)){ + iniv.setProperty("Cmem", "2048"); + } + tmem.setText((String) iniv.getProperty("Cmem")); + tmem.addFocusListener(new FocusListener() { + + @Override + public void focusLost(FocusEvent e) { + String text=tmem.getText(); + if(text==null||"".equals(text)){ + JOptionPane.showMessageDialog(MainWindow.this, UIEnv.getRsb().getString("nonull"), UIEnv.getRsb().getString("error"), JOptionPane.ERROR_MESSAGE); + return; + } + int iv=0; + try{ + iv=Integer.parseInt(text); + }catch(NumberFormatException ne){ + JOptionPane.showMessageDialog(MainWindow.this, UIEnv.getRsb().getString("numberonly"), UIEnv.getRsb().getString("error"), JOptionPane.ERROR_MESSAGE); + return; + } + if(iv<0){ + JOptionPane.showMessageDialog(MainWindow.this, UIEnv.getRsb().getString("nonegative"), UIEnv.getRsb().getString("error"), JOptionPane.ERROR_MESSAGE); + return; + } + iniv.setProperty("Cmem", text); + } + + @Override + public void focusGained(FocusEvent e) { + // TODO 自动生成的方法存根 + + } + }); + + SettingItem si3=new SettingItem(UIEnv.getRsb().getString("windowsetting"),UIEnv.getFont().deriveFont(20.0f).deriveFont(Font.BOLD),CONST.settingwidth,CONST.settingheight); + settings.add(si3); + + ComboSettingItem lang=new ComboSettingItem(UIEnv.getRsb().getString("language"), CONST.settingwidth, CONST.settingheight); + JComboBox jcbl =lang.getComboBox(); + jcbl.setOpaque(false); + List langs=UIEnv.getLanguages(); + + String lng=iniv.getProperty("language"); + for (Iterator iterator = langs.iterator(); iterator.hasNext();) { + Language locale = (Language) iterator.next(); + jcbl.addItem(locale); + if(lng!=null&&lng.equals(locale.getKey())) + jcbl.setSelectedItem(locale); + } + jcbl.addItemListener(new ItemListener() { + + @Override + public void itemStateChanged(ItemEvent e) { + iniv.setProperty("language",((Language) jcbl.getSelectedItem()).getKey()); + } + }); + + jcbl.setSelectedItem(langs); + settings.add(lang); + + PathInput pi=new PathInput(this); + pi.setTitle(UIEnv.getRsb().getString("background2")); + pi.getJfc().setFileFilter( new FileNameExtensionFilter(UIEnv.getRsb().getString("imagefile"), "jpg","png","bmp","gif")); + pi.setCheckfile(true); + pi.setIsdir(false); + TextButtonSettingItem si4=new TextButtonSettingItem(UIEnv.getRsb().getString("background"),CONST.settingwidth,CONST.settingheight); + settings.add(si4); + JButton jbt4=si4.getButton(); + jbt4.setText(UIEnv.getRsb().getString("select")); + jbt4.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + pi.getTextField().setText( iniv.getProperty("back")); + pi.setVisible(true); + } + }); + JTextField tf=si4.getTextField(); + tf.setText((String) iniv.getProperty("back")); + pi.setAl((x)->{ + tf.setText(x.toString()); + iniv.setProperty("back", tf.getText()); + loadPicture(iniv.getProperty("back")); + }); + tf.addFocusListener(new FocusListener() { + + @Override + public void focusLost(FocusEvent e) { + iniv.setProperty("back", tf.getText()); + loadPicture(iniv.getProperty("back")); + } + + @Override + public void focusGained(FocusEvent e) { + + } + }); + + TextButtonSettingItem si45=new TextButtonSettingItem(UIEnv.getRsb().getString("themecolor"),CONST.settingwidth,CONST.settingheight); + settings.add(si45); + JTextField tf2=si45.getTextField(); + JButton jbt45=si45.getButton(); + jbt45.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + Color defc= Color.WHITE; + try { + defc= new Color(Integer.parseInt( iniv.getProperty("themecolor"),16)); + }catch(NumberFormatException ne) { + } + Color c=JColorChooser.showDialog(MainWindow.this, UIEnv.getRsb().getString("themecolor"),defc); + if(c!=null) { + iniv.setProperty("themecolor", Integer.toString( c.getRGB()&0xffffff,16)); + tf2.setText((String) iniv.getProperty("themecolor")); + } + } + }); + jbt45.setText(UIEnv.getRsb().getString("select")); + tf2.setText((String) iniv.getProperty("themecolor")); + tf2.addFocusListener(new FocusListener() { + + @Override + public void focusLost(FocusEvent e) { + iniv.setProperty("themecolor", tf2.getText()); + } + + @Override + public void focusGained(FocusEvent e) { + + } + }); + + + SettingItem si2lll=new SettingItem(UIEnv.getRsb().getString("about")+CONST.name,UIEnv.getFont().deriveFont(20.0f).deriveFont(Font.BOLD),CONST.settingwidth,CONST.settingheight); + settings.add(si2lll); + TextAreaSettingItem tai=new TextAreaSettingItem("",UIEnv.getFont().deriveFont(20.0f).deriveFont(Font.BOLD),CONST.settingwidth,130); + tai.getTextArea().setBorder(null); + tai.getTextArea().setForeground(Color.GRAY); + tai.getTextArea().setEditable(false); + tai.getTextArea().append(CONST.name+" V"+CONST.kver+"\n"); + tai.getTextArea().append(UIEnv.getRsb().getString("opencode")+"\n"); + tai.getTextArea().append(UIEnv.getRsb().getString("license")+"\n"); + tai.getTextArea().append(UIEnv.getRsb().getString("usesource")+"\n"); + tai.getTextArea().append(UIEnv.getRsb().getString("uselibrary")+"\n"); + settings.add(tai); + + + JLabel ll=new JLabel(UIEnv.getRsb().getString("gameprocessmanage") ); + ll.setOpaque(true); + ll.setFont(UIEnv.getFont()); + ll.setBackground(UIEnv.getHalfTransparentDefaultColor()); + ll.setHorizontalAlignment(SwingConstants.CENTER); + sl_mainpage.putConstraint(SpringLayout.NORTH, ll, 0, SpringLayout.NORTH, mainpage); + sl_mainpage.putConstraint(SpringLayout.WEST, ll, 0, SpringLayout.WEST, mainpage); + sl_mainpage.putConstraint(SpringLayout.SOUTH, ll, 20, SpringLayout.NORTH, mainpage); + sl_mainpage.putConstraint(SpringLayout.EAST, ll, 210, SpringLayout.WEST, mainpage); + YScrollPane ls=new YScrollPane(200,BorderLayout.WEST); + sl_mainpage.putConstraint(SpringLayout.NORTH, ls, 0, SpringLayout.SOUTH, ll); + ls.setOpaque(false); + sl_mainpage.putConstraint(SpringLayout.WEST, ls, 0, SpringLayout.WEST, mainpage); + sl_mainpage.putConstraint(SpringLayout.SOUTH, ls, 0, SpringLayout.SOUTH, mainpage); + sl_mainpage.putConstraint(SpringLayout.EAST, ls, 210, SpringLayout.WEST, mainpage); + lv=ls.getView(); + mainpage.add(ls); + mainpage.add(ll); + + JLabel rl=new JLabel(UIEnv.getRsb().getString("launchertask")); + rl.setOpaque(true); + rl.setFont(UIEnv.getFont()); + rl.setBackground(UIEnv.getHalfTransparentDefaultColor()); + rl.setHorizontalAlignment(SwingConstants.CENTER); + sl_mainpage.putConstraint(SpringLayout.NORTH, rl, 0, SpringLayout.NORTH, mainpage); + sl_mainpage.putConstraint(SpringLayout.WEST, rl, -210, SpringLayout.EAST, mainpage); + sl_mainpage.putConstraint(SpringLayout.SOUTH, rl, 20, SpringLayout.NORTH, mainpage); + sl_mainpage.putConstraint(SpringLayout.EAST, rl, 0, SpringLayout.EAST, mainpage); + YScrollPane rs=new YScrollPane(200,BorderLayout.EAST); + sl_mainpage.putConstraint(SpringLayout.NORTH, rs, 0, SpringLayout.SOUTH, rl); + rs.setOpaque(false); + sl_mainpage.putConstraint(SpringLayout.WEST, rs, -210, SpringLayout.EAST, mainpage); + sl_mainpage.putConstraint(SpringLayout.SOUTH, rs, 0, SpringLayout.SOUTH, mainpage); + sl_mainpage.putConstraint(SpringLayout.EAST, rs, 0, SpringLayout.EAST, mainpage); + rv=rs.getView(); + mainpage.add(rs); + mainpage.add(rl); + + + + setSize(1122, 640); + setLocationRelativeTo(null); + loadPicture(iniv.getProperty("back")); + repaint(); + } + public void loadPicture(String f){ + String s = "/assets/back"+new Random().nextInt(10)+".jpg"; + BufferedImage i; + File lp = null; + if(f!=null&&(!"".equals(f))&&(lp=new File(f)).exists()){ + + try { + i=ImageIO.read(lp); + BackgroundLabel bp= (BackgroundLabel) getContentPane(); + bp.setIconAutoFill(new ImageIcon(i)); + } catch (Exception e) { + e.printStackTrace(); + new CrashReport(this, true).report(e,UIEnv.getRsb().getString("loadbackgroundfailed")); + try { + i = ImageIO.read(MainWindow.class.getResourceAsStream(s)); + BackgroundLabel bp= (BackgroundLabel) getContentPane(); + bp.setIconAutoFill(new ImageIcon(i)); + } catch (IOException e2) { + e2.printStackTrace(); + } + } + }else{ + try { + i = ImageIO.read(MainWindow.class.getResourceAsStream(s)); + BackgroundLabel bp= (BackgroundLabel) getContentPane(); + bp.setIconAutoFill(new ImageIcon(i)); + } catch (IOException e2) { + e2.printStackTrace(); + } + } + /*if(clasdafperb!=null) + clasdafperb.componentResized(null);*/ + } +} diff --git a/src/org/knemcl/ui/MicrosoftAuthDialog.java b/src/org/knemcl/ui/MicrosoftAuthDialog.java new file mode 100644 index 0000000..731b1df --- /dev/null +++ b/src/org/knemcl/ui/MicrosoftAuthDialog.java @@ -0,0 +1,157 @@ +package org.knemcl.ui; + +import java.awt.Color; +import java.awt.Desktop; +import java.awt.Desktop.Action; +import java.awt.Toolkit; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; +import java.awt.Window; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.StringSelection; +import java.io.IOException; +import java.net.URI; +import java.util.Timer; +import java.util.TimerTask; +import java.util.function.Consumer; + +import javax.swing.JDialog; +import javax.swing.border.LineBorder; + +import org.kne.ui.XFrame; +import org.knemc.auth.AuthenticateCancelException; +import org.knemc.auth.AuthenticateException; +import org.knemc.auth.AuthenticateIOException; +import org.knemc.auth.MicrosoftAuth; +import org.knemc.auth.MinecraftAuthenticateException; +import org.knemc.auth.XBOXAuthenticateException; +import org.knemcl.main.CONST; +import org.knemcl.uitool.CrashReport; + +import javax.swing.JLabel; +import javax.swing.JOptionPane; + +import java.awt.BorderLayout; +import javax.swing.JTextArea; +import javax.swing.JTextField; +import javax.swing.JPanel; +import javax.swing.JButton; + +public class MicrosoftAuthDialog extends JDialog{ + private JTextField textField; + private Consumer con; + + private MicrosoftAuth math; + private Runnable authtask=new Runnable() { + + @Override + public void run() { + try { + math=new MicrosoftAuth((x)->{textField.setText(x);}); + con.accept(math); + } catch (AuthenticateIOException e) { + new CrashReport(MicrosoftAuthDialog.this, true).report(e,UIEnv.getRsb().getString("networkerror")); + }catch(XBOXAuthenticateException|MinecraftAuthenticateException e) { + JOptionPane.showMessageDialog(MicrosoftAuthDialog.this, UIEnv.getRsb().getString("pleasecheckaccount"), getTitle(), ABORT); + } catch (AuthenticateCancelException e) { + + } catch (AuthenticateException e) { + e.printStackTrace(); + }finally { + setVisible(false); + } + + } + }; + public MicrosoftAuthDialog(Window w) { + setResizable(false); + setIconImage(UIEnv.getIcon()); + //getTitlepanel().setBorder(new LineBorder(Color.LIGHT_GRAY)); + getContentPane().setBackground(Color.WHITE); + + JTextArea textArea = new JTextArea(); + textArea.setEditable(false); + textArea.setText(UIEnv.getRsb().getString("authmsainfo")); + textArea.setLineWrap(true); + getContentPane().add(textArea, BorderLayout.CENTER); + + JPanel panel = new JPanel(); + getContentPane().add(panel, BorderLayout.SOUTH); + panel.setLayout(new BorderLayout(0, 0)); + + textField = new JTextField(); + panel.add(textField, BorderLayout.CENTER); + textField.setColumns(10); + textField.setEditable(false); + JButton btnNewButton = new JButton(UIEnv.getRsb().getString("copy")); + UIEnv.defbut(btnNewButton); + btnNewButton.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + StringSelection ss=new StringSelection(textField.getText()); + Clipboard cb= Toolkit.getDefaultToolkit().getSystemClipboard(); + cb.setContents(ss,null); + } + }); + panel.add(btnNewButton, BorderLayout.EAST); + //setTitleColor(UIEnv.getDefaultTitleColor()); + //getTitlelabel().setFont(UIEnv.getFont().deriveFont(16.0f)); + setTitle(UIEnv.getRsb().getString("authmsa")); + setSize(400, 260); + setLocationRelativeTo(null); + addWindowListener(new WindowListener() { + + @Override + public void windowOpened(WindowEvent e2) { + + + + + } + + @Override + public void windowIconified(WindowEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void windowDeiconified(WindowEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void windowDeactivated(WindowEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void windowClosing(WindowEvent e) { + + } + + @Override + public void windowClosed(WindowEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void windowActivated(WindowEvent e) { + // TODO 自动生成的方法存根 + + } + }); + } + + public void showAuthDialog(Consumer con) { + this.con=con; + setVisible(true); + new Thread(authtask,"验证线程").start(); + } +} diff --git a/src/org/knemcl/ui/MinecraftServerAddressDialog.java b/src/org/knemcl/ui/MinecraftServerAddressDialog.java new file mode 100644 index 0000000..26efa01 --- /dev/null +++ b/src/org/knemcl/ui/MinecraftServerAddressDialog.java @@ -0,0 +1,106 @@ +package org.knemcl.ui; + +import java.awt.BorderLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.io.File; +import java.io.IOException; +import java.net.ConnectException; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import javax.imageio.ImageIO; +import javax.swing.JButton; +import javax.swing.JDialog; +import javax.swing.JOptionPane; +import javax.swing.JTextField; + +import org.kne.cloud.network.minecraft.MinecraftServerAddress; +import org.kne.cloud.network.minecraft.MinecraftServerPinger; +import org.knemcl.launch.ClientLaunchConfig; +import org.knemcl.launch.LaunchConfig; +import org.knemcl.main.CONST; +import org.knemcl.network.ServersNBTFile; +import org.knemcl.network.ServersNBTFile.ServerEntry; +import org.knemcl.uitool.CrashReport; + +public class MinecraftServerAddressDialog extends JDialog{ + + /** + * + */ + private static final long serialVersionUID = 1L; + private ClientLaunchConfigPanel clientLaunchConfigPanel; + private JTextField textField; + + public MinecraftServerAddressDialog(ClientLaunchConfigPanel clientLaunchConfigPanel) { + setResizable(false); + this.clientLaunchConfigPanel=clientLaunchConfigPanel; + setLocationRelativeTo(clientLaunchConfigPanel); + setTitle(UIEnv.getRsb().getString("loginserver")); + try { + setIconImage(ImageIO.read(MinecraftServerAddressDialog.class.getResourceAsStream("/assets/connect.png"))); + } catch (IOException e) { + e.printStackTrace(); + } + setSize(400, 70); + + textField = new JTextField(); + getContentPane().add(textField, BorderLayout.CENTER); + textField.setColumns(10); + JButton btnNewButton = new JButton(UIEnv.getRsb().getString("join")); + UIEnv.defbut(btnNewButton); + textField.addKeyListener(new KeyListener() { + + @Override + public void keyTyped(KeyEvent e) { + // System.out.println(e.getKeyChar()); + if(e.getKeyChar()=='\n') { + btnNewButton.doClick(); + } + } + + @Override + public void keyReleased(KeyEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void keyPressed(KeyEvent e) { + // TODO 自动生成的方法存根 + + } + }); + btnNewButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + if(textField.getText().equals("")) { + JOptionPane.showMessageDialog(MinecraftServerAddressDialog.this, UIEnv.getRsb().getString("nonull"), UIEnv.getRsb().getString("error"), JOptionPane.ERROR_MESSAGE); + return; + } + joinServer(textField.getText()); + } + }); + getContentPane().add(btnNewButton, BorderLayout.EAST); + } + public void joinServer(String mchostport) { + try { + MinecraftServerAddress msa=MinecraftServerAddress.findAddress(mchostport); + + ((ClientLaunchConfig)MinecraftServerAddressDialog.this.clientLaunchConfigPanel.getCfg()).createLaunchTask(clientLaunchConfigPanel.getClf().getManager(),msa).setIcon(clientLaunchConfigPanel.getImage()); + setVisible(false); + }catch(UnknownHostException ex) { + ex.printStackTrace(); + JOptionPane.showMessageDialog(MinecraftServerAddressDialog.this,UIEnv.getRsb().getString("unknownhost"), UIEnv.getRsb().getString("error"), JOptionPane.ERROR_MESSAGE); + }catch(ConnectException exc) { + exc.printStackTrace(); + JOptionPane.showMessageDialog(MinecraftServerAddressDialog.this,UIEnv.getRsb().getString("cantconnect"), UIEnv.getRsb().getString("error"), JOptionPane.ERROR_MESSAGE); + }catch (Exception ex) { + new CrashReport(MinecraftServerAddressDialog.this, true).report(ex, UIEnv.getRsb().getString("error")); + } + } +} diff --git a/src/org/knemcl/ui/NetworkPortEditFrame.java b/src/org/knemcl/ui/NetworkPortEditFrame.java new file mode 100644 index 0000000..6124277 --- /dev/null +++ b/src/org/knemcl/ui/NetworkPortEditFrame.java @@ -0,0 +1,95 @@ +package org.knemcl.ui; + +import javax.swing.JDialog; + +import org.knemcl.network.NetworkPort; +import org.knemcl.network.NetworkPortType; + +import javax.swing.JComboBox; +import java.awt.BorderLayout; +import java.awt.Font; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.function.Consumer; + +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.JPanel; +import javax.swing.JButton; + +public class NetworkPortEditFrame extends JDialog { + private JComboBox comboBox; + private JTextArea textArea; + private JPanel panel; + private JButton btnNewButton; + private JButton btnNewButton_1; + + private Consumer npc; + private NetworkPort np; + + public Consumer getNpc() { + return npc; + } + + public void setNpc(Consumer npc) { + this.npc = npc; + } + + public NetworkPortEditFrame() { + setModal(true); + setResizable(true); + setTitle(UIEnv.getRsb().getString("addfrpnode")); + setSize(500, 550); + setLocationRelativeTo(null); + setIconImage(UIEnv.getIcon()); + + comboBox = new JComboBox(); + comboBox.addItem(NetworkPortType.DEFAULT); + comboBox.addItem(NetworkPortType.FRP); + comboBox.addItem(NetworkPortType.DYNFRP); + comboBox.addItem(NetworkPortType.SCANONLY); + comboBox.setFont(new Font("微软雅黑", Font.PLAIN, 12)); + getContentPane().add(comboBox, BorderLayout.NORTH); + + JScrollPane scrollPane = new JScrollPane(); + getContentPane().add(scrollPane, BorderLayout.CENTER); + + textArea = new JTextArea(); + scrollPane.setViewportView(textArea); + + panel = new JPanel(); + getContentPane().add(panel, BorderLayout.SOUTH); + panel.setLayout(new BorderLayout(0, 0)); + + btnNewButton = new JButton(UIEnv.getRsb().getString("ok")); + btnNewButton.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + np.setData(textArea.getText()); + np.setType(comboBox.getSelectedIndex()); + npc.accept(np); + setVisible(false); + } + }); + UIEnv.defbut(btnNewButton); + panel.add(btnNewButton, BorderLayout.WEST); + + btnNewButton_1 = new JButton(UIEnv.getRsb().getString("cancel")); + btnNewButton_1.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + setVisible(false); + } + }); + UIEnv.defbut(btnNewButton_1); + panel.add(btnNewButton_1, BorderLayout.EAST); + } + + public void setNetworkPort(NetworkPort val) { + this.np=val; + comboBox.setSelectedIndex(val.getType()); + textArea.setText(val.getData()); + } +} \ No newline at end of file diff --git a/src/org/knemcl/ui/NetworkPortSelector.java b/src/org/knemcl/ui/NetworkPortSelector.java new file mode 100644 index 0000000..9d2b724 --- /dev/null +++ b/src/org/knemcl/ui/NetworkPortSelector.java @@ -0,0 +1,143 @@ +package org.knemcl.ui; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.function.Consumer; + +import javax.imageio.ImageIO; +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; + +import org.kne.cloud.network.SocketListener; +import org.kne.cloud.network.klalb.ui.KLALBStateGUI; +import org.kne.ui.XFrame; +import org.knemcl.network.NetworkPort; +import org.knemcl.network.RemoteRelay; +import org.knemcl.uitool.XDefaultListModel; + +public class NetworkPortSelector extends XFrame { + private JLabel lblNewLabel; + private JList list; + private XDefaultListModelxdlm=new XDefaultListModel<>(); + private RemoteRelay remr; + + private Consumercon; + + private NetworkPortShowDialog npsd=new NetworkPortShowDialog(this); + public Consumer getCon() { + return con; + } + public void setCon(Consumer con) { + this.con = con; + } + public NetworkPortSelector(RemoteRelay rr) { + this.remr=rr; + setResizable(false); + setAlwaysOnTop(true); + BufferedImage bi = null; + try { + bi = ImageIO.read(KLALBStateGUI.class.getResourceAsStream("/assets/KNEL.png")); + } catch (IOException e) { + e.printStackTrace(); + } + if(bi!=null) + setIconImage(bi); + setTitleColor(new Color(0,0,0,80)); + getContentPane().setBackground(new Color(0,0,0,80)); + + JScrollPane scrollPane = new JScrollPane(); + scrollPane.setOpaque(false); + scrollPane.getViewport().setOpaque(false); + getContentPane().add(scrollPane, BorderLayout.CENTER); + + list = new JList(xdlm); + list.setOpaque(false); + list.setForeground(Color.GREEN); + scrollPane.setViewportView(list); + + + lblNewLabel = new JLabel(); + lblNewLabel.setForeground(Color.WHITE); + getContentPane().add(lblNewLabel, BorderLayout.NORTH); + + JPanel panel = new JPanel(); + panel.setOpaque(false); + getContentPane().add(panel, BorderLayout.SOUTH); + panel.setLayout(new BorderLayout(0, 0)); + + JButton btnNewButton = new JButton(UIEnv.getRsb().getString("ok")); + panel.add(btnNewButton, BorderLayout.WEST); + UIEnv.defbut(btnNewButton); + btnNewButton.setContentAreaFilled(false); + btnNewButton.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + NetworkPort np=(NetworkPort) list.getSelectedValue(); + con.accept(np); + try { + npsd.showAddress(np.getAllRemoteAddress().get(0).toString()); + } catch (IOException e1) { + e1.printStackTrace(); + } + setVisible(false); + } + }); + + + list.addListSelectionListener(new ListSelectionListener() { + + @Override + public void valueChanged(ListSelectionEvent e) { + btnNewButton.setEnabled(!list.isSelectionEmpty()); + } + }); + btnNewButton.setEnabled(false); + + JButton btnNewButton_1 = new JButton(UIEnv.getRsb().getString("cancel")); + panel.add(btnNewButton_1, BorderLayout.EAST); + UIEnv.defbut(btnNewButton_1); + btnNewButton_1.setContentAreaFilled(false); + btnNewButton_1.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + setVisible(false); + } + }); + + + getTitlelabel().setForeground(Color.WHITE); + + setTitle(UIEnv.getRsb().getString("relayservertointernet")); + setSize(680, 430); + setLocationRelativeTo(null); + } + public void setOpeningPort(int port) { + lblNewLabel.setText( UIEnv.getRsb().getString("openingport")+port); + xdlm.removeAllElements(); + Map m=remr.getSocketListeners(); + synchronized (m) { + Set> s=m.entrySet(); + for (Iterator> iterator = s.iterator(); iterator.hasNext();) { + Entry entry = (Entry) iterator.next(); + if(entry.getValue().getCon()==null) { + xdlm.addElement(entry.getKey()); + } + } + } + } +} diff --git a/src/org/knemcl/ui/NetworkPortShowDialog.java b/src/org/knemcl/ui/NetworkPortShowDialog.java new file mode 100644 index 0000000..36c71a9 --- /dev/null +++ b/src/org/knemcl/ui/NetworkPortShowDialog.java @@ -0,0 +1,83 @@ +package org.knemcl.ui; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Toolkit; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.StringSelection; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.image.BufferedImage; +import java.io.IOException; + +import javax.imageio.ImageIO; +import javax.swing.JButton; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextField; + +import org.kne.cloud.network.klalb.ui.KLALBStateGUI; +import org.kne.cloud.network.klalb.ui.KLALBStateGUI2; +import org.kne.ui.XFrame; + +public class NetworkPortShowDialog extends XFrame { + private JTextField textField; + + public NetworkPortShowDialog(Component rr) { + setResizable(false); + setAlwaysOnTop(true); + BufferedImage bi = null; + try { + bi = ImageIO.read(KLALBStateGUI2.class.getResourceAsStream("/assets/KLALB.png")); + } catch (IOException e) { + e.printStackTrace(); + } + if(bi!=null) + setIconImage(bi); + setTitleColor(new Color(0,0,0,80)); + getContentPane().setBackground(new Color(0,0,0,80)); + + JScrollPane scrollPane = new JScrollPane(); + scrollPane.setOpaque(false); + scrollPane.getViewport().setOpaque(false); + getContentPane().setLayout(new BorderLayout(0, 0)); + getContentPane().add(scrollPane); + + + JPanel panel = new JPanel(); + panel.setOpaque(false); + getContentPane().add(panel); + panel.setLayout(new BorderLayout(0, 0)); + + textField = new JTextField(); + textField.setOpaque(false); + textField.setForeground(Color.GREEN); + panel.add(textField, BorderLayout.CENTER); + textField.setColumns(10); + textField.setFont(UIEnv.getFont().deriveFont(14.0f)); + JButton btnNewButton = new JButton(UIEnv.getRsb().getString("copy")); + UIEnv.defbut(btnNewButton); + btnNewButton.setContentAreaFilled(false); + panel.add(btnNewButton, BorderLayout.EAST); + btnNewButton.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + StringSelection ss=new StringSelection(textField.getText()); + Clipboard cb= Toolkit.getDefaultToolkit().getSystemClipboard(); + cb.setContents(ss,null); + } + }); + + getTitlelabel().setForeground(Color.WHITE); + + setTitle(UIEnv.getRsb().getString("yourserveraddr")); + setSize(400, 20); + setLocationRelativeTo(rr); + } + public void showAddress(String addr) { + setVisible( true); + textField.setText(addr); + } +} diff --git a/src/org/knemcl/ui/NetworkPortsListSettingItem.java b/src/org/knemcl/ui/NetworkPortsListSettingItem.java new file mode 100644 index 0000000..37e03b9 --- /dev/null +++ b/src/org/knemcl/ui/NetworkPortsListSettingItem.java @@ -0,0 +1,34 @@ +package org.knemcl.ui; + +import java.awt.Font; + +import org.knemcl.network.NetworkPort; +import org.knemcl.uitool.ListSettingItem; +import org.knemcl.uitool.XDefaultListModel; + +public class NetworkPortsListSettingItem extends ListSettingItem{ + private NetworkPortEditFrame np=new NetworkPortEditFrame(); + public NetworkPortsListSettingItem(String text, int w, int h, XDefaultListModel lm) { + super(text, w, h, lm); + } + + public NetworkPortsListSettingItem(String text, Font deriveFont, int w, int h, XDefaultListModel lm) { + super(text, deriveFont, w, h, lm); + } + { + np.setNpc((x)->{ + doAdd(x); + }); + } + @Override + protected void runEdit(NetworkPort val) { + np.setNetworkPort(val); + np.setVisible(true); + } + + @Override + protected NetworkPort createEmpty() { + return new NetworkPort(); + } + +} diff --git a/src/org/knemcl/ui/PathListSettingItem.java b/src/org/knemcl/ui/PathListSettingItem.java new file mode 100644 index 0000000..8bb44bd --- /dev/null +++ b/src/org/knemcl/ui/PathListSettingItem.java @@ -0,0 +1,51 @@ +package org.knemcl.ui; + +import java.awt.Font; +import java.awt.Window; +import java.io.File; +import java.util.function.Consumer; + + +import org.knemcl.launch.ClientLocation; +import org.knemcl.launch.EditablePath; +import org.knemcl.launch.JavaLocation; +import org.knemcl.uitool.ListSettingItem; +import org.knemcl.uitool.PathInput; +import org.knemcl.uitool.XDefaultListModel; + +public abstract class PathListSettingItem extends ListSettingItem { + private PathInput pit; + public PathInput getPit() { + return pit; + } + + public PathListSettingItem(String text, Font deriveFont, int w, int h, XDefaultListModel lm) { + super(text, deriveFont, w, h, lm); + } + + public PathListSettingItem(String text, int w, int h, XDefaultListModel lm) { + super(text, w, h, lm); + } + { + pit=new PathInput(null); + } + + @Override + protected void runEdit(T val) { + getPit().setIsdir(val.isDir()); + getPit().setCheckfile(val.checkExist()); + getPit().setAl((f)->{ + val.setPath(f); + doAdd(val); + }); + if(val.getPath()!=null) { + getPit().getTextField().setText(val.getPath().toString()); + }else { + getPit().getTextField().setText(""); + } + pit.setVisible(true); + } + + + +} diff --git a/src/org/knemcl/ui/ProcessingFrame.java b/src/org/knemcl/ui/ProcessingFrame.java new file mode 100644 index 0000000..34fdc8f --- /dev/null +++ b/src/org/knemcl/ui/ProcessingFrame.java @@ -0,0 +1,67 @@ +package org.knemcl.ui; + +import java.awt.Color; +import java.awt.Dialog.ModalExclusionType; +import java.awt.Font; +import java.awt.HeadlessException; +import java.awt.Toolkit; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JProgressBar; +import javax.swing.UIManager; +import javax.swing.WindowConstants; +import javax.swing.SwingConstants; +import javax.swing.plaf.ProgressBarUI; + +import org.kne.ui.XFrame; +import org.knemcl.uitool.KNEProgressBarUI; +import java.awt.BorderLayout; + +public class ProcessingFrame extends XFrame{ + + private JLabel j; + private JProgressBar bar; + static{ + UIManager.put("ProgressBar.selectionBackground",Color.BLACK); + UIManager.put("ProgressBar.selectionForeground",Color.BLACK); + } + public ProcessingFrame(String text) throws HeadlessException { + this("",text); + } + public void setText(String s){ + j.setText(s); + } + /** + * @wbp.parser.constructor + */ + public ProcessingFrame(String title,String text) throws HeadlessException { + setTitle(title); + getContentPane().setBackground(Color.WHITE); + setCursor(UIEnv.getCursor()); + setModalExclusionType(ModalExclusionType.APPLICATION_EXCLUDE); + setIconImage(UIEnv.getIcon()); + //setUndecorated(true); + setSize(400, 200); + getContentPane(). setBackground(new Color(255, 255,255 , 255)); + setLocationRelativeTo(null); + getContentPane().setLayout(new BorderLayout(0, 0)); + j = new JLabel(text); + j.setVerticalAlignment(SwingConstants.BOTTOM); + j.setBackground(Color.WHITE); + j.setHorizontalAlignment(SwingConstants.CENTER); + j.setForeground(Color.GRAY); + j.setFont(UIEnv.getFont().deriveFont(20f)); + getContentPane().add(j); + bar = new SyncJProgressBar(); + bar.setUI(new KNEProgressBarUI()); + bar.setForeground(UIEnv.getDefaultcolor());//new Color(129,209,243) + bar.setStringPainted(true); + bar.setBorder(null); + bar.setString(""); + getContentPane().add(bar, BorderLayout.SOUTH); + setResizable(false); + } + public JProgressBar getProgressBar(){ + return bar; + } +} diff --git a/src/org/knemcl/ui/ServerListItemPanel.java b/src/org/knemcl/ui/ServerListItemPanel.java new file mode 100644 index 0000000..c3973fe --- /dev/null +++ b/src/org/knemcl/ui/ServerListItemPanel.java @@ -0,0 +1,302 @@ +package org.knemcl.ui; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.GridLayout; +import java.awt.Image; +import java.awt.Toolkit; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.StringSelection; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.io.File; +import java.io.IOException; +import java.net.UnknownHostException; + +import javax.imageio.ImageIO; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JTextPane; +import javax.swing.SwingConstants; +import javax.swing.UIManager; +import javax.swing.text.BadLocationException; +import javax.swing.text.Document; +import javax.swing.text.SimpleAttributeSet; +import javax.swing.text.StyleConstants; + +import org.kne.cloud.network.MultipurposeSocketAddress; +import org.kne.cloud.network.minecraft.MinecraftServerAddress; +import org.kne.cloud.network.minecraft.MinecraftServerPinger; +import org.knemcl.launch.ClientLaunchConfig; +import org.knemcl.launch.LaunchConfig; +import org.knemcl.network.MinecraftChatText; +import org.knemcl.uitool.ConfigPanel; + +import com.github.steveice10.opennbt.NBTIO; +import com.github.steveice10.opennbt.tag.builtin.CompoundTag; +import com.github.steveice10.opennbt.tag.builtin.StringTag; + +public class ServerListItemPanel extends ListItemPanel { + + private volatile JTextPane centerTextPane; + private volatile Document doc; + private volatile SimpleAttributeSet abs2; + private volatile SimpleAttributeSet abs3; + private Image forceImage=null; + private JLabel jlb,jlbplys; + private MultipurposeSocketAddress mca; + private MinecraftServerPinger msp; + public ServerListItemPanel(ServerListPanel slp, MultipurposeSocketAddress mca, MinecraftServerPinger msp) { + super(slp); + this.mca=mca; + this.msp=msp; + + abs2 = new SimpleAttributeSet(); + StyleConstants.setForeground(abs2 ,Color.RED); + StyleConstants.setFontSize(abs2, 13); + StyleConstants.setFontFamily(abs2, "宋体"); + + abs3 = new SimpleAttributeSet(); + StyleConstants.setForeground(abs3 ,Color.DARK_GRAY); + StyleConstants.setFontSize(abs3, 13); + StyleConstants.setFontFamily(abs3, "宋体"); + + JTextPane centerTextPanex = new JTextPane(); + centerTextPanex.setPreferredSize(new Dimension(390,40)); + centerTextPanex.addMouseListener(new MouseListener() { + + @Override + public void mouseReleased(MouseEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void mousePressed(MouseEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void mouseExited(MouseEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void mouseEntered(MouseEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void mouseClicked(MouseEvent e) { + select(e); + if(e.getClickCount()>=2) { + join(mca,msp); + } + } + }); + centerTextPanex.setBorder(null); + //centerTextPanex.setFocusable(false); + centerTextPanex.setOpaque(false); + getContextPanel().add(centerTextPanex,BorderLayout.CENTER); + centerTextPanex.setEditable(false); + JPanel jlbp=new JPanel(); + jlbp.setOpaque(false); + jlb = new JLabel(); + jlb.setPreferredSize(new Dimension(100, 50)); + jlb.setHorizontalAlignment(SwingConstants.RIGHT); + + + jlbplys = new JLabel(); + jlbplys.setPreferredSize(new Dimension(100, 50)); + jlbplys.setHorizontalAlignment(SwingConstants.RIGHT); + jlbp.setLayout(new GridLayout(2,1)); + jlbp.add(jlb); + jlbp.add(jlbplys); + getContextPanel().add(jlbp,BorderLayout.EAST); + doc=centerTextPanex.getStyledDocument(); + centerTextPane=centerTextPanex; + + updateContent(); + + addMouseListener(new MouseListener() { + + @Override + public void mouseReleased(MouseEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void mousePressed(MouseEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void mouseExited(MouseEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void mouseEntered(MouseEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void mouseClicked(MouseEvent e) { + if(e.getClickCount()==2) { + join(mca,msp); + } + } + }); + } + + + public MinecraftServerPinger getMsp() { + return msp; + } + + + public void setMsp(MinecraftServerPinger msp) { + this.msp = msp; + } + + + public MultipurposeSocketAddress getMca() { + return mca; + } + + + @Override + protected void updateContent() { + forceImage=null; + while(doc==null) { + try { + Thread.sleep(10); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + try { + doc.remove(0, doc.getLength()); + } catch (BadLocationException e1) { + e1.printStackTrace(); + } + try { + MinecraftChatText mct=new MinecraftChatText(msp.getDescription(),msp.isOldDescription()); + try { + mct.insertToDocument(doc.getLength(), doc); + } catch (BadLocationException e) { + e.printStackTrace(); + } + forceImage=msp.getIcon(); + if(msp.getLatency()==-1) { + jlb.setText( "?ms"); + }else { + jlb.setText( msp.getLatency()/1000000L+"ms"); + } + if(msp.getKlalbversion()==null) { + jlb.setIcon(null); + }else { + jlb.setIcon(new ImageIcon( ImageIO.read(ClientLaunchConfig.class.getResourceAsStream("/assets/KNEL.png")).getScaledInstance(20, 20, Image.SCALE_SMOOTH))); + } + + jlbplys.setText(msp.getOnline()+"/"+msp.getMax()); + } catch (UnknownHostException e) { + try { + doc.insertString(doc.getLength(),UIEnv.getRsb().getString("unknownhost") , abs2); + } catch (BadLocationException e1) { + e1.printStackTrace(); + } + } catch (IOException e) { + try { + doc.insertString(doc.getLength(),UIEnv.getRsb().getString("cantconnect") , abs2); + } catch (BadLocationException e1) { + e1.printStackTrace(); + } + }/*catch(Exception e) { + try { + doc.insertString(doc.getLength(),UIEnv.getRsb().getString("unknownerror") , abs2); + } catch (BadLocationException e1) { + e1.printStackTrace(); + } + }*/ + super.updateContent(); + + + super.updateContent(); + } + + @Override + public String getSubTitle() { + String n=UIEnv.getRsb().getString("unknown"); + if(msp.getVersion()!=null){ + n=msp.getVersion(); + } + return n; + } + @Override + public Image getImage() { + if(forceImage!=null) { + return forceImage; + } + + try { + return ImageIO.read(LaunchConfig.class.getResourceAsStream("/assets/craft_table.png")); + } catch (IOException e) { + } + return null; + } + + @Override + public String getTitle() { + return mca.toString(); + } + + + + @Override + protected void installButtons() { + JButton jbt=new JButton(); + jbt.setToolTipText(UIEnv.getRsb().getString("joinserver")); + try { + jbt.setIcon(new ImageIcon(ImageIO.read(LaunchConfig.class.getResourceAsStream("/assets/connect.png")).getScaledInstance(dss.width-2, dss.height-2, Image.SCALE_SMOOTH))); + } catch (IOException e) { + e.printStackTrace(); + } + jbt.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + + join(mca,msp); + } + + + }); + jbt.setSize(dss); + jbt.setPreferredSize(dss); + getButtonPanel().add(jbt); + } + private void join(MultipurposeSocketAddress mca, MinecraftServerPinger msp) { + if(msp.getKlalbversion()==null) { + JOptionPane.showMessageDialog(this, UIEnv.getRsb().getString("connectwarning"), "", JOptionPane.WARNING_MESSAGE); + } + + Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); + StringSelection selection = new StringSelection(mca.toString()); + clipboard.setContents(selection, null); + JOptionPane.showMessageDialog(this, UIEnv.getRsb().getString("addresscopied"),"" , JOptionPane.INFORMATION_MESSAGE); + } +} diff --git a/src/org/knemcl/ui/ServerListPanel.java b/src/org/knemcl/ui/ServerListPanel.java new file mode 100644 index 0000000..cbd7468 --- /dev/null +++ b/src/org/knemcl/ui/ServerListPanel.java @@ -0,0 +1,431 @@ +package org.knemcl.ui; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.io.IOException; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map.Entry; +import java.util.Scanner; +import java.util.concurrent.locks.ReentrantLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; + +import javax.imageio.ImageIO; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JComboBox; +import javax.swing.JPanel; +import javax.swing.JProgressBar; +import javax.swing.JTextField; +import javax.swing.SwingConstants; +import javax.swing.UIManager; + +import org.kne.cloud.network.MultipurposeSocketAddress; +import org.kne.cloud.network.ThreadTool; +import org.kne.cloud.network.minecraft.MinecraftScanner; +import org.kne.cloud.network.minecraft.MinecraftServerPinger; +import org.kne.cloud.network.minecraft.MinecraftServerScanRange; +import org.kne.cloud.network.scanner.InetAddressRange; +import org.kne.cloud.network.scanner.PortRange; +import org.kne.cloud.network.scanner.ScanRange; +import org.knemcl.main.KNEManager; +import org.knemcl.network.LatencyAscendComparator; +import org.knemcl.network.LatencyDescendComparator; +import org.knemcl.network.NetworkPort; +import org.knemcl.network.PlayerAscendComparator; +import org.knemcl.network.PlayerDescendComparator; +import org.knemcl.network.SearchDescendComparator; +import org.knemcl.task.DownloadTask; +import org.knemcl.task.KNEMCLTask; +import org.knemcl.uitool.XDefaultListModel; + +public class ServerListPanel extends ListPanel { + private MinecraftScanner mcs = new MinecraftScanner(1000, 10000); + private float val; + private volatile long coltime = System.nanoTime(); + + private ReentrantLock uilock = new ReentrantLock(); + + private final Comparator playerAsc = new PlayerAscendComparator( + UIEnv.getRsb().getString("playercountasc")); + private final Comparator playerDesc = new PlayerDescendComparator( + UIEnv.getRsb().getString("playercountdesc")); + private final Comparator latencyAsc = new LatencyAscendComparator( + UIEnv.getRsb().getString("latencyasc")); + private final Comparator latencyDesc = new LatencyDescendComparator( + UIEnv.getRsb().getString("latencydesc")); + + private final SearchDescendComparator searchDesc=new SearchDescendComparator(UIEnv.getRsb().getString("sortbysearch")); + + + private long n=0; + + private JProgressBar jpgr; + public ServerListPanel(KNEManager kmr2) { + super(kmr2); + JTextField jtsearch = new JTextField(); + + jpgr = new JProgressBar(); + jpgr.setOpaque(false); + jpgr.setBackground(new Color(0, 0, 0, 0)); + jpgr.setPreferredSize(new Dimension(100, 15)); + jpgr.setStringPainted(true); + + JPanel jp = new JPanel(); + add(jp, BorderLayout.NORTH); + jp.setOpaque(false); + + JButton jbs = new JButton(); + UIEnv.defbut(jbs, 16); + + JComboBox> jcb = new JComboBox>(); + + jcb.addItem(playerAsc); + jcb.addItem(playerDesc); + jcb.addItem(latencyAsc); + jcb.addItem(latencyDesc); + jcb.addItem(searchDesc); + jcb.addItemListener(new ItemListener() { + + @Override + public void itemStateChanged(ItemEvent e) { + //resortUI((Comparator) jcb.getSelectedItem()); + ysp.getView().removeAll(); + LinkedHashMap smap = getManager().getSearchdata() + .getSearchData(); + for (Iterator> iterator = smap.entrySet() + .iterator(); iterator.hasNext();) { + Entry item = (Entry) iterator + .next(); + addListUI((Comparator) jcb.getSelectedItem(), item.getKey(), item.getValue()); + } + } + + }); + + jp.setLayout(new BorderLayout()); + jp.add(jbs, BorderLayout.EAST); + //jp.add(jpgr, BorderLayout.SOUTH); + jp.add(jcb, BorderLayout.WEST); + jp.add(jtsearch, BorderLayout.CENTER); + jbs.setText(UIEnv.getRsb().getString("search")); + + JPanel panel = new JPanel(); + jp.add(panel, BorderLayout.NORTH); + panel.setLayout(new BorderLayout(0, 0)); + panel.add(jpgr, BorderLayout.CENTER); + + JButton btnNewButton = new JButton(UIEnv.getRsb().getString("scan")); + btnNewButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + startScanning(); + } + }); + UIEnv.defbut(btnNewButton, 16); + panel.add(btnNewButton, BorderLayout.EAST); + jbs.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + searchDesc.setKeyword(jtsearch.getText()); + + jcb.setSelectedItem(searchDesc); + ysp.getView().removeAll(); + LinkedHashMap smap = getManager().getSearchdata() + .getSearchData(); + for (Iterator> iterator = smap.entrySet() + .iterator(); iterator.hasNext();) { + Entry item = (Entry) iterator + .next(); + addListUI((Comparator) jcb.getSelectedItem(), item.getKey(), item.getValue()); + } + } + }); + + + jtsearch.addKeyListener(new KeyListener() { + + @Override + public void keyTyped(KeyEvent e) { + + } + + @Override + public void keyReleased(KeyEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void keyPressed(KeyEvent e) { + if(e.getKeyCode()==KeyEvent.VK_ENTER) { + jbs.doClick(); + } + } + }); + + LinkedHashMap smap = getManager().getSearchdata() + .getSearchData(); + for (Iterator> iterator = smap.entrySet() + .iterator(); iterator.hasNext();) { + Entry item = (Entry) iterator + .next(); + addListUI((Comparator) jcb.getSelectedItem(), item.getKey(), item.getValue()); + } + + // try { + /* + * mcs.getAddressRanges().add(new InetAddressRange("1.0.0.0", "9.255.255.255")); + * + * mcs.getAddressRanges().add(new InetAddressRange("11.0.0.0", + * "100.63.255.255")); + * + * mcs.getAddressRanges().add(new InetAddressRange("100.128.0.0", + * "126.255.255.255")); + * + * mcs.getAddressRanges().add(new InetAddressRange("128.0.0.0", + * "169.253.255.255")); + * + * mcs.getAddressRanges().add(new InetAddressRange("169.255.0.0", + * "172.15.255.255")); + * + * mcs.getAddressRanges().add(new InetAddressRange("172.32.0.0", + * "191.255.255.255")); + * + * mcs.getAddressRanges().add(new InetAddressRange("192.0.1.0", "192.0.1.255")); + * + * mcs.getAddressRanges().add(new InetAddressRange("192.0.3.0", + * "192.88.98.255")); + * + * mcs.getAddressRanges().add(new InetAddressRange("192.88.100.0", + * "192.167.255.255")); + * + * mcs.getAddressRanges().add(new InetAddressRange("192.169.0.0", + * "198.17.255.255")); + * + * mcs.getAddressRanges().add(new InetAddressRange("198.20.0.0", + * "198.51.99.255")); + * + * mcs.getAddressRanges().add(new InetAddressRange("198.51.101.0", + * "203.0.112.255")); + * + * mcs.getAddressRanges().add(new InetAddressRange("203.0.114.0", + * "223.255.255.255")); + */ + // mcs.getAddressRanges().add(new InetAddressRange("frp.104300.xyz")); + // mcs.getAddressRanges().add(new InetAddressRange("cn-he-plc-2.ofalias.net")); + + /* + * } catch (UnknownHostException e1) { e1.printStackTrace(); } + */ + XDefaultListModel npsl = getManager().getRemoteRelay().getNetworkPorts(); + for (int i = 0; i < npsl.size(); i++) { + NetworkPort npi = npsl.get(i); + try { + if(npi.getType()==0||npi.getType()==1||npi.getType()==2) { + List msalist = npi.getAllRemoteAddress(); + for (Iterator iterator = msalist.iterator(); iterator.hasNext();) { + MultipurposeSocketAddress multipurposeSocketAddress = (MultipurposeSocketAddress) iterator.next(); + + mcs.getRanges().add(new ScanRange( new InetAddressRange(multipurposeSocketAddress.getHost()),new PortRange(1024, 65535))); + } + }else if(npi.getType()==3){ + String str=npi.getData(); + String[]sp=str.split("\n"); + for (int j = 0; j < sp.length; j++) { + mcs.getRanges().add(new MinecraftServerScanRange(sp[j])); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + // mcs.getPortRanges().add(new PortRange(25565)); + // mcs.getPortRanges().add(new PortRange(4000,5000)); + mcs.setMinecraftConsumer((mca, msp) -> { + + if (msp != null) { + System.out.println(msp); + n++; + getManager().getSearchdata().getSearchData().put(mca, msp); + getManager().writeSearchData(); + + removeListUI(mca); + addListUI((Comparator) jcb.getSelectedItem(), mca, msp); + } else { + getManager().getSearchdata().getSearchData().remove(mca); + removeListUI(mca); + } + }); + + + + } + +/* private void resortUI(Comparator comp) { + uilock.lock(); + try { + int count = ysp.getView().getComponentCount(); + List slip = new ArrayList<>(count); + for (int i = 0; i < count; i++) { + ServerListItemPanel sp = (ServerListItemPanel) ysp.getView().getComponent(0); + slip.add(sp); + ysp.getView().remove(0); + + } + for (Iterator iterator = slip.iterator(); iterator.hasNext();) { + ServerListItemPanel serverListItemPanel = (ServerListItemPanel) iterator.next(); + addListUI(comp, serverListItemPanel); + } + } finally { + uilock.unlock(); + } + }*/ + + private void removeListUI(MultipurposeSocketAddress mca) { + uilock.lock(); + try { + JPanel jp = ysp.getView(); + for (int i = 0; i < jp.getComponentCount(); i++) { + ServerListItemPanel sip = (ServerListItemPanel) jp.getComponent(i); + if (sip.getMca().equals(mca)) { + jp.remove(i); + i--; + } + } + } finally { + uilock.unlock(); + } + } + + private void addListUI(Comparator comp, MultipurposeSocketAddress mca, + MinecraftServerPinger msp) { + addListUI(comp, new ServerListItemPanel(this, mca, msp)); + } + + private void addListUI(Comparator comp, ServerListItemPanel slip) { + uilock.lock(); + try { + + JPanel jp = ysp.getView(); + for (int i = 0; i < jp.getComponentCount(); i++) { + ServerListItemPanel sip = (ServerListItemPanel) jp.getComponent(i); + if (comp.compare(sip.getMsp(), slip.getMsp()) > 0) { + if(getSelected()!=null&&slip.getMca().equals(getSelected().getMca())){ + setSelected(slip); + slip.doSelect(); + } + slip.setSelected((n)->{ + if(getSelected()!=null){ + getSelected().dounSelect(); + } + setSelected(slip); + //checkIsSelected(); + if(n.getClickCount()>=2){ + doubleClick(); + } + }); + jp.add(slip, i); + i++; + return; + } + } + + if(getSelected()!=null&&slip.getMca().equals(getSelected().getMca())){ + setSelected(slip); + slip.doSelect(); + } + slip.setSelected((n)->{ + if(getSelected()!=null){ + getSelected().dounSelect(); + } + setSelected(slip); + //checkIsSelected(); + if(n.getClickCount()>=2){ + doubleClick(); + } + }); + jp.add(slip); + // ysp.getView().add(new ServerListItemPanel(this,mca,msp)); + } finally { + uilock.unlock(); + } + } + + + public void setSelected(ServerListItemPanel selected) { + super.setSelected(selected); + } + + @Override + public ServerListItemPanel getSelected() { + return (ServerListItemPanel) super.getSelected(); + } + + public void startScanning() { +kmr.getTaskController().putTask(new KNEMCLTask(UIEnv.getRsb().getString("scaning")) { + + { + try { + setIcon(ImageIO.read(DownloadTask.class.getResource("/assets/s.png"))); + } catch (IOException e) { + e.printStackTrace(); + } + } + @Override + public void runTask() throws Throwable { + JProgressBar jProgressBar=getProgressBar(); + synchronized (jProgressBar) { + jProgressBar.setIndeterminate(false); + } + mcs.setProcessConsumer((f) -> { + val = f.floatValue(); + long ct = System.nanoTime(); + if (ct - coltime > 100000000L) { + coltime = ct; + jpgr.setValue((int) val); + jpgr.setString(Float.toString(val) + "%"); + synchronized (jProgressBar) { + jProgressBar.setValue((int) val); + jProgressBar.setString(Float.toString(val) + "%"); + } + } + }); + doscan(getProgressBar()); + } + }); + } + + protected void doscan(JProgressBar jProgressBar) { + n=0; + val = 0; + jpgr.setValue((int) val); + jpgr.setString(Float.toString(val) + "%"); + synchronized (jProgressBar) { + + jProgressBar.setValue((int) val); + jProgressBar.setString(Float.toString(val) + "%"); + } + mcs.run(); + jpgr.setValue((int) val); + jpgr.setString(Float.toString(val) + "%"); + synchronized (jProgressBar) { + jProgressBar.setValue((int) val); + jProgressBar.setString(Float.toString(val) + "%"); + System.out.println("Scaning done,"+n+" servers found."); + } + } + +} diff --git a/src/org/knemcl/ui/SyncJProgressBar.java b/src/org/knemcl/ui/SyncJProgressBar.java new file mode 100644 index 0000000..694eea8 --- /dev/null +++ b/src/org/knemcl/ui/SyncJProgressBar.java @@ -0,0 +1,75 @@ +package org.knemcl.ui; + +import java.awt.Graphics; + +import javax.accessibility.AccessibleContext; +import javax.swing.BoundedRangeModel; +import javax.swing.JProgressBar; +import javax.swing.event.ChangeListener; +import javax.swing.plaf.ProgressBarUI; + +public class SyncJProgressBar extends JProgressBar { + private Object lock; + private Object getLock(){ + if(lock==null) + lock=new Object(); + return lock; + } + + @Override + public void setOrientation(int newOrientation) { + synchronized (getLock()) { + super.setOrientation(newOrientation); + } + } + + + @Override + public void setStringPainted(boolean b) { + synchronized (getLock()) { + super.setStringPainted(b); + } + } + + + @Override + public void setString(String s) { + + synchronized (getLock()) { + super.setString(s); + } + } + + + @Override + public void setValue(int n) { + synchronized (getLock()) { + super.setValue(n); + } + } + + @Override + public void setMinimum(int n) { + synchronized (getLock()) { + super.setMinimum(n); + } + } + + @Override + public void setMaximum(int n) { + synchronized (getLock()) { + super.setMaximum(n); + } + } + + @Override + public void setIndeterminate(boolean newValue) { + synchronized (getLock()) { + super.setIndeterminate(newValue); + } + } + + + + +} diff --git a/src/org/knemcl/ui/UIEnv.java b/src/org/knemcl/ui/UIEnv.java new file mode 100644 index 0000000..8dc4c84 --- /dev/null +++ b/src/org/knemcl/ui/UIEnv.java @@ -0,0 +1,152 @@ +package org.knemcl.ui; + +import java.awt.Color; +import java.awt.Cursor; +import java.awt.Font; +import java.awt.FontFormatException; +import java.awt.Image; +import java.awt.Point; +import java.awt.Toolkit; +import java.awt.geom.AffineTransform; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Locale; +import java.util.PropertyResourceBundle; +import java.util.ResourceBundle; + +import javax.swing.JButton; +import javax.swing.JColorChooser; +import javax.swing.UIManager; +import javax.swing.UnsupportedLookAndFeelException; +import javax.swing.plaf.ColorChooserUI; +public class UIEnv { + private static Font font; + private static Image icon ; + private static Cursor cur; + private static Color defaultcolor=new Color(207,218,223);//new Color(207,218,223) + private static Color selectedcolor=new Color(207/2,218/2,223/2); + + private static ResourceBundle rsb; + public static void setRsb(String xrsb) throws IOException { + rsb=new PropertyResourceBundle(UIEnv.class.getResourceAsStream("/knemcl_"+xrsb+".properties")); + } + + public static void setRsb(ResourceBundle xrsb) { + rsb=xrsb; + } + public static ResourceBundle getRsb() { + if(rsb==null) { + try { + rsb=new PropertyResourceBundle(UIEnv.class.getResourceAsStream("/knemcl_en_US.properties")); + } catch (IOException e) { + e.printStackTrace(); + } + } + return rsb; + } + //private static Color tpccolor=new Color(250,250,250,190); + public static Color getDefaultcolor() { + return defaultcolor; + } + public static void setDefaultColor(Color defaultcolor) { + UIEnv.defaultcolor = defaultcolor; + } + public static Color getDefaultTitleColor() { + Color c=new Color(255, 255, 255, 250); + return c; + } + public static Color getHalfTransparentDefaultColor() { + return new Color(defaultcolor.getRed(), defaultcolor.getGreen(), defaultcolor.getBlue(), 210); + } + public static void inituie(){ + /*try { + UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); + } catch (ClassNotFoundException e) { + // TODO 自动生成的 catch 块 + e.printStackTrace(); + } catch (InstantiationException e) { + // TODO 自动生成的 catch 块 + e.printStackTrace(); + } catch (IllegalAccessException e) { + // TODO 自动生成的 catch 块 + e.printStackTrace(); + } catch (UnsupportedLookAndFeelException e) { + // TODO 自动生成的 catch 块 + e.printStackTrace(); + }*/ + font=new Font("微软雅黑",Font.PLAIN , 12); + /*try { + font = Font.createFont(Font.PLAIN, UIEnv.class.getResourceAsStream("/assets/SourceHanSansCN-Light.otf")).deriveFont(13f); + } catch (FontFormatException e1) { + e1.printStackTrace(); + } catch (IOException e1) { + // TODO 自动生成的 catch 块 + e1.printStackTrace(); + }*/ + + java.util.Enumeration keys = UIManager.getDefaults().keys(); + while (keys.hasMoreElements()) { + Object key = keys.nextElement(); + Object value = UIManager.get(key); + if (value instanceof javax.swing.plaf.FontUIResource) { + UIManager.put(key, font); + } + } + icon=Toolkit.getDefaultToolkit().getImage( + UIEnv.class.getResource("/assets/logo3.png")); + cur=Toolkit.getDefaultToolkit().createCustomCursor(Toolkit.getDefaultToolkit().getImage(UIEnv.class.getResource("/assets/diamond_sword.png")),new Point(0,0), ""); + } + public static void defbut(JButton start) { + if(font==null) + inituie(); + start.setBorderPainted(false); + start.setForeground(Color.WHITE); + start.setFont(font.deriveFont(Font.BOLD, 18)); + start.setBackground(defaultcolor); + } + public static void defbut(JButton start,int fontsize) { + if(font==null) + inituie(); + start.setBorderPainted(false); + start.setForeground(Color.WHITE); + start.setFont(font.deriveFont(Font.BOLD, fontsize)); + start.setBackground(defaultcolor); + } + public static Font getFont(){ + if(cur==null) + inituie(); + return font; + } + public static Image getIcon(){ + if(cur==null) + inituie(); + return icon; + } + public static Cursor getCursor(){ + if(cur==null) + inituie(); + return cur; + } + + public static Color getSelectedcolor() { + return selectedcolor; + } + public static void setSelectedcolor(Color selectedcolor) { + UIEnv.selectedcolor = selectedcolor; + } + /*public static Color getHalfTransparentColor() { + return tpccolor; + }*/ + private static List al; + public static List getLanguages() { + if(al==null) { + al=new ArrayList<>(); + al.add(new Language("en_US","English(US)")); + al.add(new Language("zh_CN","简体中文(中国)")); + } + return al; + + } +} diff --git a/src/org/knemcl/ui/UserEditConfigDialog.java b/src/org/knemcl/ui/UserEditConfigDialog.java new file mode 100644 index 0000000..50db050 --- /dev/null +++ b/src/org/knemcl/ui/UserEditConfigDialog.java @@ -0,0 +1,165 @@ +package org.knemcl.ui; + +import java.awt.Font; +import java.awt.Window; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.util.UUID; + +import javax.swing.JComboBox; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JTextField; + +import org.knemc.auth.Auth; +import org.knemc.auth.AuthType; +import org.knemc.auth.MicrosoftAuth; +import org.knemc.auth.OfflineAuth; +import org.knemc.auth.UserConfig; +import org.knemcl.launch.Config; +import org.knemcl.task.KNEMCLTask; +import org.knemcl.main.CONST; +import org.knemcl.main.KNEManager; +import org.knemcl.uitool.ComboSettingItem; +import org.knemcl.uitool.SettingItem; +import org.knemcl.uitool.TextButtonSettingItem; +import org.knemcl.uitool.TextSettingItem; + +public class UserEditConfigDialog extends EditConfigDialog { + private MicrosoftAuthDialog maf=new MicrosoftAuthDialog(this); + private Auth auth; + private JComboBoxathp; + private JTextField jtf; + private JTextField jtfid; + public UserEditConfigDialog(ConfigListPanel s, KNEManager manager2) { + super(s, manager2); + setTitle(UIEnv.getRsb().getString("edituser")); + + JPanel jp=ysp.getView(); + + SettingItem si=new SettingItem(UIEnv.getRsb().getString("basicsets"),UIEnv.getFont().deriveFont(20.0f).deriveFont(Font.BOLD),itemWidth,CONST.settingheight); + jp.add(si); + + TextButtonSettingItem usm=new TextButtonSettingItem(UIEnv.getRsb().getString("username"), itemWidth,CONST.settingheight); + usm.getButton().setText(UIEnv.getRsb().getString("authmsa")); + usm.getButton().setEnabled(false); + usm.getButton().addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + maf.showAuthDialog( (x)->{ + auth=x; + jtf.setText(auth.getUsername()); + athp.setSelectedItem(auth.getAuthType()); + UUID uid=auth.getUuid(); + if(uid==null) { + jtfid.setText(""); + }else { + jtfid.setText(uid.toString()); + } + }); + } + }); + ComboSettingItem csi=new ComboSettingItem(UIEnv.getRsb().getString("loginmode"), itemWidth,CONST.settingheight); + TextSettingItem uid=new TextSettingItem(UIEnv.getRsb().getString("uuid"), itemWidth,CONST.settingheight); + athp=csi.getComboBox(); + athp.addItem(AuthType.OFFLINE); + athp.addItem(AuthType.MICROSOFT); + athp.addItemListener(new ItemListener() { + + @Override + public void itemStateChanged(ItemEvent e) { + AuthType at= (AuthType) athp.getSelectedItem(); + if(at.equals(AuthType.MICROSOFT)) { + usm.getTextField().setEnabled(false); + usm.getTextField().setText(""); + uid.getTextField().setEnabled(false); + uid.getTextField().setText(""); + usm.getButton().setEnabled(true); + auth=null; + }else{ + usm.getTextField().setEnabled(true); + uid.getTextField().setEnabled(true); + usm.getButton().setEnabled(false); + auth=new OfflineAuth(); + } + } + }); + jp.add(csi); + + jtf=usm.getTextField(); + jp.add(usm); + + + SettingItem si1=new SettingItem(UIEnv.getRsb().getString("advancesets"),UIEnv.getFont().deriveFont(20.0f).deriveFont(Font.BOLD),itemWidth,CONST.settingheight); + jp.add(si1); + + jtfid=uid.getTextField(); + jp.add(uid); + } + + @Override + public void setConfig(Config config) { + super.setConfig(config); + UserConfig cfg=(UserConfig) config; + auth=cfg.getAuth(); + jtf.setText(auth.getUsername()); + athp.setSelectedItem(auth.getAuthType()); + UUID uid=auth.getUuid(); + if(uid==null) { + jtfid.setText(""); + }else { + jtfid.setText(uid.toString()); + } + } + + @Override + protected boolean checkManager() throws Exception { + + if(athp.getSelectedItem().equals(AuthType.MICROSOFT)) { + if(auth==null) { + JOptionPane.showMessageDialog(UserEditConfigDialog.this, UIEnv.getRsb().getString("pleaseauth"), UIEnv.getRsb().getString("error"), JOptionPane.ERROR_MESSAGE); + return false; + } + }else { + if("".equals(jtf.getText())){ + JOptionPane.showMessageDialog(UserEditConfigDialog.this, UIEnv.getRsb().getString("nonull"), UIEnv.getRsb().getString("error"), JOptionPane.ERROR_MESSAGE); + return false; + } + } + if(!jtfid.getText().equals("")) { + try { + UUID.fromString( jtfid.getText()); + }catch(RuntimeException e) { + JOptionPane.showMessageDialog(UserEditConfigDialog.this, UIEnv.getRsb().getString("uuidinputerror"), UIEnv.getRsb().getString("error"), JOptionPane.ERROR_MESSAGE); + return false; + } + } + /*if(getOldname()==null){ + if(getLd().checkName(jtf.getText())){ + JOptionPane.showMessageDialog(UserEditConfigDialog.this, CONST.exists, CONST.error, JOptionPane.ERROR_MESSAGE); + return false; + } + }else{ + if(getLd().checkNameWithout(jtf.getText(),getOldname())){ + JOptionPane.showMessageDialog(UserEditConfigDialog.this, CONST.exists, CONST.error, JOptionPane.ERROR_MESSAGE); + return false; + } + }*/ + return true; + } + + @Override + protected KNEMCLTask applyManager(Config config2) throws Exception { + auth.setUsername(jtf.getText()); + if(jtfid.getText().equals("")) { + auth.setUuid(null); + }else { + auth.setUuid(UUID.fromString( jtfid.getText())); + } + ((UserConfig)config2).setAuth(auth); + return null; + } + +} diff --git a/src/org/knemcl/ui/UserPanel.java b/src/org/knemcl/ui/UserPanel.java new file mode 100644 index 0000000..78cf43c --- /dev/null +++ b/src/org/knemcl/ui/UserPanel.java @@ -0,0 +1,121 @@ +package org.knemcl.ui; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.util.List; +import java.util.function.Supplier; + +import javax.swing.JButton; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import org.kne.util.FileUtil; +import org.knemc.auth.UserConfig; +import org.knemcl.launch.Config; +import org.knemcl.main.CONST; +import org.knemcl.main.KNEManager; +import org.knemcl.uitool.ConfigPanel; +import org.knemcl.uitool.UserConfigPanel; + +public class UserPanel extends ConfigListPanel { + + /*private JButton addbut; + private JButton delbut; + private JButton editbut; + private JButton checkbut;*/ + public UserPanel(Supplier> configdir, KNEManager kmr) { + super(configdir, kmr); + //setTitle(CONST.usermanage); + /*addbut = new JButton(); + addbut.setBounds(563, 344, 219, 46); + addbut.setText(CONST.adduser); + UIEnv.defbut(addbut,20); + add(addbut); + + checkbut = new JButton(); + checkbut.setEnabled(false); + checkbut.setBounds(563, 401, 219, 46); + checkbut.setText(CONST.checkuser); + UIEnv.defbut(checkbut,20); + add(checkbut); + + delbut = new JButton(); + delbut.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + int ret=JOptionPane.showConfirmDialog(UserFrame.this, CONST.removeuserconfrim, CONST.deleteconfirm, JOptionPane.YES_NO_OPTION); + if(ret==JOptionPane.YES_OPTION){ + deleteConfig( getSelectedConfig()); + loadConfigList(); + } + } + }); + delbut.setEnabled(false); + delbut.setText(CONST.removeuser); + delbut.setBounds(563, 515, 219, 46); + UIEnv.defbut(delbut,20); + add(delbut); + + + editbut = new JButton(); + editbut.setEnabled(false); + editbut.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + ecd.setConfig( getSelectedConfig()); + ecd.setVisible(true); + } + }); + editbut.setText(CONST.edituser); + editbut.setBounds(563, 458, 219, 46); + UIEnv.defbut(editbut,20); + add(editbut); + + addbut.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + ecd.setConfig(new UserConfig()); + ecd.setVisible(true); + } + });*/ + loadConfigList(); + } + public UserConfig getDefaultUser(){ + UserConfig def=null; + JPanel jpl=ysp.getView(); + for (int i = 0; i>"); + button.setHorizontalAlignment(SwingConstants.RIGHT); + button.setFont(button.getFont().deriveFont(Map.of(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON))); + getPanel().add(button, BorderLayout.EAST); + button.setBorder(null); + button.setOpaque(false); + button.setBackground(new Color(0,0,0,0)); + label.setForeground(Color.GRAY); + } + +} diff --git a/src/org/knemcl/uitool/CheckBoxSettingItem.java b/src/org/knemcl/uitool/CheckBoxSettingItem.java new file mode 100644 index 0000000..f482906 --- /dev/null +++ b/src/org/knemcl/uitool/CheckBoxSettingItem.java @@ -0,0 +1,37 @@ +package org.knemcl.uitool; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Font; + +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.SwingConstants; + +import org.knemcl.ui.UIEnv; +import org.knemcl.uitool.SettingItem; + +public class CheckBoxSettingItem extends SettingItem { +protected JCheckBox button; + + + public JCheckBox getCheckBox() { + return button; + } + public CheckBoxSettingItem(String text,int w,int h) { + this(text,UIEnv.getFont().deriveFont((float) 15.0),w,h); + } +/** + * @wbp.parser.constructor + */ + public CheckBoxSettingItem(String text, Font deriveFont,int w,int h) { + super(text,deriveFont,w,h); + button = new JCheckBox(); + button.setHorizontalAlignment(SwingConstants.RIGHT); + getPanel().add(button, BorderLayout.CENTER); + button.setBorder(null); + button.setOpaque(false); + button.setBackground(new Color(0,0,0,0)); + label.setForeground(Color.GRAY); + } +} diff --git a/src/org/knemcl/uitool/ComboSettingItem.java b/src/org/knemcl/uitool/ComboSettingItem.java new file mode 100644 index 0000000..8f45d5f --- /dev/null +++ b/src/org/knemcl/uitool/ComboSettingItem.java @@ -0,0 +1,33 @@ +package org.knemcl.uitool; + +import java.awt.Color; +import java.awt.Font; +import javax.swing.JTextField; +import java.awt.BorderLayout; +import javax.swing.SwingConstants; +import org.knemcl.ui.UIEnv; +import javax.swing.JComboBox; + +public class ComboSettingItem extends SettingItem { + + + private JComboBox comboBox; + public JComboBox getComboBox() { + return comboBox; + } + public ComboSettingItem(String text,int w,int h) { + this(text,UIEnv.getFont().deriveFont((float) 15.0),w, h); + } + /** + * @wbp.parser.constructor + */ + public ComboSettingItem(String text, Font deriveFont,int w,int h) { + super(text,deriveFont,w,h); + label.setForeground(Color.GRAY); + + comboBox = new JComboBox(); + comboBox.setOpaque(false); + getPanel().add(comboBox, BorderLayout.CENTER); + } + +} diff --git a/src/org/knemcl/uitool/ConfigPanel.java b/src/org/knemcl/uitool/ConfigPanel.java new file mode 100644 index 0000000..5169915 --- /dev/null +++ b/src/org/knemcl/uitool/ConfigPanel.java @@ -0,0 +1,116 @@ +package org.knemcl.uitool; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Image; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.io.IOException; +import java.util.function.Consumer; + +import javax.imageio.ImageIO; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JRootPane; +import javax.swing.SwingConstants; +import javax.swing.border.LineBorder; +import org.knemcl.launch.Config; +import org.knemcl.launch.LaunchConfig; +import org.knemcl.main.CONST; +import org.knemcl.ui.ConfigListPanel; +import org.knemcl.ui.LaunchPanel; +import org.knemcl.ui.ListItemPanel; +import org.knemcl.ui.UIEnv; +import java.awt.FlowLayout; + +public class ConfigPanel extends ListItemPanel { + + + private Config cfg; + public ConfigListPanel getClf() { + return (ConfigListPanel) super.getLf(); +} + + public Config getCfg() { + return cfg; + } + + + public Image getImage(){ + return null; + } + public String getTitle(){ + return getCfg().getName(); + } + public String getSubTitle(){ + return ""; + } + + + /*public ConfigPanel() { + + }*/ + + + + protected void installButtons() { + JButton jbt2=new JButton(); + jbt2.setToolTipText(UIEnv.getRsb().getString("deleteconfig") ); + try { + jbt2.setIcon(new ImageIcon(ImageIO .read(LaunchConfig.class.getResourceAsStream("/assets/delete-bin-fill.png")).getScaledInstance(dss.width-2, dss.height-2, Image.SCALE_SMOOTH))); + } catch (IOException e) { + e.printStackTrace(); + } + jbt2.setSize(dss); + jbt2.setPreferredSize(dss); + jbt2.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + int ret=JOptionPane.showConfirmDialog(ConfigPanel.this, UIEnv.getRsb().getString("deleteconfigconfirm") ,UIEnv.getRsb().getString("deleteconfirm") , JOptionPane.YES_NO_OPTION); + if(ret==JOptionPane.YES_OPTION){ + getClf().deleteConfig( ConfigPanel.this.cfg); + getClf().loadConfigList(); + } + + } + }); + getButtonPanel().add(jbt2); + + JButton jbt1=new JButton(); + jbt1.setToolTipText(UIEnv.getRsb().getString("editconfig") ); + try { + jbt1.setIcon(new ImageIcon(ImageIO .read(LaunchConfig.class.getResourceAsStream("/assets/edit-fill.png")).getScaledInstance(dss.width-2, dss.height-2, Image.SCALE_SMOOTH))); + } catch (IOException e) { + e.printStackTrace(); + } + jbt1.setSize(dss); + jbt1.setPreferredSize(dss); + jbt1.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + getClf().getEcd().setConfig( ConfigPanel.this.cfg); + getClf().getEcd().setVisible(true); + + } + }); + getButtonPanel().add(jbt1); + } + + public ConfigPanel(Config lcfg,ConfigListPanel clf) { + super(clf); + this.cfg=lcfg; + updateContent(); + } + + +} diff --git a/src/org/knemcl/uitool/CrashReport.java b/src/org/knemcl/uitool/CrashReport.java new file mode 100644 index 0000000..e169215 --- /dev/null +++ b/src/org/knemcl/uitool/CrashReport.java @@ -0,0 +1,84 @@ +package org.knemcl.uitool; + +import javax.swing.JDialog; +import javax.swing.JFrame; +import java.awt.Dimension; +import java.awt.TextArea; +import java.awt.BorderLayout; +import java.awt.Panel; +import java.awt.Window; +import javax.swing.JLabel; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.SwingConstants; +import javax.swing.ImageIcon; +import org.knemcl.ui.UIEnv; +import java.awt.Label; +import java.awt.Color; +import java.awt.Font; +import java.awt.TextField; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.Random; + +public class CrashReport extends JDialog{ + private JLabel name; + private TextField type; + private JTextArea stack; + public CrashReport(Window parent ,boolean modal) { + super(parent); + setModal(modal); + setTitle("错误"); + setIconImage(UIEnv.getIcon()); + setSize(500, 400); + setLocationRelativeTo(null); + stack = new JTextArea(); + stack.setEditable(false); + getContentPane().add(new JScrollPane(stack), BorderLayout.CENTER); + + Panel panel = new Panel(); + panel.setPreferredSize(new Dimension(500, 100)); + getContentPane().add(panel, BorderLayout.NORTH); + panel.setLayout(null); + + JLabel lblNewLabel = new JLabel(""); + lblNewLabel.setIcon(new ImageIcon(CrashReport.class.getResource("/assets/error.jpg"))); + lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER); + lblNewLabel.setBounds(10, 10, 80, 80); + panel.add(lblNewLabel); + + name = new JLabel(""); + name.setFont(new Font("宋体", Font.PLAIN, 30)); + name.setForeground(Color.RED); + name.setBounds(96, 10, 378, 33); + panel.add(name); + + type = new TextField(); + type.setEditable(false); + type.setBounds(96, 67, 378, 23); + panel.add(type); + + fny = new JLabel("...?"); + fny.setFont(new Font("MS Song", Font.PLAIN, 10)); + getContentPane().add(fny, BorderLayout.SOUTH); + } + String []s=new String[]{"鎴戜滑鍥㈤槦鍙湁涓�涓▼搴忓憳", + "鎯虫洿鏂帮紝娌¢棬", + "鎴戜滑鐨勬湇鍔″櫒鐪熺殑鏄笓涓氣�滃埌瀹垛�濅簡", + "杩炴帴宸蹭涪澶憋細涓嶅幓鍋氬惎鍔ㄥ櫒灏卞幓濂宠锛屼笉鍘诲コ瑁呭氨鍘诲仛鍚姩鍣�", + "鍦熻眴鏈嶅姟鍣ㄥ張鍙戣娊浜�" + }; + private JLabel fny; + public void report(Throwable e,String t){ + e.printStackTrace(); + name.setText(t); + type.setText(e.getClass().getName()); + StringWriter sw=new StringWriter(); + PrintWriter pw=new PrintWriter(sw); + e.printStackTrace(pw); + pw.close(); + stack.setText(sw.toString());fny.setText(s[new Random().nextInt(s.length)]); + setVisible(true); + + } +} diff --git a/src/org/knemcl/uitool/KNEProgressBarUI.java b/src/org/knemcl/uitool/KNEProgressBarUI.java new file mode 100644 index 0000000..17ce1d5 --- /dev/null +++ b/src/org/knemcl/uitool/KNEProgressBarUI.java @@ -0,0 +1,78 @@ +/* + * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ + +package org.knemcl.uitool; + +import javax.swing.*; +import javax.swing.plaf.*; +import javax.swing.plaf.basic.*; +import java.awt.*; + +/** + * The Metal implementation of ProgressBarUI. + *

+ * Warning: + * Serialized objects of this class will not be compatible with + * future Swing releases. The current serialization support is + * appropriate for short term storage or RMI between applications running + * the same version of Swing. As of 1.4, support for long term storage + * of all JavaBeans™ + * has been added to the java.beans package. + * Please see {@link java.beans.XMLEncoder}. + * + * @author Michael C. Albers + */ +public class KNEProgressBarUI extends BasicProgressBarUI { + + // private Rectangle innards; + // private Rectangle box; + + public static ComponentUI createUI(JComponent c) { + return new KNEProgressBarUI(); + } + + /** + * Draws a bit of special highlighting on the progress bar. + * The core painting is deferred to the BasicProgressBar's + * paintDeterminate method. + * @since 1.4 + */ + public void paintDeterminate(Graphics g, JComponent c) { + super.paintDeterminate(g,c); + + + } + + /** + * Draws a bit of special highlighting on the progress bar + * and bouncing box. + * The core painting is deferred to the BasicProgressBar's + * paintIndeterminate method. + * @since 1.4 + */ + public void paintIndeterminate(Graphics g, JComponent c) { + super.paintIndeterminate(g, c); + } +} diff --git a/src/org/knemcl/uitool/LaunchConfigPanel.java b/src/org/knemcl/uitool/LaunchConfigPanel.java new file mode 100644 index 0000000..a5e177b --- /dev/null +++ b/src/org/knemcl/uitool/LaunchConfigPanel.java @@ -0,0 +1,162 @@ +package org.knemcl.uitool; + +import java.awt.Desktop; +import java.awt.Image; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.io.File; +import java.io.IOException; + +import javax.imageio.ImageIO; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JOptionPane; + +import org.knemcl.launch.ClientLaunchConfig; +import org.knemcl.launch.Config; +import org.knemcl.launch.LaunchConfig; +import org.knemcl.main.CONST; +import org.knemcl.ui.ConfigListPanel; +import org.knemcl.ui.UIEnv; + +public abstract class LaunchConfigPanel extends ConfigPanel { + + public LaunchConfigPanel(LaunchConfig lcfg,ConfigListPanel clf) { + super(lcfg,clf); + + } + @Override + public Image getImage() { + try { + return ImageIO.read(LaunchConfig.class.getResourceAsStream("/assets/craft_table.png")); + } catch (IOException e) { + } + return null; + } + + @Override + protected void installButtons() { + +JButton jbt3x=new JButton(); +jbt3x.setToolTipText(UIEnv.getRsb().getString("checkconfig")); +try { + jbt3x.setIcon(new ImageIcon(ImageIO .read(LaunchConfig.class.getResourceAsStream("/assets/check.png")).getScaledInstance(dss.width-2, dss.height-2, Image.SCALE_SMOOTH))); +} catch (IOException e) { + e.printStackTrace(); +} +jbt3x.setSize(dss); +jbt3x.setPreferredSize(dss); +jbt3x.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + check(); + } +}); + +getButtonPanel().add(jbt3x); + JButton jbt3=new JButton(); + jbt3.setToolTipText( UIEnv.getRsb().getString("openinstalldir") ); + try { + jbt3.setIcon(new ImageIcon(ImageIO .read(LaunchConfig.class.getResourceAsStream("/assets/folder-2-fill.png")).getScaledInstance(dss.width-2, dss.height-2, Image.SCALE_SMOOTH))); + } catch (IOException e) { + e.printStackTrace(); + } + jbt3.setSize(dss); + jbt3.setPreferredSize(dss); + jbt3.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + Config lcfg= getCfg(); + if(lcfg instanceof ClientLaunchConfig) { + ClientLaunchConfig clf=(ClientLaunchConfig) lcfg; + File f=clf.getVersionInstalled().getLocation().getDotmc(); + if(f!=null) { + if(f.exists()) { + if(Desktop.isDesktopSupported()) { + Desktop dkt=Desktop.getDesktop(); + try { + dkt.open(f); + } catch (IOException e1) { + e1.printStackTrace(); + } + } + }else { + JOptionPane.showMessageDialog(LaunchConfigPanel.this, UIEnv.getRsb().getString("dirnotexist"), UIEnv.getRsb().getString("error"), JOptionPane.ERROR_MESSAGE); + } + } + } + } + }); + getButtonPanel().add(jbt3); + + + + super.installButtons(); + installNetworkButtons(); + + + JButton jbt=new JButton(); + jbt.setToolTipText(UIEnv.getRsb().getString("launchclient")); + try { + jbt.setIcon(new ImageIcon(ImageIO.read(LaunchConfig.class.getResourceAsStream("/assets/start.png")))); + } catch (IOException e) { + e.printStackTrace(); + } + jbt.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + launch(); + } + }); + jbt.setSize(dss); + jbt.setPreferredSize(dss); + getButtonPanel().add(jbt); + + addMouseListener(new MouseListener() { + + @Override + public void mouseReleased(MouseEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void mousePressed(MouseEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void mouseExited(MouseEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void mouseEntered(MouseEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void mouseClicked(MouseEvent e) { + if(e.getClickCount()>=2) { + launch(); + } + } + }); + } + + protected void installNetworkButtons() { + + } + + protected abstract void check(); + + public abstract void launch(); +} diff --git a/src/org/knemcl/uitool/ListSettingItem.java b/src/org/knemcl/uitool/ListSettingItem.java new file mode 100644 index 0000000..6c8877c --- /dev/null +++ b/src/org/knemcl/uitool/ListSettingItem.java @@ -0,0 +1,154 @@ +package org.knemcl.uitool; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Image; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.IOException; +import java.util.function.Consumer; +import java.util.function.Supplier; + +import javax.imageio.ImageIO; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.JTextField; +import javax.swing.ListModel; + +import java.awt.BorderLayout; +import javax.swing.SwingConstants; + +import org.knemcl.launch.JavaLocation; +import org.knemcl.launch.LaunchConfig; +import org.knemcl.main.CONST; +import org.knemcl.ui.UIEnv; +import java.awt.FlowLayout; + +public abstract class ListSettingItem extends SettingItem { + /** + * + */ + private static final long serialVersionUID = 1L; + + protected JList list; + + private Consumer storeRecall; + public JList getList() { + return list; + } + public ListSettingItem(String text,int w,int h,XDefaultListModellm) { + this(text,UIEnv.getFont().deriveFont((float) 15.0),w,h,lm); + } +/** + * @wbp.parser.constructor + */ + public ListSettingItem(String text, Font deriveFont,int w,int h,XDefaultListModel lm) { + super(text,deriveFont,w,h); + list = new JList(lm); + JScrollPane js=new JScrollPane(list); + js.getViewport().setOpaque(false); + js.setOpaque(false); + js.setBackground(new Color(0,0,0,0)); + getPanel().add(js, BorderLayout.CENTER); + list.setBorder(null); + list.setOpaque(false); + list.setBackground(new Color(0,0,0,0)); + label.setForeground(Color.GRAY); + + Dimension dss=new Dimension(25,25); + JButton jbt3x=new JButton(); + jbt3x.setToolTipText(UIEnv.getRsb().getString("add")); + try { + jbt3x.setIcon(new ImageIcon(ImageIO .read(LaunchConfig.class.getResourceAsStream("/assets/add.png")).getScaledInstance(dss.width-2, dss.height-2, Image.SCALE_SMOOTH))); + } catch (IOException e) { + e.printStackTrace(); + } + jbt3x.setSize(dss); + jbt3x.setPreferredSize(dss); + jbt3x.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + T x=createEmpty(); + runEdit(x); + } + }); + JButton jbedit=new JButton(); + jbedit.setToolTipText(UIEnv.getRsb().getString("edit")); + try { + jbedit.setIcon(new ImageIcon(ImageIO .read(LaunchConfig.class.getResourceAsStream("/assets/edit-fill.png")).getScaledInstance(dss.width-2, dss.height-2, Image.SCALE_SMOOTH))); + } catch (IOException e) { + e.printStackTrace(); + } + jbedit.setSize(dss); + jbedit.setPreferredSize(dss); + jbedit.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + T val=list.getSelectedValue(); + if(val!=null) + runEdit(val); + } + }); + + JButton jbt4x=new JButton(); + jbt4x.setToolTipText(UIEnv.getRsb().getString("remove")); + try { + jbt4x.setIcon(new ImageIcon(ImageIO .read(LaunchConfig.class.getResourceAsStream("/assets/delete-bin-fill.png")).getScaledInstance(dss.width-2, dss.height-2, Image.SCALE_SMOOTH))); + } catch (IOException e) { + e.printStackTrace(); + } + jbt4x.setSize(dss); + jbt4x.setPreferredSize(dss); + jbt4x.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + int v=list.getSelectedIndex(); + if(v>=0) { + lm.remove(v); + if(storeRecall!=null) + storeRecall.accept(list.getSelectedValue()); + } + } + }); + JPanel jp=new JPanel(); + jp.setPreferredSize(new Dimension(30, h)); + FlowLayout flowLayout = (FlowLayout) jp.getLayout(); + flowLayout.setAlignment(FlowLayout.TRAILING); + jp.setOpaque(false); + getPanel().add(jp,BorderLayout.EAST); + jp.add(jbt3x); + jp.add(jbedit); + jp.add(jbt4x); + } + abstract protected void runEdit(T val) ; +abstract protected T createEmpty() ; +public void doAdd(T v) { + boolean b=true; + for (int i = 0; i < list.getModel().getSize(); i++) { + if(list.getModel().getElementAt(i)==v) { + b=false; + break; + } + } + if(b) + ((XDefaultListModel) list.getModel()).addElement(v); + repaint(); + if(storeRecall!=null) + storeRecall.accept(list.getSelectedValue()); +} +public Consumer getStoreRecall() { + return storeRecall; +} +public void setStoreRecall(Consumer storeRecall) { + this.storeRecall = storeRecall; +} + +} diff --git a/src/org/knemcl/uitool/PathInput.java b/src/org/knemcl/uitool/PathInput.java new file mode 100644 index 0000000..e81e8ca --- /dev/null +++ b/src/org/knemcl/uitool/PathInput.java @@ -0,0 +1,134 @@ +package org.knemcl.uitool; + +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.io.IOException; +import java.util.function.Consumer; +import java.util.function.Supplier; +import javax.swing.*; + +import org.knemcl.ui.UIEnv; + +public class PathInput extends JDialog { + private JTextField textField; + private boolean checkfile=true; + private boolean isdir=false; + protected JFileChooser jfc; + private Consumer al; + public Consumer getAl() { + return al; + } + + public void setAl(Consumer al) { + this.al = al; + } + + public PathInput(Window d){ + super(d); + setResizable(false); + setModal(true); + setSize(500, 110); + setLocationRelativeTo(d); + + setIconImage(UIEnv.getIcon()); + + textField = new JTextField(); + textField.setPreferredSize(new Dimension(400,80)); + textField.setFont(new Font("微软雅黑", Font.PLAIN, 12)); + getContentPane().add(textField, BorderLayout.CENTER); + textField.setColumns(10); + + JPanel panel = new JPanel(); + getContentPane().add(panel, BorderLayout.SOUTH); + + JButton btnok = new JButton(UIEnv.getRsb().getString("ok")); + UIEnv.defbut(btnok); + panel.add(btnok); + btnok.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + File x=new File(textField.getText()); + if(!checkfile){ + if(isdir){ + x.mkdirs(); + }else{ + try { + x.createNewFile(); + } catch (IOException e1) { + e1.printStackTrace(); + } + } + al.accept(x); + setVisible(false); + return; + } + if(x.exists()){ + al.accept(x); + setVisible(false); + }else{ + JOptionPane.showMessageDialog(PathInput.this, UIEnv.getRsb().getString("filenotexist"), UIEnv.getRsb().getString("error"), JOptionPane.ERROR_MESSAGE); + } + } + }); + JButton btnNewButton_1 = new JButton(UIEnv.getRsb().getString("browse")); + UIEnv.defbut(btnNewButton_1); + panel.add(btnNewButton_1); + btnNewButton_1.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + if(jfc.showOpenDialog(PathInput.this)==jfc.APPROVE_OPTION){ + textField.setText(jfc.getSelectedFile().toString()); + } + /*File f=choose.get(); + if(f!=null){ + textField.setText(f.toString()); + }*/ + } + }); + JButton button = new JButton(UIEnv.getRsb().getString("cancel")); + UIEnv.defbut(button); + panel.add(button); + button.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + setVisible(false); + } + }); + + + jfc=new JFileChooser(); + jfc.setMultiSelectionEnabled(false); + } + + + public JTextField getTextField() { + return textField; + } + + public JFileChooser getJfc() { + return jfc; + } + + public boolean isCheckfile() { + return checkfile; + } + public void setCheckfile(boolean checkfile) { + this.checkfile = checkfile; + } + public boolean isIsdir() { + return isdir; + } + public void setIsdir(boolean isdir) { + this.isdir = isdir; + if(isdir) { + jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + }else { + jfc.setFileSelectionMode(JFileChooser.FILES_ONLY); + } + } +} diff --git a/src/org/knemcl/uitool/ProgressListPanel.java b/src/org/knemcl/uitool/ProgressListPanel.java new file mode 100644 index 0000000..1202542 --- /dev/null +++ b/src/org/knemcl/uitool/ProgressListPanel.java @@ -0,0 +1,81 @@ +package org.knemcl.uitool; + +import javax.swing.JPanel; +import java.awt.*; + +import javax.swing.Icon; +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.SpringLayout; +import org.knemcl.main.CONST; +import org.knemcl.ui.SyncJProgressBar; +import org.knemcl.ui.UIEnv; +import javax.swing.border.LineBorder; +import javax.swing.SwingConstants; +import javax.swing.JProgressBar; + +public class ProgressListPanel extends JPanel { + private JPanel panel; + private JLabel iconLabel; + private JLabel nameLabel; + protected JProgressBar progressBar; + + public JLabel getIconLabel() { + return iconLabel; + } + + public JLabel getNameLabel() { + return nameLabel; + } + public JProgressBar getProgressBar() { + return progressBar; + } + + public void setIcon(Icon icon){ + iconLabel.setIcon(icon); + } + public void setIcon(Image icon){ + iconLabel.setIcon(new ImageIcon(icon.getScaledInstance(48, 48, Image.SCALE_SMOOTH))); + } + public Icon getIcon() { + return iconLabel.getIcon(); + } + public ProgressListPanel(String name) { + setBorder(new LineBorder(new Color(0, 0, 0))); + setSize(185,50); + setPreferredSize(getSize()); + setLayout(new BorderLayout(0, 0)); + setBackground(UIEnv.getHalfTransparentDefaultColor()); + iconLabel = new JLabel(); + iconLabel.setHorizontalAlignment(SwingConstants.CENTER); + iconLabel.setPreferredSize(new Dimension(48,48)); + add(iconLabel, BorderLayout.WEST); + + panel = new JPanel(); + panel.setOpaque(false); + add(panel, BorderLayout.CENTER); + SpringLayout sl_panel = new SpringLayout(); + panel.setLayout(sl_panel); + + nameLabel = new JLabel(name); + sl_panel.putConstraint(SpringLayout.NORTH, nameLabel, 0, SpringLayout.NORTH, panel); + sl_panel.putConstraint(SpringLayout.SOUTH, nameLabel, 28, SpringLayout.NORTH, panel); + nameLabel.setHorizontalAlignment(SwingConstants.CENTER); + sl_panel.putConstraint(SpringLayout.WEST, nameLabel, 0, SpringLayout.WEST, panel); + sl_panel.putConstraint(SpringLayout.EAST, nameLabel, 0, SpringLayout.EAST, panel); + nameLabel.setFont(UIEnv.getFont().deriveFont(16.0f)); + panel.add(nameLabel); + + progressBar = new SyncJProgressBar(); + sl_panel.putConstraint(SpringLayout.WEST, progressBar, 2, SpringLayout.WEST, panel); + sl_panel.putConstraint(SpringLayout.SOUTH, progressBar, -4, SpringLayout.SOUTH, panel); + sl_panel.putConstraint(SpringLayout.EAST, progressBar, -2, SpringLayout.EAST, panel); + progressBar.setStringPainted(true); + progressBar.setForeground(Color.GREEN); + progressBar.setString(UIEnv.getRsb().getString("prepare")); + //progressBar.setOpaque(false); + //progressBar.setBackground(new Color(0,0,0,0)); + sl_panel.putConstraint(SpringLayout.NORTH, progressBar, 0, SpringLayout.SOUTH, nameLabel); + panel.add(progressBar); + } +} diff --git a/src/org/knemcl/uitool/RadioButtonSettingItem.java b/src/org/knemcl/uitool/RadioButtonSettingItem.java new file mode 100644 index 0000000..78c89c7 --- /dev/null +++ b/src/org/knemcl/uitool/RadioButtonSettingItem.java @@ -0,0 +1,38 @@ +package org.knemcl.uitool; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Font; + +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JRadioButton; +import javax.swing.SwingConstants; + +import org.knemcl.ui.UIEnv; +import org.knemcl.uitool.SettingItem; + +public class RadioButtonSettingItem extends SettingItem { +protected JRadioButton button; + + + public JRadioButton getRadioButton() { + return button; + } + public RadioButtonSettingItem(String text,int w,int h) { + this(text,UIEnv.getFont().deriveFont((float) 15.0),w,h); + } +/** + * @wbp.parser.constructor + */ + public RadioButtonSettingItem(String text, Font deriveFont,int w,int h) { + super(text,deriveFont,w,h); + button = new JRadioButton(); + button.setHorizontalAlignment(SwingConstants.RIGHT); + getPanel().add(button, BorderLayout.CENTER); + button.setBorder(null); + button.setOpaque(false); + button.setBackground(new Color(0,0,0,0)); + label.setForeground(Color.GRAY); + } +} diff --git a/src/org/knemcl/uitool/SettingItem.java b/src/org/knemcl/uitool/SettingItem.java new file mode 100644 index 0000000..ec0a4f7 --- /dev/null +++ b/src/org/knemcl/uitool/SettingItem.java @@ -0,0 +1,50 @@ +package org.knemcl.uitool; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Font; +import javax.swing.JPanel; +import javax.swing.JLabel; +import javax.swing.border.LineBorder; +import javax.swing.SwingConstants; + +import org.kne.ui.XPanel; +import org.knemcl.ui.UIEnv; +import javax.swing.SpringLayout; + +public class SettingItem extends XPanel { + protected JLabel label; + private JPanel sub; + + public JLabel getLabel() { + return label; + } + public SettingItem(String text,int w,int h){ + this(text,UIEnv.getFont().deriveFont(15.0f),w,h); + } + public JPanel getPanel(){ + return sub; + } + /** + * @wbp.parser.constructor + */ + public SettingItem(String text,Font f,int w,int h){ + setSize(w, h); + setPreferredSize(getSize()); + setBackground(UIEnv.getHalfTransparentDefaultColor()); + SpringLayout springLayout = new SpringLayout(); + setLayout(springLayout); + setOpaque(false); + sub = new JPanel(); + springLayout.putConstraint(SpringLayout.NORTH, sub, 0, SpringLayout.NORTH, this); + springLayout.putConstraint(SpringLayout.WEST, sub, 20, SpringLayout.WEST, this); + springLayout.putConstraint(SpringLayout.SOUTH, sub, 0, SpringLayout.SOUTH, this); + springLayout.putConstraint(SpringLayout.EAST, sub, -20, SpringLayout.EAST, this); + sub.setOpaque(false); + add(sub); + sub.setLayout(new BorderLayout(5, 0)); + label = new JLabel(text); + label.setFont(f); + sub.add(label, BorderLayout.WEST); + } +} diff --git a/src/org/knemcl/uitool/TextAreaSettingItem.java b/src/org/knemcl/uitool/TextAreaSettingItem.java new file mode 100644 index 0000000..cf63a50 --- /dev/null +++ b/src/org/knemcl/uitool/TextAreaSettingItem.java @@ -0,0 +1,41 @@ +package org.knemcl.uitool; + +import java.awt.Color; +import java.awt.Font; +import javax.swing.JButton; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.JTextField; +import java.awt.BorderLayout; +import javax.swing.SwingConstants; +import org.knemcl.ui.UIEnv; + +public class TextAreaSettingItem extends SettingItem { + protected JTextArea textarea; + + + public JTextArea getTextArea() { + return textarea; + } + public TextAreaSettingItem(String text,int w,int h) { + this(text,UIEnv.getFont().deriveFont((float) 15.0),w,h); + } +/** + * @wbp.parser.constructor + */ + public TextAreaSettingItem(String text, Font deriveFont,int w,int h) { + super(text,deriveFont,w,h); + textarea = new JTextArea(); + JScrollPane sp=new JScrollPane(textarea); + sp.getViewport().setOpaque(false); + sp.setOpaque(false); + sp.setBackground(new Color(0,0,0,0)); + getPanel().add(sp, BorderLayout.CENTER); + textarea.setBorder(null); + textarea.setOpaque(false); + textarea.setBackground(new Color(0,0,0,0)); + //textarea.setBackground(UIEnv.getDefaultcolor()); + label.setForeground(Color.GRAY); + } + +} diff --git a/src/org/knemcl/uitool/TextButtonSettingItem.java b/src/org/knemcl/uitool/TextButtonSettingItem.java new file mode 100644 index 0000000..a12c5cc --- /dev/null +++ b/src/org/knemcl/uitool/TextButtonSettingItem.java @@ -0,0 +1,49 @@ +package org.knemcl.uitool; + +import java.awt.Color; +import java.awt.Font; +import java.awt.font.TextAttribute; +import java.util.Map; + +import javax.swing.JButton; +import javax.swing.JTextField; +import java.awt.BorderLayout; +import javax.swing.SwingConstants; +import org.knemcl.ui.UIEnv; + +public class TextButtonSettingItem extends SettingItem { + protected JTextField textField; + protected JButton button; + + public JButton getButton() { + return button; + } + public JTextField getTextField() { + return textField; + } + public TextButtonSettingItem(String text,int w,int h) { + this(text,UIEnv.getFont().deriveFont((float) 15.0),w,h); + } + /** + * @wbp.parser.constructor + */ + public TextButtonSettingItem(String text, Font deriveFont,int w,int h) { + super(text,deriveFont,w,h); + BorderLayout borderLayout = (BorderLayout) getPanel().getLayout(); + textField = new JTextField(); + textField.setHorizontalAlignment(SwingConstants.RIGHT); + getPanel().add(textField, BorderLayout.CENTER); + textField.setColumns(10); + textField.setBorder(null); + textField.setOpaque(false); + textField.setBackground(new Color(0,0,0,0)); + label.setForeground(Color.GRAY); + + button = new JButton(); + getPanel().add(button, BorderLayout.EAST); + button.setFont(button.getFont().deriveFont(Map.of(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON))); + button.setBorder(null); + button.setOpaque(false); + button.setBackground(new Color(0,0,0,0)); + } +} diff --git a/src/org/knemcl/uitool/TextSettingItem.java b/src/org/knemcl/uitool/TextSettingItem.java new file mode 100644 index 0000000..632bbe2 --- /dev/null +++ b/src/org/knemcl/uitool/TextSettingItem.java @@ -0,0 +1,35 @@ +package org.knemcl.uitool; + +import java.awt.Color; +import java.awt.Font; +import javax.swing.JTextField; +import java.awt.BorderLayout; +import javax.swing.SwingConstants; +import org.knemcl.ui.UIEnv; + +public class TextSettingItem extends SettingItem { + protected JTextField textField; + + + public JTextField getTextField() { + return textField; + } + public TextSettingItem(String text,int w,int h) { + this(text,UIEnv.getFont().deriveFont((float) 15.0),w,h); + } + /** + * @wbp.parser.constructor + */ + public TextSettingItem(String text, Font deriveFont,int w,int h) { + super(text,deriveFont,w,h); + textField = new JTextField(); + textField.setHorizontalAlignment(SwingConstants.RIGHT); + getPanel().add(textField, BorderLayout.CENTER); + textField.setColumns(10); + textField.setBorder(null); + textField.setOpaque(false); + textField.setBackground(new Color(0,0,0,0)); + label.setForeground(Color.GRAY); + } + +} diff --git a/src/org/knemcl/uitool/UserConfigPanel.java b/src/org/knemcl/uitool/UserConfigPanel.java new file mode 100644 index 0000000..6fc9bb9 --- /dev/null +++ b/src/org/knemcl/uitool/UserConfigPanel.java @@ -0,0 +1,53 @@ +package org.knemcl.uitool; + +import java.awt.Image; +import java.io.IOException; + +import javax.imageio.ImageIO; + +import org.knemc.auth.UserConfig; +import org.knemcl.launch.Config; +import org.knemcl.ui.ConfigListPanel; + +public class UserConfigPanel extends ConfigPanel { + + /** + * + */ + private static final long serialVersionUID = 1L; + + @Override + public UserConfig getCfg() { + // TODO 自动生成的方法存根 + return (UserConfig) super.getCfg(); + } + + /*public UserConfigPanel() { + super(); + // TODO 自动生成的构造函数存根 + }*/ + + public UserConfigPanel(Config lcfg,ConfigListPanel clf) { + super(lcfg,clf); + // TODO 自动生成的构造函数存根 + } + + @Override + public Image getImage() { + try { + return ImageIO.read(UserConfigPanel.class.getResourceAsStream("/assets/bedrock.png")); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + + @Override + public String getTitle() { + return getCfg().getName(); + } + @Override + public String getSubTitle() { + return getCfg().getAuthType().toString(); + } +} diff --git a/src/org/knemcl/uitool/XAbstractListModel.java b/src/org/knemcl/uitool/XAbstractListModel.java new file mode 100644 index 0000000..4e6fcda --- /dev/null +++ b/src/org/knemcl/uitool/XAbstractListModel.java @@ -0,0 +1,233 @@ +/* + * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package org.knemcl.uitool; + +import javax.swing.ListModel; +import javax.swing.event.*; +import java.io.Serializable; +import java.util.EventListener; + +/** + * The abstract definition for the data model that provides + * a List with its contents. + *

+ * Warning: + * Serialized objects of this class will not be compatible with + * future Swing releases. The current serialization support is + * appropriate for short term storage or RMI between applications running + * the same version of Swing. As of 1.4, support for long term storage + * of all JavaBeans + * has been added to the java.beans package. + * Please see {@link java.beans.XMLEncoder}. + * + * @param the type of the elements of this model + * + * @author Hans Muller + * @since 1.2 + */ +@SuppressWarnings("serial") // Same-version serialization only +public abstract class XAbstractListModel implements ListModel, Serializable +{ + /** + * The listener list. + */ + protected EventListenerList listenerList = new EventListenerList(); + + /** + * Constructor for subclasses to call. + */ + protected XAbstractListModel() {} + + /** + * Adds a listener to the list that's notified each time a change + * to the data model occurs. + * + * @param l the ListDataListener to be added + */ + public void addListDataListener(ListDataListener l) { + listenerList.add(ListDataListener.class, l); + } + + + /** + * Removes a listener from the list that's notified each time a + * change to the data model occurs. + * + * @param l the ListDataListener to be removed + */ + public void removeListDataListener(ListDataListener l) { + listenerList.remove(ListDataListener.class, l); + } + + + /** + * Returns an array of all the list data listeners + * registered on this AbstractListModel. + * + * @return all of this model's ListDataListeners, + * or an empty array if no list data listeners + * are currently registered + * + * @see #addListDataListener + * @see #removeListDataListener + * + * @since 1.4 + */ + public ListDataListener[] getListDataListeners() { + return listenerList.getListeners(ListDataListener.class); + } + + + /** + * AbstractListModel subclasses must call this method + * after + * one or more elements of the list change. The changed elements + * are specified by the closed interval index0, index1 -- the endpoints + * are included. Note that + * index0 need not be less than or equal to index1. + * + * @param source the ListModel that changed, typically "this" + * @param index0 one end of the new interval + * @param index1 the other end of the new interval + * @see EventListenerList + * @see XDefaultListModel + */ + protected void fireContentsChanged(Object source, int index0, int index1) + { + Object[] listeners = listenerList.getListenerList(); + ListDataEvent e = null; + + for (int i = listeners.length - 2; i >= 0; i -= 2) { + if (listeners[i] == ListDataListener.class) { + if (e == null) { + e = new ListDataEvent(source, ListDataEvent.CONTENTS_CHANGED, index0, index1); + } + ((ListDataListener)listeners[i+1]).contentsChanged(e); + } + } + } + + + /** + * AbstractListModel subclasses must call this method + * after + * one or more elements are added to the model. The new elements + * are specified by a closed interval index0, index1 -- the enpoints + * are included. Note that + * index0 need not be less than or equal to index1. + * + * @param source the ListModel that changed, typically "this" + * @param index0 one end of the new interval + * @param index1 the other end of the new interval + * @see EventListenerList + * @see XDefaultListModel + */ + protected void fireIntervalAdded(Object source, int index0, int index1) + { + Object[] listeners = listenerList.getListenerList(); + ListDataEvent e = null; + + for (int i = listeners.length - 2; i >= 0; i -= 2) { + if (listeners[i] == ListDataListener.class) { + if (e == null) { + e = new ListDataEvent(source, ListDataEvent.INTERVAL_ADDED, index0, index1); + } + ((ListDataListener)listeners[i+1]).intervalAdded(e); + } + } + } + + + /** + * AbstractListModel subclasses must call this method + * after one or more elements are removed from the model. + * index0 and index1 are the end points + * of the interval that's been removed. Note that index0 + * need not be less than or equal to index1. + * + * @param source the ListModel that changed, typically "this" + * @param index0 one end of the removed interval, + * including index0 + * @param index1 the other end of the removed interval, + * including index1 + * @see EventListenerList + * @see XDefaultListModel + */ + protected void fireIntervalRemoved(Object source, int index0, int index1) + { + Object[] listeners = listenerList.getListenerList(); + ListDataEvent e = null; + + for (int i = listeners.length - 2; i >= 0; i -= 2) { + if (listeners[i] == ListDataListener.class) { + if (e == null) { + e = new ListDataEvent(source, ListDataEvent.INTERVAL_REMOVED, index0, index1); + } + ((ListDataListener)listeners[i+1]).intervalRemoved(e); + } + } + } + + /** + * Returns an array of all the objects currently registered as + * FooListeners + * upon this model. + * FooListeners + * are registered using the addFooListener method. + *

+ * You can specify the listenerType argument + * with a class literal, such as FooListener.class. + * For example, you can query a list model + * m + * for its list data listeners + * with the following code: + * + *

ListDataListener[] ldls = (ListDataListener[])(m.getListeners(ListDataListener.class));
+ * + * If no such listeners exist, + * this method returns an empty array. + * + * @param the type of {@code EventListener} class being requested + * @param listenerType the type of listeners requested; + * this parameter should specify an interface + * that descends from java.util.EventListener + * @return an array of all objects registered as + * FooListeners + * on this model, + * or an empty array if no such + * listeners have been added + * @exception ClassCastException if listenerType doesn't + * specify a class or interface that implements + * java.util.EventListener + * + * @see #getListDataListeners + * + * @since 1.3 + */ + public T[] getListeners(Class listenerType) { + return listenerList.getListeners(listenerType); + } +} diff --git a/src/org/knemcl/uitool/XButton.java b/src/org/knemcl/uitool/XButton.java new file mode 100644 index 0000000..d38115f --- /dev/null +++ b/src/org/knemcl/uitool/XButton.java @@ -0,0 +1,46 @@ +package org.knemcl.uitool; + +import java.awt.Graphics; +import javax.swing.Action; +import javax.swing.Icon; +import javax.swing.JButton; + +public class XButton extends JButton{ + /** + * + */ + public XButton() { + super(); + super.setContentAreaFilled(false); + } + + public XButton(Action a) { + super(a); + super.setContentAreaFilled(false); + } + + public XButton(Icon icon) { + super(icon); + super.setContentAreaFilled(false); + } + + public XButton(String text, Icon icon) { + super(text, icon); + super.setContentAreaFilled(false); + } + + public XButton(String text) { + super(text); + super.setContentAreaFilled(false); + } + + + + @Override + public void paint(Graphics g) { + g.setColor(getBackground()); + g.fillRoundRect(0, 0, getWidth()-1, getHeight()-1, 20, 20); + super.paint(g); + } + +} diff --git a/src/org/knemcl/uitool/XDefaultListModel.java b/src/org/knemcl/uitool/XDefaultListModel.java new file mode 100644 index 0000000..6c05339 --- /dev/null +++ b/src/org/knemcl/uitool/XDefaultListModel.java @@ -0,0 +1,584 @@ +/* + * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package org.knemcl.uitool; + +import java.util.Vector; +import java.io.Externalizable; +import java.io.IOException; +import java.io.ObjectInput; +import java.io.ObjectOutput; +import java.util.Collection; +import java.util.Enumeration; + + +/** + * This class loosely implements the {@code java.util.Vector} + * API, in that it implements the 1.1.x version of + * {@code java.util.Vector}, has no collection class support, + * and notifies the {@code ListDataListener}s when changes occur. + * Presently it delegates to a {@code Vector}, + * in a future release it will be a real Collection implementation. + *

+ * Warning: + * Serialized objects of this class will not be compatible with + * future Swing releases. The current serialization support is + * appropriate for short term storage or RMI between applications running + * the same version of Swing. As of 1.4, support for long term storage + * of all JavaBeans + * has been added to the {@code java.beans} package. + * Please see {@link java.beans.XMLEncoder}. + * + * @param the type of the elements of this model + * + * @author Hans Muller + * @since 1.2 + */ +@SuppressWarnings("serial") // Same-version serialization only +public class XDefaultListModel extends XAbstractListModel implements Externalizable +{ + private Vector delegate = new Vector(); + + /** + * Constructs a {@code DefaultListModel}. + */ + public XDefaultListModel() {} + + /** + * Returns the number of components in this list. + *

+ * This method is identical to {@code size}, which implements the + * {@code List} interface defined in the 1.2 Collections framework. + * This method exists in conjunction with {@code setSize} so that + * {@code size} is identifiable as a JavaBean property. + * + * @return the number of components in this list + * @see #size() + */ + public int getSize() { + return delegate.size(); + } + + /** + * Returns the component at the specified index. + *

+ * Note: Although this method is not deprecated, the preferred + * method to use is {@code get(int)}, which implements the {@code List} + * interface defined in the 1.2 Collections framework. + *
+ * @param index an index into this list + * @return the component at the specified index + * @throws ArrayIndexOutOfBoundsException if the {@code index} + * is negative or greater than the current size of this + * list + * @see #get(int) + */ + public E getElementAt(int index) { + return delegate.elementAt(index); + } + + /** + * Copies the components of this list into the specified array. + * The array must be big enough to hold all the objects in this list, + * else an {@code IndexOutOfBoundsException} is thrown. + * + * @param anArray the array into which the components get copied + * @see Vector#copyInto(Object[]) + */ + public void copyInto(Object[] anArray) { + delegate.copyInto(anArray); + } + + /** + * Trims the capacity of this list to be the list's current size. + * + * @see Vector#trimToSize() + */ + public void trimToSize() { + delegate.trimToSize(); + } + + /** + * Increases the capacity of this list, if necessary, to ensure + * that it can hold at least the number of components specified by + * the minimum capacity argument. + * + * @param minCapacity the desired minimum capacity + * @see Vector#ensureCapacity(int) + */ + public void ensureCapacity(int minCapacity) { + delegate.ensureCapacity(minCapacity); + } + + /** + * Sets the size of this list. + * + * @param newSize the new size of this list + * @see Vector#setSize(int) + */ + public void setSize(int newSize) { + int oldSize = delegate.size(); + delegate.setSize(newSize); + if (oldSize > newSize) { + fireIntervalRemoved(this, newSize, oldSize-1); + } + else if (oldSize < newSize) { + fireIntervalAdded(this, oldSize, newSize-1); + } + } + + /** + * Returns the current capacity of this list. + * + * @return the current capacity + * @see Vector#capacity() + */ + public int capacity() { + return delegate.capacity(); + } + + /** + * Returns the number of components in this list. + * + * @return the number of components in this list + * @see Vector#size() + */ + public int size() { + return delegate.size(); + } + + /** + * Tests whether this list has any components. + * + * @return {@code true} if and only if this list has + * no components, that is, its size is zero; + * {@code false} otherwise + * @see Vector#isEmpty() + */ + public boolean isEmpty() { + return delegate.isEmpty(); + } + + /** + * Returns an enumeration of the components of this list. + * + * @return an enumeration of the components of this list + * @see Vector#elements() + */ + public Enumeration elements() { + return delegate.elements(); + } + + /** + * Tests whether the specified object is a component in this list. + * + * @param elem an object + * @return {@code true} if the specified object + * is the same as a component in this list + * @see Vector#contains(Object) + */ + public boolean contains(Object elem) { + return delegate.contains(elem); + } + + /** + * Searches for the first occurrence of {@code elem}. + * + * @param elem an object + * @return the index of the first occurrence of the argument in this + * list; returns {@code -1} if the object is not found + * @see Vector#indexOf(Object) + */ + public int indexOf(Object elem) { + return delegate.indexOf(elem); + } + + /** + * Searches for the first occurrence of {@code elem}, beginning + * the search at {@code index}. + * + * @param elem the desired component + * @param index the index from which to begin searching + * @return the index where the first occurrence of {@code elem} + * is found after {@code index}; returns {@code -1} + * if the {@code elem} is not found in the list + * @see Vector#indexOf(Object,int) + */ + public int indexOf(Object elem, int index) { + return delegate.indexOf(elem, index); + } + + /** + * Returns the index of the last occurrence of {@code elem}. + * + * @param elem the desired component + * @return the index of the last occurrence of {@code elem} + * in the list; returns {@code elem} if the object is not found + * @see Vector#lastIndexOf(Object) + */ + public int lastIndexOf(Object elem) { + return delegate.lastIndexOf(elem); + } + + /** + * Searches backwards for {@code elem}, starting from the + * specified index, and returns an index to it. + * + * @param elem the desired component + * @param index the index to start searching from + * @return the index of the last occurrence of the {@code elem} + * in this list at position less than {@code index}; + * returns {@code -1} if the object is not found + * @see Vector#lastIndexOf(Object,int) + */ + public int lastIndexOf(Object elem, int index) { + return delegate.lastIndexOf(elem, index); + } + + /** + * Returns the component at the specified index. + *
+ * Note: Although this method is not deprecated, the preferred + * method to use is {@code get(int)}, which implements the + * {@code List} interface defined in the 1.2 Collections framework. + *
+ * + * @param index an index into this list + * @return the component at the specified index + * @throws ArrayIndexOutOfBoundsException if the index + * is negative or not less than the size of the list + * @see #get(int) + * @see Vector#elementAt(int) + */ + public E elementAt(int index) { + return delegate.elementAt(index); + } + + /** + * Returns the first component of this list. + * @return the first component of this list + * @see Vector#firstElement() + * @throws java.util.NoSuchElementException if this + * vector has no components + */ + public E firstElement() { + return delegate.firstElement(); + } + + /** + * Returns the last component of the list. + * + * @return the last component of the list + * @see Vector#lastElement() + * @throws java.util.NoSuchElementException if this vector + * has no components + */ + public E lastElement() { + return delegate.lastElement(); + } + + /** + * Sets the component at the specified {@code index} of this + * list to be the specified element. The previous component at that + * position is discarded. + *
+ * Note: Although this method is not deprecated, the preferred + * method to use is {@code set(int,Object)}, which implements the + * {@code List} interface defined in the 1.2 Collections framework. + *
+ * + * @param element what the component is to be set to + * @param index the specified index + * @throws ArrayIndexOutOfBoundsException if the index is invalid + * @see #set(int,Object) + * @see Vector#setElementAt(Object,int) + */ + public void setElementAt(E element, int index) { + delegate.setElementAt(element, index); + fireContentsChanged(this, index, index); + } + + /** + * Deletes the component at the specified index. + *
+ * Note: Although this method is not deprecated, the preferred + * method to use is {@code remove(int)}, which implements the + * {@code List} interface defined in the 1.2 Collections framework. + *
+ * + * @param index the index of the object to remove + * @see #remove(int) + * @see Vector#removeElementAt(int) + * @throws ArrayIndexOutOfBoundsException if the index is invalid + */ + public void removeElementAt(int index) { + delegate.removeElementAt(index); + fireIntervalRemoved(this, index, index); + } + + /** + * Inserts the specified element as a component in this list at the + * specified index. + *
+ * Note: Although this method is not deprecated, the preferred + * method to use is {@code add(int,Object)}, which implements the + * {@code List} interface defined in the 1.2 Collections framework. + *
+ * + * @param element the component to insert + * @param index where to insert the new component + * @exception ArrayIndexOutOfBoundsException if the index was invalid + * @see #add(int,Object) + * @see Vector#insertElementAt(Object,int) + */ + public void insertElementAt(E element, int index) { + delegate.insertElementAt(element, index); + fireIntervalAdded(this, index, index); + } + + /** + * Adds the specified component to the end of this list. + * + * @param element the component to be added + * @see Vector#addElement(Object) + */ + public void addElement(E element) { + int index = delegate.size(); + delegate.addElement(element); + fireIntervalAdded(this, index, index); + } + + /** + * Removes the first (lowest-indexed) occurrence of the argument + * from this list. + * + * @param obj the component to be removed + * @return {@code true} if the argument was a component of this + * list; {@code false} otherwise + * @see Vector#removeElement(Object) + */ + public boolean removeElement(Object obj) { + int index = indexOf(obj); + boolean rv = delegate.removeElement(obj); + if (index >= 0) { + fireIntervalRemoved(this, index, index); + } + return rv; + } + + + /** + * Removes all components from this list and sets its size to zero. + *
+ * Note: Although this method is not deprecated, the preferred + * method to use is {@code clear}, which implements the + * {@code List} interface defined in the 1.2 Collections framework. + *
+ * + * @see #clear() + * @see Vector#removeAllElements() + */ + public void removeAllElements() { + int index1 = delegate.size()-1; + delegate.removeAllElements(); + if (index1 >= 0) { + fireIntervalRemoved(this, 0, index1); + } + } + + + /** + * Returns a string that displays and identifies this + * object's properties. + * + * @return a String representation of this object + */ + public String toString() { + return delegate.toString(); + } + + + /* The remaining methods are included for compatibility with the + * Java 2 platform Vector class. + */ + + /** + * Returns an array containing all of the elements in this list in the + * correct order. + * + * @return an array containing the elements of the list + * @see Vector#toArray() + */ + public Object[] toArray() { + Object[] rv = new Object[delegate.size()]; + delegate.copyInto(rv); + return rv; + } + + /** + * Returns the element at the specified position in this list. + * + * @param index index of element to return + * @return the element at the specified position in this list + * @throws ArrayIndexOutOfBoundsException if the index is out of range + * ({@code index < 0 || index >= size()}) + */ + public E get(int index) { + return delegate.elementAt(index); + } + + /** + * Replaces the element at the specified position in this list with the + * specified element. + * + * @param index index of element to replace + * @param element element to be stored at the specified position + * @return the element previously at the specified position + * @throws ArrayIndexOutOfBoundsException if the index is out of range + * ({@code index < 0 || index >= size()}) + */ + public E set(int index, E element) { + E rv = delegate.elementAt(index); + delegate.setElementAt(element, index); + fireContentsChanged(this, index, index); + return rv; + } + + /** + * Inserts the specified element at the specified position in this list. + * + * @param index index at which the specified element is to be inserted + * @param element element to be inserted + * @throws ArrayIndexOutOfBoundsException if the index is out of range + * ({@code index < 0 || index > size()}) + */ + public void add(int index, E element) { + delegate.insertElementAt(element, index); + fireIntervalAdded(this, index, index); + } + + /** + * Removes the element at the specified position in this list. + * Returns the element that was removed from the list + * + * @param index the index of the element to removed + * @return the element previously at the specified position + * @throws ArrayIndexOutOfBoundsException if the index is out of range + * ({@code index < 0 || index >= size()}) + */ + public E remove(int index) { + E rv = delegate.elementAt(index); + delegate.removeElementAt(index); + fireIntervalRemoved(this, index, index); + return rv; + } + + /** + * Removes all of the elements from this list. The list will + * be empty after this call returns (unless it throws an exception). + */ + public void clear() { + int index1 = delegate.size()-1; + delegate.removeAllElements(); + if (index1 >= 0) { + fireIntervalRemoved(this, 0, index1); + } + } + + /** + * Deletes the components at the specified range of indexes. + * The removal is inclusive, so specifying a range of (1,5) + * removes the component at index 1 and the component at index 5, + * as well as all components in between. + * + * @param fromIndex the index of the lower end of the range + * @param toIndex the index of the upper end of the range + * @throws ArrayIndexOutOfBoundsException if the index was invalid + * @throws IllegalArgumentException if {@code fromIndex > toIndex} + * @see #remove(int) + */ + public void removeRange(int fromIndex, int toIndex) { + if (fromIndex > toIndex) { + throw new IllegalArgumentException("fromIndex must be <= toIndex"); + } + for(int i = toIndex; i >= fromIndex; i--) { + delegate.removeElementAt(i); + } + fireIntervalRemoved(this, fromIndex, toIndex); + } + + /** + * Adds all of the elements present in the collection to the list. + * + * @param c the collection which contains the elements to add + * @throws NullPointerException if {@code c} is null + */ + public void addAll(Collection c) { + if (c.isEmpty()) { + return; + } + + int startIndex = getSize(); + + delegate.addAll(c); + fireIntervalAdded(this, startIndex, getSize() - 1); + } + + /** + * Adds all of the elements present in the collection, starting + * from the specified index. + * + * @param index index at which to insert the first element from the + * specified collection + * @param c the collection which contains the elements to add + * @throws ArrayIndexOutOfBoundsException if {@code index} does not + * fall within the range of number of elements currently held + * @throws NullPointerException if {@code c} is null + */ + public void addAll(int index, Collection c) { + if (index < 0 || index > getSize()) { + throw new ArrayIndexOutOfBoundsException("index out of range: " + + index); + } + + if (c.isEmpty()) { + return; + } + + delegate.addAll(index, c); + fireIntervalAdded(this, index, index + c.size() - 1); + } + + @Override + public void writeExternal(ObjectOutput out) throws IOException { + out.writeObject(delegate); + + } + + @Override + public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { + delegate=(Vector) in.readObject(); + } +} diff --git a/wintun.dll b/wintun.dll new file mode 100644 index 0000000..aee04e7 Binary files /dev/null and b/wintun.dll differ