Skip to content

Commit

Permalink
no more static
Browse files Browse the repository at this point in the history
  • Loading branch information
SpazElectro committed Sep 6, 2023
1 parent 5ab8b9b commit 2523a44
Show file tree
Hide file tree
Showing 5 changed files with 151 additions and 105 deletions.
98 changes: 52 additions & 46 deletions experiments/adminpanel/GameClient.cs
Original file line number Diff line number Diff line change
@@ -1,27 +1,28 @@
using System.Net.WebSockets;
using JJ2ClientLib.JJ2;

public static class GameClient {
public static JJ2Client client = new JJ2Client();
public static WebSocketHandler wsHandler = new WebSocketHandler("http://127.0.0.1:1/");

public static void joinGame(string addr, ushort port, WebSocketHandler wsHandler) {
client.Console_Message_Recveived_Event += onConsoleMessageReceive;
client.Message_Received_Event += onMessageReceive;
client.Player_Joined_Event += onPlayerJoin;
client.Player_Left_Event += onPlayerLeft;

client.Level_Initialized_Event += onLevelInitialize;
client.Connected_Event += onConnect;
client.Disconnected_Event += onDisconnect;
client.Failed_To_Connect_Event += onConnectFail;
public class GameClient {
public JJ2Client client = new JJ2Client();
public WebSocketHandler wsHandler;

public GameClient(WebSocketHandler wsHandler) {
client.Console_Message_Recveived_Event += OnConsoleMessageReceive;
client.Message_Received_Event += OnMessageReceive;
client.Player_Joined_Event += OnPlayerJoin;
client.Player_Left_Event += OnPlayerLeft;
client.Level_Initialized_Event += OnLevelInitialize;
client.Connected_Event += OnConnect;
client.Disconnected_Event += OnDisconnect;
client.Failed_To_Connect_Event += OnConnectFail;

this.wsHandler = wsHandler;
}

public void JoinGame(string addr, ushort port) {
client.JoinServer(addr, null, "Admin", port);

GameClient.wsHandler = wsHandler;
}

public static List<JJ2Player> getPlayers() {
public List<JJ2Player> GetPlayers() {
List<JJ2Player> players = new List<JJ2Player>();

byte numOfPlayers = 0;
Expand Down Expand Up @@ -57,66 +58,71 @@ public static List<JJ2Player> getPlayers() {

// jj2 connection events

public static void onConsoleMessageReceive(string msg, byte msgType, object user)
public void OnConsoleMessageReceive(string msg, byte msgType, object user)
{
addTimeToString(ref msg);
logMessage(msg);
AddTimeToString(ref msg);
LogMessage(msg);
}

public static void onMessageReceive(string msg, string playerName, byte team, byte playerID, byte playerSocketIndex, object user)
public void OnMessageReceive(
string msg,
string playerName,
byte team,
byte playerID,
byte playerSocketIndex,
object user)
{
if (team > 0)
{
playerName = '[' + playerName + ']';
}

string line = string.Format("{0}: {1}", playerName, msg);
addTimeToString(ref line);
AddTimeToString(ref line);

logMessage(line);
LogMessage(line);
}

public static void onPlayerJoin(string playerName, byte playerID, byte socketIndex, byte character, byte team, object user)
public void OnPlayerJoin(
string playerName,
byte playerID,
byte socketIndex,
byte character,
byte team,
object user)
{
string line = string.Format("{0} has joined the game", playerName);
addTimeToString(ref line);
AddTimeToString(ref line);

logMessage(line);
LogMessage(line);
}

public static void onPlayerLeft(string playerName, JJ2_Disconnect_Message disconnectMessage, byte playerID, byte socketIndex, object user)
public void OnPlayerLeft(string playerName,
JJ2_Disconnect_Message disconnectMessage,
byte playerID,
byte socketIndex,
object user)
{
string line = string.Format("{0} has left the game", playerName);
addTimeToString(ref line);

logMessage(line);
}

public static void onLevelInitialize(string levelName, string yourName, byte yourID, byte yourSocketIndex, object user) {
logMessage(string.Format("* * * Level begin [{0}] at [{1}]", levelName, DateTime.Now.ToString()));
}
AddTimeToString(ref line);

public static void onConnect(string serverIPAddrees, string serverAddress, ushort serverPort, object user) {
logMessage(string.Format("* * * Connected to [{0}:{1}]", serverAddress, serverPort.ToString()));
LogMessage(line);
}

public static void onDisconnect(JJ2_Disconnect_Message disconnectMessage, string serverIPAddrees, string serverAddress, ushort serverPort, object user) {
logMessage(string.Format("* * * Disconnected from [{0}:{1}] at [{2}] with reason [{3}]", serverAddress, serverPort.ToString(), DateTime.Now.ToString(), disconnectMessage.ToString()));
}

public static void onConnectFail(string serverAddress, ushort serverPort, object user) {
logMessage(string.Format("* * * Unable to connect to [{0}:{1}] ", serverAddress, serverPort.ToString()));
}
public void OnLevelInitialize(string levelName, string yourName, byte yourID, byte yourSocketIndex, object user) => LogMessage(string.Format("* * * Level begin [{0}] at [{1}]", levelName, DateTime.Now.ToString()));
public void OnConnect(string serverIPAddrees, string serverAddress, ushort serverPort, object user) => LogMessage(string.Format("* * * Connected to [{0}:{1}]", serverAddress, serverPort.ToString()));
public void OnDisconnect(JJ2_Disconnect_Message disconnectMessage, string serverIPAddrees, string serverAddress, ushort serverPort, object user) => LogMessage(string.Format("* * * Disconnected from [{0}:{1}] at [{2}] with reason [{3}]", serverAddress, serverPort.ToString(), DateTime.Now.ToString(), disconnectMessage.ToString()));
public void OnConnectFail(string serverAddress, ushort serverPort, object user) => LogMessage(string.Format("* * * Unable to connect to [{0}:{1}] ", serverAddress, serverPort.ToString()));

// util
public static void logMessage(string msg) {
public void LogMessage(string msg) {
Console.WriteLine(msg);
wsHandler.Broadcast(async (client) => {
await client.SendAsync(WebSocketHandler.StringToArraySegment("message: " + msg), WebSocketMessageType.Text, true, CancellationToken.None);
}).Wait();
}

public static void addTimeToString(ref string s)
public static void AddTimeToString(ref string s)
{
DateTime d = DateTime.Now;
s = string.Format("[{0}:{1}:{2}] {3}", d.Hour.ToString("00"), d.Minute.ToString("00"), d.Second.ToString("00"), s);
Expand Down
16 changes: 11 additions & 5 deletions experiments/adminpanel/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,19 +31,25 @@ static string ServeFile(HttpContext context, string filePath, string contentType
}


app.MapGet("/", (HttpContext context) =>
{
string s = ServeFile(context, "wwwroot/index.html", "text/html");
// too lazy to make a file server
app.MapGet("/", (HttpContext context) => {
return ServeFile(context, "wwwroot/index.html", "text/html");
});

return s;
app.MapGet("/script.js", (HttpContext context) => {
return ServeFile(context, "wwwroot/script.js", "text/javascript");
});

WebSocketHandler ws = new("http://127.0.0.1:1337/");
GameClient gameClient = new(ws);

ws.SetGameClient(gameClient);

Thread serverThread = new Thread(() =>
{
ws.Start().Wait();
});

serverThread.Start();
GameClient.joinGame("127.0.0.1", 10052, ws);
gameClient.JoinGame("127.0.0.1", 10052);
app.Run();
19 changes: 15 additions & 4 deletions experiments/adminpanel/WebSocketHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@

public class WebSocketHandler
{
private readonly HttpListener _httpListener;
private readonly ConcurrentDictionary<string, WebSocket> _clients = new ConcurrentDictionary<string, WebSocket>();
public HttpListener _httpListener;
public ConcurrentDictionary<string, WebSocket> _clients = new ConcurrentDictionary<string, WebSocket>();
public GameClient? gameClient;

public WebSocketHandler(string url)
{
Expand Down Expand Up @@ -47,11 +48,20 @@ public static string ByteArrayToString(byte[] byteArray)
return string.Empty;
}

public void SetGameClient(GameClient client) {
gameClient = client;
}

public async Task Start()
{
_httpListener.Start();
Console.WriteLine("WebSocket server is running...");

if(gameClient == null) {
Console.WriteLine("[ERROR] WebSocketHandler.gameClient is null! Make sure to use SetGameClient!");
return;
}

while (true)
{
HttpListenerContext context = await _httpListener.GetContextAsync();
Expand All @@ -73,6 +83,7 @@ public async Task Broadcast(BroadcastDelegate delg)

private async Task HandleWebSocketAsync(HttpListenerContext context)
{
if(gameClient == null) return;
if (context.Request.IsWebSocketRequest)
{
HttpListenerWebSocketContext webSocketContext = await context.AcceptWebSocketAsync(null);
Expand Down Expand Up @@ -113,7 +124,7 @@ private async Task HandleWebSocketAsync(HttpListenerContext context)
if (type == "message") {
if(content.StartsWith("/server ")) {
if(content == "/server players") {
var players = GameClient.getPlayers();
var players = gameClient.GetPlayers();
var finalString = "!";
foreach(var player in players) {
Expand All @@ -124,7 +135,7 @@ await Broadcast(async (client) => {
await client.SendAsync(StringToArraySegment("message:" + finalString), WebSocketMessageType.Text, true, CancellationToken.None);
});
}
} else GameClient.client.SendMessage(content);
} else gameClient.client.SendMessage(content);
}
// await Broadcast(async (client) => await client.SendAsync(StringToArraySegment("message:User: " + content), WebSocketMessageType.Text, true, CancellationToken.None));
}
Expand Down
61 changes: 11 additions & 50 deletions experiments/adminpanel/wwwroot/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,64 +13,25 @@
#messages { list-style-type: none; margin: 0; padding: 0; }
#messages > li { padding: 0.5rem 1rem; }
#messages > li:nth-child(odd) { background: #efefef; }

#player-list li img {
margin-bottom: -25px;
}
</style>
</head>
<body>
<ul id="messages"></ul>
<form id="form" action="">
<input id="input" autocomplete="off" /><button>Send</button>
</form>
<script>
const socket = new WebSocket("ws://127.0.0.1:1337/"); // WebSocket server URL

socket.onopen = () => {
console.log("WebSocket connection established!");
};

socket.onmessage = (event) => {
const message = event.data;

const type = message.slice(0, message.indexOf(':')).trim();
const content = message.slice(message.indexOf(':') + 1).trim();

console.log(`Type: ${type}`);
console.log(`Content: ${content}`);
<div style="position: fixed; top: 0; right: 0; padding: 1rem;">
<h2>Player List</h2>
<ul id="player-list">

if(type == "message") {
var item = document.createElement("li");
item.textContent = content;
messages.appendChild(item);
window.scrollTo(0, document.body.scrollHeight);
}
};

socket.onclose = () => {
console.log("WebSocket connection closed!");
};

var form = document.getElementById("form");
var input = document.getElementById("input");

function getCurrentFormattedTime() {
const d = new Date();
const formattedTime = `[${d.getHours().toString().padStart(2, '0')}:${d.getMinutes().toString().padStart(2, '0')}:${d.getSeconds().toString().padStart(2, '0')}]`;
return formattedTime;
}

form.addEventListener("submit", function(e) {
e.preventDefault();

if (input.value) {
// prediction
var item = document.createElement("li");
item.textContent = `${getCurrentFormattedTime()} Admin: ${input.value}`;
messages.appendChild(item);
window.scrollTo(0, document.body.scrollHeight);

socket.send("message:" + input.value);
input.value = "";
}
});
</script>
</ul>
</div>

<script src="script.js"></script>
</body>
</html>
62 changes: 62 additions & 0 deletions experiments/adminpanel/wwwroot/script.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@

const socket = new WebSocket("ws://127.0.0.1:1337/"); // WebSocket server URL

socket.onopen = () => {
console.log("WebSocket connection established!");
};

socket.onmessage = (event) => {
const message = event.data;

const type = message.slice(0, message.indexOf(':')).trim();
const content = message.slice(message.indexOf(':') + 1).trim();

console.log(`Type: ${type}`);
console.log(`Content: ${content}`);

if(type == "message") {
var item = document.createElement("li");
item.textContent = content;
messages.appendChild(item);
window.scrollTo(0, document.body.scrollHeight);
}
};

socket.onclose = () => {
console.log("WebSocket connection closed!");
};

var form = document.getElementById("form");
var input = document.getElementById("input");

function getCurrentFormattedTime() {
const d = new Date();
const formattedTime = `[${d.getHours().toString().padStart(2, '0')}:${d.getMinutes().toString().padStart(2, '0')}:${d.getSeconds().toString().padStart(2, '0')}]`;
return formattedTime;
}

function addNewPlayer(furA, furB, furC, furD, char, name) {
let li = document.createElement("li");
let img = document.createElement("img");
img.src = `https://jazzjackrabbit.net/fur/fur.php?a=${furA}&b=${furB}&c=${furC}&d=${furD}&char=${char}&frame=3`;
li.appendChild(img);
li.appendChild(document.createTextNode(name));
document.getElementById("player-list").appendChild(li);
}

addNewPlayer(32, 48, 64, 0, "spaz", "PI");

form.addEventListener("submit", function(e) {
e.preventDefault();

if (input.value) {
// prediction
var item = document.createElement("li");
item.textContent = `${getCurrentFormattedTime()} Admin: ${input.value}`;
messages.appendChild(item);
window.scrollTo(0, document.body.scrollHeight);

socket.send("message:" + input.value);
input.value = "";
}
});

0 comments on commit 2523a44

Please sign in to comment.