Skip to content

Latest commit

 

History

History
80 lines (66 loc) · 2.16 KB

README.md

File metadata and controls

80 lines (66 loc) · 2.16 KB

Tuna

A Lightweight and High Performance Java Network Framework with the following features:

  • High Performance and High Scalability
  • Server / Client Connections
  • Event and Filter Support
  • SSL Support
  • Non-Blocking NIO
  • Various useful components, including debug, compression, DoS filter, HTTP support, proxy, multiplex, ...
  • Single-Thread, Easy Programming

Tuna can be used as a maven dependency:

<dependency>
    <groupId>com.xqbase</groupId>
    <artifactId>tuna-core</artifactId>
    <version>0.1.1</version>
</dependency>

Here is an example to establish a broadcasting server:

import java.io.IOException;
import java.util.HashSet;

import com.xqbase.tuna.Connection;
import com.xqbase.tuna.ConnectionHandler;
import com.xqbase.tuna.ConnectionSession;
import com.xqbase.tuna.ConnectorImpl;

public class TestBroadcast {
	static final ConnectionHandler[] EMPTY_HANDLERS = {};

	public static void main(String[] args) throws IOException {
		// All connected handlers
		HashSet<ConnectionHandler> handlers = new HashSet<>();
		// Initialize a connector
		try (ConnectorImpl connector = new ConnectorImpl()) {
			connector.add(() -> {
				return new Connection() {
					ConnectionHandler handler;

					@Override
					public void setHandler(ConnectionHandler handler) {
						this.handler = handler;
					}

					@Override
					public void onRecv(byte[] b, int off, int len) {
						for (ConnectionHandler handler_ : handlers.toArray(EMPTY_HANDLERS)) {
							// "connection.onDisconnect()" might change "handlers"
							// Broadcast to all connected handlers
							handler_.send(b, off, len);
						}
					}

					@Override
					public void onConnect(ConnectionSession session) {
						handlers.add(handler);
					}

					@Override
					public void onDisconnect() {
						handlers.remove(handler);
					}
				};
			}, 23);
			// Keep the server running for 10 minutes
			connector.postDelayed(connector::interrupt, 600000);
			// "doEvents()" makes the connector working
			connector.doEvents();
		}
	}
}

Run this program and type telnet localhost in several Command Prompt windows to test it.