[{"title":"( 91 个子文件 200KB ) AndroidServer:基于 Kotlin + Netty 开发,为 Android App 提供 Server 的功能,包括 Http、TCP、WebSocket 服务","children":[{"title":"AndroidServer-master","children":[{"title":".gitignore <span style='color:#111;'> 91B </span>","children":null,"spread":false},{"title":"app","children":[{"title":".gitignore <span style='color:#111;'> 7B </span>","children":null,"spread":false},{"title":"build.gradle <span style='color:#111;'> 1.84KB </span>","children":null,"spread":false},{"title":"src","children":[{"title":"androidTest","children":[{"title":"java","children":[{"title":"com","children":[{"title":"safframework","children":[{"title":"androidserver","children":[{"title":"ExampleInstrumentedTest.kt <span style='color:#111;'> 688B </span>","children":null,"spread":false}],"spread":true}],"spread":true}],"spread":true}],"spread":true}],"spread":true},{"title":"main","children":[{"title":"AndroidManifest.xml <span style='color:#111;'> 1.10KB </span>","children":null,"spread":false},{"title":"res","children":[{"title":"mipmap-xhdpi","children":[{"title":"ic_launcher_round.png <span style='color:#111;'> 7.30KB </span>","children":null,"spread":false},{"title":"ic_launcher.png <span style='color:#111;'> 4.81KB </span>","children":null,"spread":false}],"spread":true},{"title":"mipmap-mdpi","children":[{"title":"ic_launcher_round.png <span style='color:#111;'> 3.31KB </span>","children":null,"spread":false},{"title":"ic_launcher.png <span style='color:#111;'> 2.57KB </span>","children":null,"spread":false}],"spread":true},{"title":"layout","children":[{"title":"activity_main.xml <span style='color:#111;'> 555B </span>","children":null,"spread":false}],"spread":true},{"title":"mipmap-xxhdpi","children":[{"title":"ic_launcher_round.png <span style='color:#111;'> 11.59KB </span>","children":null,"spread":false},{"title":"ic_launcher.png <span style='color:#111;'> 7.72KB </span>","children":null,"spread":false}],"spread":true},{"title":"drawable","children":[{"title":"ic_launcher_background.xml <span style='color:#111;'> 5.47KB </span>","children":null,"spread":false}],"spread":false},{"title":"mipmap-anydpi-v26","children":[{"title":"ic_launcher_round.xml <span style='color:#111;'> 272B </span>","children":null,"spread":false},{"title":"ic_launcher.xml <span style='color:#111;'> 272B </span>","children":null,"spread":false}],"spread":false},{"title":"drawable-v24","children":[{"title":"ic_launcher_foreground.xml <span style='color:#111;'> 1.66KB </span>","children":null,"spread":false}],"spread":false},{"title":"mipmap-hdpi","children":[{"title":"ic_launcher_round.png <span style='color:#111;'> 5.21KB </span>","children":null,"spread":false},{"title":"ic_launcher.png <span style='color:#111;'> 3.51KB </span>","children":null,"spread":false}],"spread":false},{"title":"mipmap-xxxhdpi","children":[{"title":"ic_launcher_round.png <span style='color:#111;'> 16.18KB </span>","children":null,"spread":false},{"title":"ic_launcher.png <span style='color:#111;'> 10.40KB </span>","children":null,"spread":false}],"spread":false},{"title":"values","children":[{"title":"strings.xml <span style='color:#111;'> 76B </span>","children":null,"spread":false},{"title":"colors.xml <span style='color:#111;'> 208B </span>","children":null,"spread":false},{"title":"styles.xml <span style='color:#111;'> 383B </span>","children":null,"spread":false}],"spread":false}],"spread":true},{"title":"assets","children":[{"title":"web","children":[{"title":"test.html <span style='color:#111;'> 176B </span>","children":null,"spread":false}],"spread":true}],"spread":true},{"title":"java","children":[{"title":"com","children":[{"title":"safframework","children":[{"title":"androidserver","children":[{"title":"app","children":[{"title":"App.kt <span style='color:#111;'> 544B </span>","children":null,"spread":false}],"spread":false},{"title":"server","children":[{"title":"Servers.kt <span style='color:#111;'> 3.97KB </span>","children":null,"spread":false}],"spread":false},{"title":"MainActivity.kt <span style='color:#111;'> 1.71KB </span>","children":null,"spread":false},{"title":"log","children":[{"title":"LogProxyImpl.kt <span style='color:#111;'> 634B </span>","children":null,"spread":false}],"spread":false}],"spread":false}],"spread":true}],"spread":true}],"spread":true}],"spread":true},{"title":"test","children":[{"title":"java","children":[{"title":"com","children":[{"title":"safframework","children":[{"title":"androidserver","children":[{"title":"ExampleUnitTest.kt <span style='color:#111;'> 355B </span>","children":null,"spread":false}],"spread":true}],"spread":true}],"spread":true}],"spread":true}],"spread":true}],"spread":true},{"title":"proguard-rules.pro <span style='color:#111;'> 751B </span>","children":null,"spread":false}],"spread":true},{"title":"core","children":[{"title":".gitignore <span style='color:#111;'> 7B </span>","children":null,"spread":false},{"title":"build.gradle <span style='color:#111;'> 1.73KB </span>","children":null,"spread":false},{"title":"src","children":[{"title":"main","children":[{"title":"AndroidManifest.xml <span style='color:#111;'> 122B </span>","children":null,"spread":false},{"title":"java","children":[{"title":"com","children":[{"title":"safframework","children":[{"title":"server","children":[{"title":"core","children":[{"title":"http","children":[{"title":"Request.kt <span style='color:#111;'> 669B </span>","children":null,"spread":false},{"title":"entity","children":[{"title":"UploadFile.kt <span style='color:#111;'> 384B </span>","children":null,"spread":false}],"spread":false},{"title":"filter","children":[{"title":"HttpFilter.kt <span style='color:#111;'> 513B </span>","children":null,"spread":false}],"spread":false},{"title":"cookie","children":[{"title":"HttpCookie.kt <span style='color:#111;'> 1.47KB </span>","children":null,"spread":false}],"spread":false},{"title":"HttpRequest.kt <span style='color:#111;'> 2.70KB </span>","children":null,"spread":false},{"title":"controller","children":[{"title":"NotFoundController.kt <span style='color:#111;'> 712B </span>","children":null,"spread":false}],"spread":false},{"title":"HttpMethod.kt <span style='color:#111;'> 854B </span>","children":null,"spread":false},{"title":"HttpResponse.kt <span style='color:#111;'> 7.00KB </span>","children":null,"spread":false},{"title":"Response.kt <span style='color:#111;'> 1.48KB </span>","children":null,"spread":false},{"title":"ParamParser.kt <span style='color:#111;'> 1.91KB </span>","children":null,"spread":false}],"spread":false},{"title":"handler","children":[{"title":"http","children":[{"title":"H1BrokerHandler.kt <span style='color:#111;'> 1.68KB </span>","children":null,"spread":false},{"title":"H2BrokerHandler.kt <span style='color:#111;'> 5.65KB </span>","children":null,"spread":false},{"title":"Http2HandlerBuilder.kt <span style='color:#111;'> 1.08KB </span>","children":null,"spread":false},{"title":"NettyHttpServerInitializer.kt <span style='color:#111;'> 1.79KB </span>","children":null,"spread":false},{"title":"AlpnHandler.kt <span style='color:#111;'> 1.49KB </span>","children":null,"spread":false}],"spread":false},{"title":"socketAndWS","children":[{"title":"SocketChooseHandler.kt <span style='color:#111;'> 1.50KB </span>","children":null,"spread":false},{"title":"CustomerServerHandler.kt <span style='color:#111;'> 2.45KB </span>","children":null,"spread":false},{"title":"ChannelActiveHandler.kt <span style='color:#111;'> 1016B </span>","children":null,"spread":false},{"title":"PipelineAdd.kt <span style='color:#111;'> 1.55KB </span>","children":null,"spread":false},{"title":"SocketListener.kt <span style='color:#111;'> 716B </span>","children":null,"spread":false},{"title":"NettySocketServerInitializer.kt <span style='color:#111;'> 1.24KB </span>","children":null,"spread":false}],"spread":false},{"title":"websocket","children":[{"title":"NettyWebSocketServerInitializer.kt <span style='color:#111;'> 1.28KB </span>","children":null,"spread":false},{"title":"TextWebSocketFrameHandler.kt <span style='color:#111;'> 1.80KB </span>","children":null,"spread":false}],"spread":false}],"spread":false},{"title":"Server.kt <span style='color:#111;'> 2.30KB </span>","children":null,"spread":false},{"title":"log","children":[{"title":"LogManager.kt <span style='color:#111;'> 734B </span>","children":null,"spread":false},{"title":"LogProxy.kt <span style='color:#111;'> 421B </span>","children":null,"spread":false}],"spread":false},{"title":"utils","children":[{"title":"ByteBufUtils.kt <span style='color:#111;'> 394B </span>","children":null,"spread":false},{"title":"SocketUtils.kt <span style='color:#111;'> 1.75KB </span>","children":null,"spread":false}],"spread":false},{"title":"ssl","children":[{"title":"SslContextFactory.kt <span style='color:#111;'> 1.82KB </span>","children":null,"spread":false}],"spread":false},{"title":"TypeAliases.kt <span style='color:#111;'> 514B </span>","children":null,"spread":false},{"title":"converter","children":[{"title":"Converter.kt <span style='color:#111;'> 597B </span>","children":null,"spread":false},{"title":"ConverterManager.kt <span style='color:#111;'> 582B </span>","children":null,"spread":false}],"spread":false},{"title":"router","children":[{"title":"RouteTable.kt <span style='color:#111;'> 3.13KB </span>","children":null,"spread":false},{"title":"PathTrie.kt <span style='color:#111;'> 4.96KB </span>","children":null,"spread":false}],"spread":false},{"title":"AndroidServer.kt <span style='color:#111;'> 8.26KB </span>","children":null,"spread":false}],"spread":true}],"spread":true}],"spread":true}],"spread":true}],"spread":true}],"spread":true}],"spread":true},{"title":"consumer-rules.pro <span style='color:#111;'> 0B </span>","children":null,"spread":false},{"title":"proguard-rules.pro <span style='color:#111;'> 751B </span>","children":null,"spread":false}],"spread":true},{"title":"settings.gradle <span style='color:#111;'> 111B </span>","children":null,"spread":false},{"title":"build.gradle <span style='color:#111;'> 1.41KB </span>","children":null,"spread":false},{"title":"gradlew <span style='color:#111;'> 5.17KB </span>","children":null,"spread":false},{"title":"CHANGELOG.md <span style='color:#111;'> 1.11KB </span>","children":null,"spread":false},{"title":"README.md <span style='color:#111;'> 7.22KB </span>","children":null,"spread":false},{"title":"gradlew.bat <span style='color:#111;'> 2.21KB </span>","children":null,"spread":false},{"title":"gradle.properties <span style='color:#111;'> 1.14KB </span>","children":null,"spread":false},{"title":"converter","children":[{"title":".gitignore <span style='color:#111;'> 7B </span>","children":null,"spread":false},{"title":"consumer-rules.pro <span style='color:#111;'> 0B </span>","children":null,"spread":false},{"title":"gson","children":[{"title":".gitignore <span style='color:#111;'> 7B </span>","children":null,"spread":false},{"title":"build.gradle <span style='color:#111;'> 1.79KB </span>","children":null,"spread":false},{"title":"src","children":[{"title":"androidTest","children":[{"title":"java","children":[{"title":"com","children":[{"title":"safframework","children":[{"title":"androidserver","children":[{"title":"converter","children":[{"title":"gson","children":[{"title":"ExampleInstrumentedTest.kt <span style='color:#111;'> 723B </span>","children":null,"spread":false}],"spread":false}],"spread":false}],"spread":false}],"spread":false}],"spread":false}],"spread":false}],"spread":false},{"title":"main","children":[{"title":"AndroidManifest.xml <span style='color:#111;'> 132B </span>","children":null,"spread":false},{"title":"java","children":[{"title":"com","children":[{"title":"safframework","children":[{"title":"server","children":[{"title":"converter","children":[{"title":"gson","children":[{"title":"GsonUtils.kt <span style='color:#111;'> 656B </span>","children":null,"spread":false},{"title":"GsonConverter.kt <span style='color:#111;'> 516B </span>","children":null,"spread":false}],"spread":false}],"spread":false}],"spread":false}],"spread":false}],"spread":false}],"spread":false}],"spread":false},{"title":"test","children":[{"title":"java","children":[{"title":"com","children":[{"title":"safframework","children":[{"title":"androidserver","children":[{"title":"converter","children":[{"title":"gson","children":[{"title":"ExampleUnitTest.kt <span style='color:#111;'> 370B </span>","children":null,"spread":false}],"spread":false}],"spread":false}],"spread":false}],"spread":false}],"spread":false}],"spread":false}],"spread":false}],"spread":false},{"title":"consumer-rules.pro <span style='color:#111;'> 0B </span>","children":null,"spread":false},{"title":"proguard-rules.pro <span style='color:#111;'> 751B </span>","children":null,"spread":false}],"spread":false},{"title":"proguard-rules.pro <span style='color:#111;'> 751B </span>","children":null,"spread":false}],"spread":true},{"title":"gradle","children":[{"title":"wrapper","children":[{"title":"gradle-wrapper.properties <span style='color:#111;'> 232B </span>","children":null,"spread":false},{"title":"gradle-wrapper.jar <span style='color:#111;'> 53.06KB </span>","children":null,"spread":false}],"spread":true}],"spread":true}],"spread":false}],"spread":true}]