@ditchoom/socket-kt
v1.0.61
Published
[![Contributors][contributors-shield]][contributors-url] [![Forks][forks-shield]][forks-url] [![Stargazers][stars-shield]][stars-url] [![Issues][issues-shield]][issues-url] [![MIT License][license-shield]][license-url] [![LinkedIn][linkedin-shield]][linke
Downloads
1
Readme
About The Project
Managing metwork calls can be slightly different based on each platform. This project aims to make it easier to manage sockets in a cross platform way using kotlin multiplatform. This was originally created as a side project for a kotlin multiplatform mqtt data sync solution.
Runtime Dependencies
Supported Platforms
| Platform | 🛠Builds🛠 + 🔬Tests🔬 | Deployed Artifact | Non Kotlin Sample |
| :---: | :---: |:---------------------------------:|:-----------------:|
| JVM
1.8 |🚀| maven central | WIP |
| Node.js
|🚀| npm 🔮 | WIP |
| Browser
(Chrome) |🚀| unavailable | WIP |
| Android
|🚀| maven central | WIP |
| iOS
|🔮| Need help | WIP |
| WatchOS
|🔮| Need help | WIP |
| TvOS
|🔮| Need help | WIP |
| MacOS
|🔮| Need help | WIP |
| Linux X64
|🔮| Need help | WIP |
| Windows X64
|🔮| Need help | WIP |
Help needed for getting a native socket to work for other platforms. For Apple products we want to use APIs that work on cellular networks not just WiFi
Installation
- Add
implementation("com.ditchoom:socket:$version")
to yourbuild.gradle
dependencies
Client Socket Usage
Suspend connect read write and close
// Run in a coroutine scope
val socket = ClientSocket.connect(
port = 80, // no default
hostname = "example.com", // null is default which points to localhost
timeout = 1.seconds, // default
socketOptions = null, // default
)
val isOpen = socket.isOpen()
val localPort = socket.localPort()
val remotePort = socket.remotePort()
val stringRead = socket.readUtf8() // read a utf8 string
val readBuffer = socket.read() // read a ReadBuffer as defined in the buffer module
val bytesWritten = socket.write(buffer) // write the buffer to the socket
socket.close() // close the socket
Or use lambda which auto closes the socket
// Run in a coroutine scope, same defaults as the other `connect` method
val response = ClientSocket.connect(80, hostname = "example.com") { socket ->
val request =
"""
GET / HTTP/1.1
Host: example.com
Connection: close
"""
val bytesWritten = socket.write(request)
socket.read() // can throw a SocketClosedException
}
// response is populated, no need to call socket.close()
TLS support
// Simply add tls=true to your ClientSocket.connect or ClientSocket.allocate
val response = ClientSocket.connect(port, hostname, tls = true) { socket ->
// do something
}
Building Locally
git clone [email protected]:DitchOoM/socket.git
- Open cloned directory with Intellij IDEA.
- Be sure to open with gradle
Roadmap
See the open issues for a list of proposed features (and known issues).
Contributing
Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
License
Distributed under the Apache 2.0 License. See LICENSE
for more information.