Last active
December 3, 2023 22:45
-
-
Save valentinbreiz/5f5ba0e3a37dd5570c1a821a9e0872c0 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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