Skip to content

Instantly share code, notes, and snippets.

@valentinbreiz
Last active December 3, 2023 22:45
Show Gist options
  • Save valentinbreiz/5f5ba0e3a37dd5570c1a821a9e0872c0 to your computer and use it in GitHub Desktop.
Save valentinbreiz/5f5ba0e3a37dd5570c1a821a9e0872c0 to your computer and use it in GitHub Desktop.
using System;
using System.Text;
using Sys = Cosmos.System;
using System.Net.Sockets;
using System.Net;
namespace GraphicTest
{
class TcpServer
{
private TcpListener tcpListener;
private int port;
public TcpServer(int port)
{
Cosmos.HAL.Global.debugger.Send("Starting TCP server.");
this.port = port;
Cosmos.HAL.Global.debugger.Send("Defining empty address.");
var address = IPAddress.Any;
Cosmos.HAL.Global.debugger.Send("address=" + address.ToString());
Cosmos.HAL.Global.debugger.Send("Starting TCP listener.");
this.tcpListener = new TcpListener(address, port);
Cosmos.HAL.Global.debugger.Send("TCP listener started.");
}
public void Start()
{
this.tcpListener.Start();
Cosmos.HAL.Global.debugger.Send($"Server started on port {port}.");
while (true)
{
Cosmos.HAL.Global.debugger.Send("Waiting for a connection...");
TcpClient client = this.tcpListener.AcceptTcpClient();
Cosmos.HAL.Global.debugger.Send("Client connected.");
HandleClientComm(client);
Cosmos.HAL.Global.debugger.Send("closing connection...");
client.Close();
Cosmos.HAL.Global.debugger.Send("Connection closed.");
}
}
private void HandleClientComm(TcpClient client)
{
NetworkStream stream = client.GetStream();
Cosmos.HAL.Global.debugger.Send("Got stream!");
byte[] buffer = new byte[client.ReceiveBufferSize];
int bytesRead;
Cosmos.HAL.Global.debugger.Send("Created buffer!");
while (true)
{
bytesRead = 0;
Cosmos.HAL.Global.debugger.Send("Reading...");
bytesRead = stream.Read(buffer, 0, buffer.Length); // Blocks until a client sends a message
Cosmos.HAL.Global.debugger.Send("Read " + bytesRead + " bytes!");
if (bytesRead == 0) // The client has disconnected from the server
{
Cosmos.HAL.Global.debugger.Send("bytesRead=0");
break;
}
Cosmos.HAL.Global.debugger.Send("Trying read");
string received = Encoding.ASCII.GetString(buffer, 0, bytesRead);
Cosmos.HAL.Global.debugger.Send("Received: " + received);
if (received.StartsWith("close"))
{
break;
}
byte[] response = Encoding.ASCII.GetBytes("ok");
stream.Write(response, 0, response.Length);
Cosmos.HAL.Global.debugger.Send("TCP Server juyuthtfcvgcgcgx");
// stream.Flush();
}
Cosmos.HAL.Global.debugger.Send("TCP Server 1");
stream.Close();
Cosmos.HAL.Global.debugger.Send("TCP Server 2");
}
}
public class Kernel : Sys.Kernel
{
protected override void BeforeRun()
{
using Cosmos.System.Network.IPv4.UDP.DHCP.DHCPClient dhcp = new Cosmos.System.Network.IPv4.UDP.DHCP.DHCPClient();
if (dhcp.SendDiscoverPacket() == -1)
{
Cosmos.HAL.Global.debugger.Send("DHCP timed out. Halt.");
Cosmos.Core.CPU.Halt();
}
Cosmos.HAL.Global.debugger.Send("DHCP done.");
TcpServer server = new TcpServer(3000); // Use the port you want here
server.Start();
}
protected override void Run()
{
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment