diff --git a/Runtime/NetworkManager.cs b/Runtime/NetworkManager.cs index d75611e..1780255 100644 --- a/Runtime/NetworkManager.cs +++ b/Runtime/NetworkManager.cs @@ -25,13 +25,13 @@ namespace VelNetUnity private TcpClient socketConnection; private Socket udpSocket; - public bool udpConnected = false; - IPEndPoint RemoteEndPoint; + public bool udpConnected; + private IPEndPoint RemoteEndPoint; private Thread clientReceiveThread; private Thread clientReceiveThreadUDP; public int userid = -1; public string room; - int messagesReceived = 0; + private int messagesReceived = 0; public GameObject playerPrefab; public Dictionary players = new Dictionary(); @@ -44,7 +44,7 @@ namespace VelNetUnity public NetworkObject[] sceneObjects; public List deletedSceneObjects = new List(); public Dictionary objects = new Dictionary(); //maintains a list of all known objects on the server (ones that have ids) - NetworkPlayer masterPlayer = null; + private NetworkPlayer masterPlayer; #endregion @@ -56,16 +56,16 @@ namespace VelNetUnity public int sender; } - public List receivedMessages = new List(); + public readonly List receivedMessages = new List(); - void Start() + private void Start() { ConnectToTcpServer(); sceneObjects = FindObjectsOfType(); //add all local network objects } - private void addMessage(Message m) + private void AddMessage(Message m) { lock (receivedMessages) { @@ -87,7 +87,7 @@ namespace VelNetUnity Debug.Log("joined server"); //start the udp thread - clientReceiveThreadUDP = new Thread(new ThreadStart(ListenForDataUDP)); + clientReceiveThreadUDP = new Thread(ListenForDataUDP); clientReceiveThreadUDP.IsBackground = true; clientReceiveThreadUDP.Start(); } @@ -106,7 +106,7 @@ namespace VelNetUnity if (m.text != "") { - NetworkPlayer player = Instantiate(playerPrefab).GetComponent(); + NetworkPlayer player = Instantiate(playerPrefab).GetComponent(); player.isLocal = true; player.userid = m.sender; @@ -131,7 +131,7 @@ namespace VelNetUnity { if (me.isLocal && me == masterPlayer) //I'm the local master player, so can take ownership immediately { - me.takeOwnership(kvp.Key); + me.TakeOwnership(kvp.Key); } else if (players[m.sender] == masterPlayer) //the master player left, so everyone should set the owner null (we should get a new master shortly) { @@ -146,7 +146,7 @@ namespace VelNetUnity else { //we got a join mesage, create it - NetworkPlayer player = Instantiate(playerPrefab).GetComponent(); + NetworkPlayer player = Instantiate(playerPrefab).GetComponent(); player.isLocal = false; player.room = m.text; player.userid = m.sender; @@ -159,7 +159,7 @@ namespace VelNetUnity if (m.type == 3) //generic message { - players[m.sender]?.handleMessage(m); + players[m.sender]?.HandleMessage(m); } if (m.type == 4) //change master player (this should only happen when the first player joins or if the master player leaves) @@ -183,7 +183,7 @@ namespace VelNetUnity masterPlayer = players[m.sender]; } - masterPlayer.setAsMasterPlayer(); + masterPlayer.SetAsMasterPlayer(); //master player should take over any objects that do not have an owner @@ -196,7 +196,7 @@ namespace VelNetUnity } } - messageReceived(m); + MessageReceived(m); } receivedMessages.Clear(); @@ -208,12 +208,12 @@ namespace VelNetUnity socketConnection.Close(); } - public Action joinedRoom = delegate { }; - public Action messageReceived = delegate { }; - public Action loggedIn = delegate { }; - public Action roomsReceived = delegate { }; + public Action JoinedRoom = delegate { }; + public Action MessageReceived = delegate { }; + public Action LoggedIn = delegate { }; + public Action RoomsReceived = delegate { }; - public bool connected = false; + public bool connected; /// /// Setup socket connection. @@ -222,7 +222,7 @@ namespace VelNetUnity { try { - clientReceiveThread = new Thread(new ThreadStart(ListenForData)); + clientReceiveThread = new Thread(ListenForData); clientReceiveThread.IsBackground = true; clientReceiveThread.Start(); } @@ -232,7 +232,7 @@ namespace VelNetUnity } } - void handleMessage(string s) //this parses messages from the server, and adds them to a queue to be processed on the main thread + private void HandleMessage(string s) //this parses messages from the server, and adds them to a queue to be processed on the main thread { Message m = new Message(); string[] sections = s.Split(':'); @@ -249,7 +249,7 @@ namespace VelNetUnity m.type = type; m.sender = int.Parse(sections[1]); m.text = ""; - addMessage(m); + AddMessage(m); } break; @@ -268,7 +268,7 @@ namespace VelNetUnity string new_room = sections[2]; m.text = new_room; - addMessage(m); + AddMessage(m); } break; @@ -280,7 +280,7 @@ namespace VelNetUnity m.type = 3; m.sender = int.Parse(sections[1]); m.text = sections[2]; - addMessage(m); + AddMessage(m); } break; @@ -291,7 +291,7 @@ namespace VelNetUnity { m.type = 4; m.sender = int.Parse(sections[1]); - addMessage(m); + AddMessage(m); } break; @@ -310,7 +310,7 @@ namespace VelNetUnity { socketConnection = new TcpClient(host, port); socketConnection.NoDelay = true; - Byte[] bytes = new Byte[1024]; + byte[] bytes = new byte[1024]; string partialMessage = ""; while (true) { @@ -321,7 +321,7 @@ namespace VelNetUnity // Read incomming stream into byte arrary. while ((length = stream.Read(bytes, 0, bytes.Length)) != 0) { - var incommingData = new byte[length]; + byte[] incommingData = new byte[length]; Array.Copy(bytes, 0, incommingData, 0, length); // Convert byte array to string message. string serverMessage = Encoding.ASCII.GetString(incommingData); @@ -334,12 +334,12 @@ namespace VelNetUnity { if (i == 0) { - handleMessage(partialMessage + sections[0]); + HandleMessage(partialMessage + sections[0]); partialMessage = ""; } else { - handleMessage(sections[i]); + HandleMessage(sections[i]); } } } @@ -365,7 +365,7 @@ namespace VelNetUnity //I don't yet have a UDP connection try { - var addresses = Dns.GetHostAddresses(host); + IPAddress[] addresses = Dns.GetHostAddresses(host); Debug.Assert(addresses.Length > 0); RemoteEndPoint = new IPEndPoint(addresses[0], port); @@ -408,7 +408,7 @@ namespace VelNetUnity if (sections[0] == "3") { - handleMessage(message); + HandleMessage(message); } } } @@ -459,22 +459,22 @@ namespace VelNetUnity } } - public void login(string username, string password) + public void Login(string username, string password) { SendNetworkMessage("0:" + username + ":" + password); } - public void join(string roomname) + public void Join(string roomname) { SendNetworkMessage("2:" + roomname); } - public void leave() + public void Leave() { SendNetworkMessage("2:-1"); } - public void sendTo(MessageType type, string message, bool reliable = true) + public void SendTo(MessageType type, string message, bool reliable = true) { if (reliable) { @@ -486,7 +486,7 @@ namespace VelNetUnity } } - public void sendToGroup(string group, string message, bool reliable = true) + public void SendToGroup(string group, string message, bool reliable = true) { if (reliable) { @@ -499,12 +499,12 @@ namespace VelNetUnity } //changes the designated group that sendto(4) will go to - public void setupMessageGroup(string groupname, int[] userids) + public void SetupMessageGroup(string groupname, int[] userids) { SendNetworkMessage("5:" + groupname + ":" + String.Join(":", userids)); } - public void deleteNetworkObject(string networkId) + public void DeleteNetworkObject(string networkId) { if (objects.ContainsKey(networkId)) { diff --git a/Runtime/NetworkObject.cs b/Runtime/NetworkObject.cs index 3a43a9f..c106206 100644 --- a/Runtime/NetworkObject.cs +++ b/Runtime/NetworkObject.cs @@ -10,7 +10,7 @@ namespace VelNetUnity public NetworkPlayer owner; public string networkId; //this is forged from the combination of the creator's id (-1 in the case of a scene object) and an object id, so it's always unique for a room public string prefabName; //this may be empty if it's not a prefab (scene object) - public bool isSceneObject = false; - public abstract void handleMessage(string identifier, byte[] message); + public bool isSceneObject; + public abstract void HandleMessage(string identifier, byte[] message); } } \ No newline at end of file diff --git a/Runtime/NetworkPlayer.cs b/Runtime/NetworkPlayer.cs index 13d6b61..1c1e46f 100644 --- a/Runtime/NetworkPlayer.cs +++ b/Runtime/NetworkPlayer.cs @@ -15,21 +15,21 @@ namespace VelNetUnity public string room; public NetworkManager manager; - public bool isLocal = false; + public bool isLocal; - public int lastObjectId = 0; //for instantiation + public int lastObjectId; //for instantiation - private bool isMaster = false; + private bool isMaster; private void Start() { myObject.owner = this; manager = FindObjectOfType(); - manager.onPlayerJoined += handlePlayerJoined; + manager.onPlayerJoined += HandlePlayerJoined; } - public void handlePlayerJoined(NetworkPlayer player) + public void HandlePlayerJoined(NetworkPlayer player) { //if this is the local player, go through the objects that I own, and send instantiation messages for the ones that have prefab names if (isLocal) @@ -38,20 +38,20 @@ namespace VelNetUnity { if (kvp.Value.owner == this && kvp.Value.prefabName != "") { - manager.sendTo(NetworkManager.MessageType.OTHERS, "7," + kvp.Value.networkId + "," + kvp.Value.prefabName); + manager.SendTo(NetworkManager.MessageType.OTHERS, "7," + kvp.Value.networkId + "," + kvp.Value.prefabName); } } if (isMaster) { //send a list of scene object ids when someone joins - sendSceneUpdate(); + SendSceneUpdate(); } } } - public void handleMessage(NetworkManager.Message m) + public void HandleMessage(NetworkManager.Message m) { //these are generally things that come from the "owner" and should be enacted locally, where appropriate //we need to parse the message @@ -69,7 +69,7 @@ namespace VelNetUnity { string identifier = sections[1]; byte[] message = Convert.FromBase64String(sections[2]); - myObject.handleMessage(identifier, message); + myObject.HandleMessage(identifier, message); break; } case "5": //sync update for an object I may own @@ -82,7 +82,7 @@ namespace VelNetUnity { if (manager.objects[objectKey].owner == this) { - manager.objects[objectKey].handleMessage(identifier, messageBytes); + manager.objects[objectKey].HandleMessage(identifier, messageBytes); } } @@ -124,14 +124,14 @@ namespace VelNetUnity { string networkId = sections[1]; - manager.deleteNetworkObject(networkId); + manager.DeleteNetworkObject(networkId); break; } case "9": //deleted scene objects { for (int k = 1; k < sections.Length; k++) { - manager.deleteNetworkObject(sections[k]); + manager.DeleteNetworkObject(sections[k]); } break; @@ -140,38 +140,38 @@ namespace VelNetUnity } } - public void setAsMasterPlayer() + public void SetAsMasterPlayer() { isMaster = true; //if I'm master, I'm now responsible for updating all scene objects //FindObjectsOfType(); } - public void sendGroupMessage(NetworkObject obj, string group, string identifier, byte[] data, bool reliable = true) + public void SendGroupMessage(NetworkObject obj, string group, string identifier, byte[] data, bool reliable = true) { if (obj == myObject) { - manager.sendToGroup(group, "1," + identifier + "," + Convert.ToBase64String(data), reliable); + manager.SendToGroup(group, "1," + identifier + "," + Convert.ToBase64String(data), reliable); } else { - manager.sendToGroup(group, "5," + obj.networkId + "," + identifier + "," + Convert.ToBase64String(data), reliable); + manager.SendToGroup(group, "5," + obj.networkId + "," + identifier + "," + Convert.ToBase64String(data), reliable); } } - public void sendMessage(NetworkObject obj, string identifier, byte[] data, bool reliable = true) + public void SendMessage(NetworkObject obj, string identifier, byte[] data, bool reliable = true) { if (obj == myObject) { - manager.sendTo(NetworkManager.MessageType.OTHERS, "1," + identifier + "," + Convert.ToBase64String(data), reliable); + manager.SendTo(NetworkManager.MessageType.OTHERS, "1," + identifier + "," + Convert.ToBase64String(data), reliable); } else { - manager.sendTo(NetworkManager.MessageType.OTHERS, "5," + obj.networkId + "," + identifier + "," + Convert.ToBase64String(data), reliable); + manager.SendTo(NetworkManager.MessageType.OTHERS, "5," + obj.networkId + "," + identifier + "," + Convert.ToBase64String(data), reliable); } } - public NetworkObject networkInstantiate(string prefabName) + public NetworkObject NetworkInstantiate(string prefabName) { if (!isLocal) { @@ -190,30 +190,30 @@ namespace VelNetUnity instance.owner = this; manager.objects.Add(instance.networkId, instance); - manager.sendTo(NetworkManager.MessageType.OTHERS, "7," + networkId + "," + prefabName); //only sent to others, as I already instantiated this. Nice that it happens immediately. + manager.SendTo(NetworkManager.MessageType.OTHERS, "7," + networkId + "," + prefabName); //only sent to others, as I already instantiated this. Nice that it happens immediately. return instance; } return null; } - public void networkDestroy(string networkId) + public void NetworkDestroy(string networkId) { if (!manager.objects.ContainsKey(networkId) || manager.objects[networkId].owner != this || !isLocal) return; //must be the local owner of the object to destroy it - manager.sendTo(NetworkManager.MessageType.ALL_ORDERED, "8," + networkId); //send to all, which will make me delete as well + manager.SendTo(NetworkManager.MessageType.ALL_ORDERED, "8," + networkId); //send to all, which will make me delete as well } - public void takeOwnership(string networkId) + public void TakeOwnership(string networkId) { if (!manager.objects.ContainsKey(networkId) || !isLocal) return; //must exist and be the the local player manager.objects[networkId].owner = this; //immediately successful - manager.sendTo(NetworkManager.MessageType.ALL_ORDERED, "6," + networkId); //must be ordered, so that ownership transfers are not confused. Also sent to all players, so that multiple simultaneous requests will result in the same outcome. + manager.SendTo(NetworkManager.MessageType.ALL_ORDERED, "6," + networkId); //must be ordered, so that ownership transfers are not confused. Also sent to all players, so that multiple simultaneous requests will result in the same outcome. } - public void sendSceneUpdate() + public void SendSceneUpdate() { - manager.sendTo(NetworkManager.MessageType.OTHERS, "9," + string.Join(",", manager.deletedSceneObjects)); + manager.SendTo(NetworkManager.MessageType.OTHERS, "9," + string.Join(",", manager.deletedSceneObjects)); } } } \ No newline at end of file diff --git a/Runtime/Util/SyncTransform.cs b/Runtime/Util/SyncTransform.cs index 3557b80..f3e09e4 100644 --- a/Runtime/Util/SyncTransform.cs +++ b/Runtime/Util/SyncTransform.cs @@ -14,7 +14,7 @@ namespace VelNetUnity public Quaternion targetRotation; - public byte[] getSyncMessage() + public byte[] GetSyncMessage() { float[] data = new float[7]; for (int i = 0; i < 3; i++) @@ -30,7 +30,7 @@ namespace VelNetUnity return toReturn; } - public override void handleMessage(string identifier, byte[] message) + public override void HandleMessage(string identifier, byte[] message) { switch (identifier) { @@ -49,18 +49,18 @@ namespace VelNetUnity } // Start is called before the first frame update - void Start() + private void Start() { - StartCoroutine(syncBehavior()); + StartCoroutine(SyncBehavior()); } - IEnumerator syncBehavior() + private IEnumerator SyncBehavior() { while (true) { if (owner != null && owner.isLocal) { - owner.sendMessage(this, "s", getSyncMessage()); + owner.SendMessage(this, "s", GetSyncMessage()); } yield return new WaitForSeconds(.1f); diff --git a/package.json b/package.json index b3016a0..20d2d37 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "edu.uga.engr.vel.velnetunity", "displayName": "VelNetUnity", - "version": "1.0.0", + "version": "1.0.1", "unity": "2019.1", "description": "A custom networking library for Unity.", "keywords": [