proper enums for message received, callback for getrooms

upm
Anton Franzluebbers 2022-01-30 20:51:42 -05:00
parent a6e6c02c12
commit 25b0a8744c
2 changed files with 35 additions and 22 deletions

View File

@ -1,4 +1,5 @@
using System; using System;
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Net.Sockets; using System.Net.Sockets;
@ -26,6 +27,14 @@ namespace VelNet
MESSAGE_GROUP = 5, MESSAGE_GROUP = 5,
MESSAGE_SETGROUP = 6 MESSAGE_SETGROUP = 6
}; };
public enum MessageReceiveType
{
MESSAGE_LOGIN = 0,
MESSAGE_GETROOMS = 1,
MESSAGE_JOINROOM = 2,
MESSAGE_DATA = 3,
MESSAGE_MASTER_CLIENT = 4,
};
public enum MessageType : byte public enum MessageType : byte
{ {
@ -106,18 +115,14 @@ namespace VelNet
public static bool InRoom => LocalPlayer != null && LocalPlayer.room != "-1" && LocalPlayer.room != ""; public static bool InRoom => LocalPlayer != null && LocalPlayer.room != "-1" && LocalPlayer.room != "";
public static string Room => LocalPlayer?.room; public static string Room => LocalPlayer?.room;
public static List<VelNetPlayer> Players => instance.players.Values.ToList();
/// <summary> /// <summary>
/// The player count in this room. /// The player count in this room.
/// -1 if not in a room. /// -1 if not in a room.
/// </summary> /// </summary>
public static int PlayerCount => instance.players.Count; public static int PlayerCount => instance.players.Count;
/// <summary>
/// The player count in all rooms.
/// Will include players connected to the server but not in a room?
/// </summary>
public static int PlayerCountInAllRooms => PlayerCount; // TODO hook up to actual player count
public static bool IsConnected => instance != null && instance.connected && instance.udpConnected; public static bool IsConnected => instance != null && instance.connected && instance.udpConnected;
//this is for sending udp packets //this is for sending udp packets
@ -538,12 +543,12 @@ namespace VelNet
{ {
//read a byte //read a byte
MessageSendType type = (MessageSendType)stream.ReadByte(); MessageReceiveType type = (MessageReceiveType)stream.ReadByte();
switch (type) switch (type)
{ {
//login //login
case MessageSendType.MESSAGE_LOGIN: case MessageReceiveType.MESSAGE_LOGIN:
{ {
LoginMessage m = new LoginMessage(); LoginMessage m = new LoginMessage();
m.userId = GetIntFromBytes(ReadExact(stream, 4)); //not really the sender... m.userId = GetIntFromBytes(ReadExact(stream, 4)); //not really the sender...
@ -551,7 +556,7 @@ namespace VelNet
break; break;
} }
//rooms //rooms
case MessageSendType.MESSAGE_GETROOMS: case MessageReceiveType.MESSAGE_GETROOMS:
{ {
RoomsMessage m = new RoomsMessage(); RoomsMessage m = new RoomsMessage();
m.rooms = new List<ListedRoom>(); m.rooms = new List<ListedRoom>();
@ -577,7 +582,7 @@ namespace VelNet
break; break;
} }
//joined //joined
case MessageSendType.MESSAGE_JOINROOM: case MessageReceiveType.MESSAGE_JOINROOM:
{ {
JoinMessage m = new JoinMessage(); JoinMessage m = new JoinMessage();
m.userId = GetIntFromBytes(ReadExact(stream, 4)); m.userId = GetIntFromBytes(ReadExact(stream, 4));
@ -588,10 +593,7 @@ namespace VelNet
break; break;
} }
//data //data
case MessageSendType.MESSAGE_OTHERS: case MessageReceiveType.MESSAGE_DATA:
// case MessageSendType.MESSAGE_OTHERS_ORDERED:
// case MessageSendType.MESSAGE_ALL:
// case MessageSendType.MESSAGE_ALL_ORDERED:
{ {
DataMessage m = new DataMessage(); DataMessage m = new DataMessage();
m.senderId = GetIntFromBytes(ReadExact(stream, 4)); m.senderId = GetIntFromBytes(ReadExact(stream, 4));
@ -601,7 +603,7 @@ namespace VelNet
break; break;
} }
//new master //new master
case MessageSendType.MESSAGE_ALL: case MessageReceiveType.MESSAGE_MASTER_CLIENT:
{ {
ChangeMasterMessage m = new ChangeMasterMessage(); ChangeMasterMessage m = new ChangeMasterMessage();
m.masterId = GetIntFromBytes(ReadExact(stream, 4)); //sender is the new master m.masterId = GetIntFromBytes(ReadExact(stream, 4)); //sender is the new master
@ -658,12 +660,12 @@ namespace VelNet
while (true) while (true)
{ {
int numReceived = udpSocket.Receive(buffer); int numReceived = udpSocket.Receive(buffer);
switch (buffer[0]) switch ((MessageReceiveType)buffer[0])
{ {
case 0: case MessageReceiveType.MESSAGE_LOGIN:
Debug.Log("UDP connected"); Debug.Log("UDP connected");
break; break;
case 3: case MessageReceiveType.MESSAGE_DATA:
{ {
DataMessage m = new DataMessage(); DataMessage m = new DataMessage();
//we should get the sender address //we should get the sender address
@ -745,9 +747,20 @@ namespace VelNet
SendTcpMessage(stream.ToArray()); SendTcpMessage(stream.ToArray());
} }
public static void GetRooms() public static void GetRooms(Action<RoomsMessage> callback = null)
{ {
SendTcpMessage(new byte[] { 1 }); //very simple message SendTcpMessage(new byte[] { 1 }); // very simple message
if (callback != null)
{
RoomsReceived += RoomsReceivedCallback;
}
void RoomsReceivedCallback(RoomsMessage msg)
{
callback(msg);
RoomsReceived -= RoomsReceivedCallback;
}
} }
/// <summary> /// <summary>

View File

@ -21,7 +21,7 @@ namespace VelNet
/// <summary> /// <summary>
/// For instantiation /// For instantiation
/// </summary> /// </summary>
public int lastObjectId; internal int lastObjectId;
private bool isMaster; private bool isMaster;