diff --git a/Runtime/VelNetManager.cs b/Runtime/VelNetManager.cs index 4d4640e..0185940 100644 --- a/Runtime/VelNetManager.cs +++ b/Runtime/VelNetManager.cs @@ -1,4 +1,5 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Linq; using System.Net.Sockets; @@ -26,6 +27,14 @@ namespace VelNet MESSAGE_GROUP = 5, 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 { @@ -106,18 +115,14 @@ namespace VelNet public static bool InRoom => LocalPlayer != null && LocalPlayer.room != "-1" && LocalPlayer.room != ""; public static string Room => LocalPlayer?.room; + public static List Players => instance.players.Values.ToList(); + /// /// The player count in this room. /// -1 if not in a room. /// public static int PlayerCount => instance.players.Count; - /// - /// The player count in all rooms. - /// Will include players connected to the server but not in a room? - /// - public static int PlayerCountInAllRooms => PlayerCount; // TODO hook up to actual player count - public static bool IsConnected => instance != null && instance.connected && instance.udpConnected; //this is for sending udp packets @@ -264,7 +269,7 @@ namespace VelNet case RoomsMessage rm: { Debug.Log("Got Rooms Message:\n" + rm); - + try { RoomsReceived?.Invoke(rm); @@ -538,12 +543,12 @@ namespace VelNet { //read a byte - MessageSendType type = (MessageSendType)stream.ReadByte(); + MessageReceiveType type = (MessageReceiveType)stream.ReadByte(); switch (type) { //login - case MessageSendType.MESSAGE_LOGIN: + case MessageReceiveType.MESSAGE_LOGIN: { LoginMessage m = new LoginMessage(); m.userId = GetIntFromBytes(ReadExact(stream, 4)); //not really the sender... @@ -551,7 +556,7 @@ namespace VelNet break; } //rooms - case MessageSendType.MESSAGE_GETROOMS: + case MessageReceiveType.MESSAGE_GETROOMS: { RoomsMessage m = new RoomsMessage(); m.rooms = new List(); @@ -577,7 +582,7 @@ namespace VelNet break; } //joined - case MessageSendType.MESSAGE_JOINROOM: + case MessageReceiveType.MESSAGE_JOINROOM: { JoinMessage m = new JoinMessage(); m.userId = GetIntFromBytes(ReadExact(stream, 4)); @@ -588,10 +593,7 @@ namespace VelNet break; } //data - case MessageSendType.MESSAGE_OTHERS: - // case MessageSendType.MESSAGE_OTHERS_ORDERED: - // case MessageSendType.MESSAGE_ALL: - // case MessageSendType.MESSAGE_ALL_ORDERED: + case MessageReceiveType.MESSAGE_DATA: { DataMessage m = new DataMessage(); m.senderId = GetIntFromBytes(ReadExact(stream, 4)); @@ -601,7 +603,7 @@ namespace VelNet break; } //new master - case MessageSendType.MESSAGE_ALL: + case MessageReceiveType.MESSAGE_MASTER_CLIENT: { ChangeMasterMessage m = new ChangeMasterMessage(); m.masterId = GetIntFromBytes(ReadExact(stream, 4)); //sender is the new master @@ -658,12 +660,12 @@ namespace VelNet while (true) { int numReceived = udpSocket.Receive(buffer); - switch (buffer[0]) + switch ((MessageReceiveType)buffer[0]) { - case 0: + case MessageReceiveType.MESSAGE_LOGIN: Debug.Log("UDP connected"); break; - case 3: + case MessageReceiveType.MESSAGE_DATA: { DataMessage m = new DataMessage(); //we should get the sender address @@ -745,9 +747,20 @@ namespace VelNet SendTcpMessage(stream.ToArray()); } - public static void GetRooms() + public static void GetRooms(Action 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; + } } /// diff --git a/Runtime/VelNetPlayer.cs b/Runtime/VelNetPlayer.cs index 21a3f7c..2c1ff07 100644 --- a/Runtime/VelNetPlayer.cs +++ b/Runtime/VelNetPlayer.cs @@ -21,7 +21,7 @@ namespace VelNet /// /// For instantiation /// - public int lastObjectId; + internal int lastObjectId; private bool isMaster;