FireLite is an extremely lightweight TCP Socket Server/Client Library that enables you to quickly and easily setup client/server communication in your .NET applications.
FireLite was built primarily to facilitate the creation of a lightweight online multiplayer game and so it's key functionality is to provide a simple and elegant solution to transferring raw bytes over a TCP connection.
Open NuGet Packet Manager Console and type:
Install-Package FireLite.Core
To create a basic server, you simply inherit from FireLite.Core.Network.Server
.
public class BasicServer : FireLite.Core.Network.Server
{
public BasicServer(int port) : base(port) { }
}
You can then start your server in a Console Application as follows:
static void Main(string[] args)
{
var server = new BasicServer(1337);
server.Start();
Console.WriteLine("Press any key to stop the server.")
Console.ReadKey();
server.Stop();
}
The Server
class is an abstract base implementation that must be inherited from.
public int Port
protected IList<ClientConnection> ConnectedClients
public void Start()
public void Stop()
protected virtual void OnStarted()
protected virtual void OnStopped()
protected virtual void OnClientConnected(ClientConnection)
protected virtual void OnClientDisconnected(ClientConnection)
protected virtual void OnClientPacketReceived(ClientConnection, byte[])
The ClientConnection
class represents a single connected client.
public Guid Id
public void SendPacket(byte[])
public void Disconnect()
There are several protected methods available for you to override which allow you to customize how your server interacts with clients. These are:
protected virtual void OnStarted()
protected virtual void OnStopped()
protected virtual void OnClientConnected(ClientConnection)
protected virtual void OnClientDisconnected(ClientConnection)
protected virtual void OnClientPacketReceived(ClientConnection, byte[])
An example use case of overriding one of these methods would be to send a welcome message to a client when they connect to the server.
protected override void OnClientConnected(ClientConnection clientConnection)
{
var message = "Hello, client. Welcome to the server".GetBytes();
clientConnection.SendPacket(message);
}
To create a basic client, you simply inherit from FireLite.Core.Network.Client
.
public class BasicClient : FireLite.Core.Network.Client
{
public BasicClient(string host, int port) : base(host, port) { }
}
You can then connect your client to a server in a Console Application as follows:
static void Main(string[] args)
{
var client = new BasicClient("127.0.0.1", 1337);
client.Connect();
Console.WriteLine("Press any key to disconnect");
Console.ReadKey();
client.Disconnect();
}
The Client
class is an abstract base implementation that must be inherited from.
public string Host
public int Port
public bool Connect()
public void Disconnect()
public void SendPacket(byte[])
protected virtual void OnConnected()
protected virtual void OnConnectionFailed()
protected virtual void OnDisconnected()
protected virtual void OnPacketReceived(byte[])
There are several protected methods available for you to override which allow you to customize how your client interacts with the server. These are:
protected virtual void OnConnected()
protected virtual void OnConnectionFailed()
protected virtual void OnDisconnected()
protected virtual void OnPacketReceived(byte[])
An example use case of overriding one of these methods would be to send a response back to the server when you receive a specific message.
protected override void OnPacketReceived(byte[] packetBytes)
{
var message = packetBytes.GetString();
if (message == "Hello, world!")
{
var response = "Oh hi, server!".GetBytes();
SendPacket(response);
}
}
FireLite comes with a couple of extension methods that facilitate sending UTF8 encoded strings over the TCP connection. These include:
string GetString(this byte[])
byte[] GetString(this string)
It also comes with a few NetworkStream
extension methods that facilitate sending and receiving TCP packets. These are really only meant to be used internally by FireLite.Core
classes, but they have been made public should you wish to use them for any reason. These include:
byte[] ReadNBytes(this NetworkStream)
byte[] ReadPacket(this NetworkStream)
void SendPacket(this NetworkStream, byte[])