[go: up one dir, main page]

esocklib

An event-based implementation of TCP and UDP sockets.
https://github.com/AngelWyvern/hx-esocklib

To install, run:

haxelib install esocklib 0.0.2 

See using Haxelib in Haxelib documentation for more information.

README.md

hx-esocklib

⚠️ Warning: This library was made to study Haxe networking.
This is mostly a Proof of Concept and may not receive many updates.

This is the repository for hx-esocklib (short for Event-Based Socket Library), an alternative implementation for TCP and UDP sockets powered by an event system.

The use of events eliminates the need for manually checking to see if there's any new clients or data while massively simplifying the code writing process.

Implementation partially based on OpenFL's socket and NodeJS's socket.

Basic Usage Samples

TCP Client

import esock.net.SocketError;
import esock.net.tcp.Socket;
import haxe.io.Bytes;

var socket:Socket = new Socket();

socket.addListener(onConnect, () ->
{
	trace("Connection established!");

	socket.write("Ping");
});

socket.addListener(onData, (buffer:Bytes) ->
{
	trace("Incoming data: " + buffer.toString());
});

socket.addListener(onError, (err:SocketError) ->
{
	trace("Error: " + err.getName());
});

socket.addListener(onClose, (hadErr:Bool) ->
{
	if (hadErr)
		trace("Socket closed prematurely.");
	else
		trace("Socket closed.");
});

socket.connect("127.0.0.1", 3000);

while (!socket.closed)
	socket.poll();

TCP Server

import esock.net.SocketError;
import esock.net.tcp.Server;
import esock.net.tcp.Socket;
import haxe.io.Bytes;

var server:Server = new Server();

server.addListener(onListening, () ->
{
	trace("Listening on " + server.localAddress + ":" + server.localPort);
});

server.addListener(onConnection, (client:Socket) ->
{
	trace("Client connected.");

	client.addListener(onData, (buffer:Bytes) ->
	{
		var str:String = buffer.toString();
		trace("Incoming data: " + str);

		if (str == "Ping")
			client.write("Pong");
	});

	client.addListener(onError, (err:SocketError) ->
	{
		trace("Client error: " + err.getName());
	});

	client.addListener(onClose, (hadErr:Bool) ->
	{
		if (hadErr)
			trace("Client closed prematurely.");
		else
			trace("Client closed.");
	});
});

server.addListener(onError, (err:SocketError) ->
{
	trace("Error: " + err.getName());
});

server.addListener(onClose, (hadErr:Bool) ->
{
	if (hadErr)
		trace("Server closed prematurely.");
	else
		trace("Server closed.");
});

server.listen();

while (server.listening)
	server.poll();

UDP Socket

import esock.net.SocketError;
import esock.net.udp.Socket;
import haxe.io.Bytes;

var socket:Socket = new Socket();

socket.addListener(onData, (buffer:Bytes, from:{address:String, port:Int}) ->
{
	var str:String = buffer.toString();
	trace("Incoming data: " + str);

	if (str == 'Ping')
		socket.writeTo('Pong', from.address, from.port);

});

socket.addListener(onError, (err:SocketError) ->
{
	trace("Error: " + err.getName());
});

while (true)
	socket.poll();

Reference

Events

TCP Socket:

EventDescriptionArguments
onConnectDispatches whenever a new connection has been established.()
onDataDispatches whenever new data is available.(buffer:haxe.io.Bytes)
onErrorDispatches whenever an error has occurred.(err:esock.net.SocketError)
onCloseDispatches whenever this socket is closed.(hadErr:Bool)

TCP Server:

EventDescriptionArguments
onListeningDispatches whenever this socket starts listening for new connections.()
onConnectionDispatches whenever a new socket has connected to this socket.(client:esock.net.tcp.Socket)
onErrorDispatches whenever an error has occurred.(err:esock.net.SocketError)
onCloseDispatches whenever this socket is closed.(hadErr:Bool)

UDP Socket:

EventDescriptionArguments
onDataDispatches whenever new data is available.(buffer:haxe.io.Bytes, from:{address:String, port:Int})
onErrorDispatches whenever an error has occurred.(err:esock.net.SocketError)
Contributors
AngelBot
Version
0.0.2
Published
6 weeks ago
License
MIT

All libraries are free

Every month, more than a thousand developers use Haxelib to find, share, and reuse code — and assemble it in powerful new ways. Enjoy Haxe; It is great!

Explore Haxe

Haxe Manual

Haxe Code Cookbook

Haxe API documentation

You can try Haxe in the browser! try.haxe.org

Join us on GitHub!

Haxe is being developed on GitHub. Feel free to contribute or report issues to our projects.

Haxe on GitHub