mirror of
				https://github.com/GayPizzaSpecifications/foundation.git
				synced 2025-11-03 19:29:38 +00:00 
			
		
		
		
	Implement usage of the new Tailscale channel library.
This commit is contained in:
		@ -18,7 +18,7 @@ class FoundationChaosPlugin : BaseFoundationPlugin() {
 | 
				
			|||||||
    config = loadConfigurationWithDefault(
 | 
					    config = loadConfigurationWithDefault(
 | 
				
			||||||
      foundation,
 | 
					      foundation,
 | 
				
			||||||
      ChaosConfig.serializer(),
 | 
					      ChaosConfig.serializer(),
 | 
				
			||||||
      "heimdall.yaml"
 | 
					      "chaos.yaml"
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
    registerCommandExecutor("chaos", ChaosToggleCommand())
 | 
					    registerCommandExecutor("chaos", ChaosToggleCommand())
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
				
			|||||||
@ -2,6 +2,6 @@ package gay.pizza.foundation.core.features.persist
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import jetbrains.exodus.entitystore.Entity
 | 
					import jetbrains.exodus.entitystore.Entity
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fun <T : Comparable<*>> Entity.setAllProperties(vararg entries: Pair<String, T>) = entries.forEach { entry ->
 | 
					fun <T : Comparable<*>> Entity.setAllProperties(vararg entries: Pair<String, T>): Unit = entries.forEach { entry ->
 | 
				
			||||||
  setProperty(entry.first, entry.second)
 | 
					  setProperty(entry.first, entry.second)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -13,6 +13,7 @@ dependencies {
 | 
				
			|||||||
  implementation(project(":common-plugin"))
 | 
					  implementation(project(":common-plugin"))
 | 
				
			||||||
  compileOnly(project(":foundation-shared"))
 | 
					  compileOnly(project(":foundation-shared"))
 | 
				
			||||||
  implementation(libs.tailscale)
 | 
					  implementation(libs.tailscale)
 | 
				
			||||||
 | 
					  implementation(libs.tailscale.channel)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
concreteItem {
 | 
					concreteItem {
 | 
				
			||||||
 | 
				
			|||||||
@ -1,16 +1,13 @@
 | 
				
			|||||||
package gay.pizza.foundation.tailscale
 | 
					package gay.pizza.foundation.tailscale
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import gay.pizza.tailscale.channel.ChannelCopier
 | 
				
			||||||
import gay.pizza.tailscale.core.Tailscale
 | 
					import gay.pizza.tailscale.core.Tailscale
 | 
				
			||||||
import gay.pizza.tailscale.core.TailscaleConn
 | 
					import gay.pizza.tailscale.core.TailscaleConn
 | 
				
			||||||
import gay.pizza.tailscale.core.TailscaleListener
 | 
					import gay.pizza.tailscale.core.TailscaleListener
 | 
				
			||||||
import org.bukkit.Server
 | 
					import org.bukkit.Server
 | 
				
			||||||
import java.net.InetSocketAddress
 | 
					import java.net.InetSocketAddress
 | 
				
			||||||
import java.net.StandardSocketOptions
 | 
					import java.net.StandardSocketOptions
 | 
				
			||||||
import java.nio.ByteBuffer
 | 
					 | 
				
			||||||
import java.nio.channels.ClosedChannelException
 | 
					 | 
				
			||||||
import java.nio.channels.ReadableByteChannel
 | 
					 | 
				
			||||||
import java.nio.channels.SocketChannel
 | 
					import java.nio.channels.SocketChannel
 | 
				
			||||||
import java.nio.channels.WritableByteChannel
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TailscaleProxyServer(val server: Server, val tailscale: Tailscale) {
 | 
					class TailscaleProxyServer(val server: Server, val tailscale: Tailscale) {
 | 
				
			||||||
  private var minecraftServerListener: TailscaleListener? = null
 | 
					  private var minecraftServerListener: TailscaleListener? = null
 | 
				
			||||||
@ -34,38 +31,13 @@ class TailscaleProxyServer(val server: Server, val tailscale: Tailscale) {
 | 
				
			|||||||
    val readChannel = conn.openReadChannel()
 | 
					    val readChannel = conn.openReadChannel()
 | 
				
			||||||
    val writeChannel = conn.openWriteChannel()
 | 
					    val writeChannel = conn.openWriteChannel()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fun closeAll() {
 | 
					    val closeHandler = { socketChannel.close() }
 | 
				
			||||||
      socketChannel.close()
 | 
					    val tailscaleSocketCopier = ChannelCopier(readChannel, socketChannel)
 | 
				
			||||||
      readChannel.close()
 | 
					    tailscaleSocketCopier.spawnCopyThread(
 | 
				
			||||||
      writeChannel.close()
 | 
					      "Tailscale to Socket Copier", onClose = closeHandler)
 | 
				
			||||||
    }
 | 
					    val socketTailscaleCopier = ChannelCopier(socketChannel, writeChannel)
 | 
				
			||||||
 | 
					    socketTailscaleCopier.spawnCopyThread(
 | 
				
			||||||
    fun startCopyThread(name: String, from: ReadableByteChannel, to: WritableByteChannel) {
 | 
					      "Socket to Tailscale Copier", onClose = closeHandler)
 | 
				
			||||||
      val thread = Thread {
 | 
					 | 
				
			||||||
        try {
 | 
					 | 
				
			||||||
          while (true) {
 | 
					 | 
				
			||||||
            val buffer = ByteBuffer.allocate(2048)
 | 
					 | 
				
			||||||
            val size = from.read(buffer)
 | 
					 | 
				
			||||||
            if (size < 0) {
 | 
					 | 
				
			||||||
              break
 | 
					 | 
				
			||||||
            } else {
 | 
					 | 
				
			||||||
              buffer.flip()
 | 
					 | 
				
			||||||
              to.write(buffer)
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            buffer.clear()
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        } catch (_: ClosedChannelException) {
 | 
					 | 
				
			||||||
        } finally {
 | 
					 | 
				
			||||||
          closeAll()
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      thread.name = name
 | 
					 | 
				
			||||||
      thread.start()
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    startCopyThread("Tailscale to Socket Pipe", readChannel, socketChannel)
 | 
					 | 
				
			||||||
    startCopyThread("Socket to Tailscale Pipe", socketChannel, writeChannel)
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  fun close() {
 | 
					  fun close() {
 | 
				
			||||||
 | 
				
			|||||||
@ -73,7 +73,7 @@ dependencyResolutionManagement {
 | 
				
			|||||||
      version("postgresql", "42.5.3")
 | 
					      version("postgresql", "42.5.3")
 | 
				
			||||||
      version("exposed", "0.41.1")
 | 
					      version("exposed", "0.41.1")
 | 
				
			||||||
      version("hikaricp", "5.0.1")
 | 
					      version("hikaricp", "5.0.1")
 | 
				
			||||||
      version("libtailscale", "0.1.2-SNAPSHOT")
 | 
					      version("libtailscale", "0.1.4-SNAPSHOT")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      library("clikt", "com.github.ajalt.clikt", "clikt").versionRef("clikt")
 | 
					      library("clikt", "com.github.ajalt.clikt", "clikt").versionRef("clikt")
 | 
				
			||||||
      library("xodus-core", "org.jetbrains.xodus", "xodus-openAPI").versionRef("xodus")
 | 
					      library("xodus-core", "org.jetbrains.xodus", "xodus-openAPI").versionRef("xodus")
 | 
				
			||||||
@ -93,6 +93,7 @@ dependencyResolutionManagement {
 | 
				
			|||||||
      library("exposed-java-time", "org.jetbrains.exposed", "exposed-java-time").versionRef("exposed")
 | 
					      library("exposed-java-time", "org.jetbrains.exposed", "exposed-java-time").versionRef("exposed")
 | 
				
			||||||
      library("hikaricp", "com.zaxxer", "HikariCP").versionRef("hikaricp")
 | 
					      library("hikaricp", "com.zaxxer", "HikariCP").versionRef("hikaricp")
 | 
				
			||||||
      library("tailscale", "gay.pizza.tailscale", "tailscale").versionRef("libtailscale")
 | 
					      library("tailscale", "gay.pizza.tailscale", "tailscale").versionRef("libtailscale")
 | 
				
			||||||
 | 
					      library("tailscale-channel", "gay.pizza.tailscale", "tailscale-channel").versionRef("libtailscale")
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user