maybe fixed ci, made naming convention consistent

handTracking
Anton Franzluebbers 2022-01-06 16:24:36 -05:00
parent 480b9cd1ca
commit 1606306134
10 changed files with 110 additions and 115 deletions

View File

@ -16,4 +16,4 @@ jobs:
git subtree split -P "$PKG_ROOT" -b upm git subtree split -P "$PKG_ROOT" -b upm
git push -u origin upm git push -u origin upm
env: env:
PKG_ROOT: TestVelGameServer\Packages\VelNetUnity PKG_ROOT: TestVelGameServer/Packages/VelNetUnity

View File

@ -21,7 +21,7 @@ namespace VelNetUnity
public event Action<RoomEvent> PlayerEnteredRoom; public event Action<RoomEvent> PlayerEnteredRoom;
public event Action<RoomEvent> PlayerExitedRoom; public event Action<RoomEvent> PlayerExitedRoom;
ConnectionStatus _status = ConnectionStatus.Disconnected; private ConnectionStatus _status = ConnectionStatus.Disconnected;
CodecSettings initSettings; CodecSettings initSettings;
public string dissonanceId; public string dissonanceId;
public DissonanceComms comms; public DissonanceComms comms;
@ -36,11 +36,11 @@ namespace VelNetUnity
comms.ResetMicrophoneCapture(); comms.ResetMicrophoneCapture();
} }
public void voiceReceived(string sender, byte[] data) public void VoiceReceived(string sender, byte[] data)
{ {
uint sequenceNumber = BitConverter.ToUInt32(data, 0); uint sequenceNumber = BitConverter.ToUInt32(data, 0);
VoicePacket vp = new VoicePacket(sender, ChannelPriority.Default, 1, true, new ArraySegment<byte>(data, 4, data.Length - 4), sequenceNumber); VoicePacket vp = new VoicePacket(sender, ChannelPriority.Default, 1, true, new ArraySegment<byte>(data, 4, data.Length - 4), sequenceNumber);
VoicePacketReceived(vp); VoicePacketReceived?.Invoke(vp);
} }
public void SendText(string data, ChannelType recipientType, string recipientId) public void SendText(string data, ChannelType recipientType, string recipientId)
@ -54,7 +54,7 @@ namespace VelNetUnity
} }
// Start is called before the first frame update // Start is called before the first frame update
void Start() private void Start()
{ {
_status = ConnectionStatus.Connected; _status = ConnectionStatus.Connected;
comms = GetComponent<DissonanceComms>(); comms = GetComponent<DissonanceComms>();
@ -63,12 +63,12 @@ namespace VelNetUnity
public void playerJoined(string id) public void playerJoined(string id)
{ {
Debug.Log("dissonance player joined"); Debug.Log("dissonance player joined");
PlayerJoined(id, initSettings); PlayerJoined?.Invoke(id, initSettings);
RoomEvent re = new RoomEvent(); RoomEvent re = new RoomEvent();
re.Joined = true; re.Joined = true;
re.Room = "Global"; re.Room = "Global";
re.PlayerName = id; re.PlayerName = id;
PlayerEnteredRoom(re); PlayerEnteredRoom?.Invoke(re);
} }
public void playerLeft(string id) public void playerLeft(string id)
@ -77,18 +77,18 @@ namespace VelNetUnity
re.Joined = false; re.Joined = false;
re.Room = "Global"; re.Room = "Global";
re.PlayerName = id; re.PlayerName = id;
PlayerExitedRoom(re); PlayerExitedRoom?.Invoke(re);
PlayerLeft(id); PlayerLeft?.Invoke(id);
} }
public void playerStartedSpeaking(string id) public void playerStartedSpeaking(string id)
{ {
PlayerStartedSpeaking(id); PlayerStartedSpeaking?.Invoke(id);
} }
public void playerStoppedSpeaking(string id) public void playerStoppedSpeaking(string id)
{ {
PlayerStoppedSpeaking(id); PlayerStoppedSpeaking?.Invoke(id);
} }
} }
} }

View File

@ -15,36 +15,36 @@ namespace VelNetUnity
public Dropdown microphones; public Dropdown microphones;
Dissonance.DissonanceComms comms; Dissonance.DissonanceComms comms;
public void handleSend() public void HandleSend()
{ {
if (sendInput.text != "") if (sendInput.text != "")
{ {
networkManager.sendTo(NetworkManager.MessageType.OTHERS, sendInput.text); networkManager.SendTo(NetworkManager.MessageType.OTHERS, sendInput.text);
} }
} }
public void handleLogin() public void HandleLogin()
{ {
if (userInput.text != "") if (userInput.text != "")
{ {
networkManager.login(userInput.text, "nopass"); networkManager.Login(userInput.text, "nopass");
} }
} }
public void handleJoin() public void HandleJoin()
{ {
if (roomInput.text != "") if (roomInput.text != "")
{ {
networkManager.join(roomInput.text); networkManager.Join(roomInput.text);
} }
} }
// Start is called before the first frame update // Start is called before the first frame update
void Start() private void Start()
{ {
comms = FindObjectOfType<Dissonance.DissonanceComms>(); comms = FindObjectOfType<Dissonance.DissonanceComms>();
microphones.AddOptions(new List<string>(Microphone.devices)); microphones.AddOptions(new List<string>(Microphone.devices));
networkManager.messageReceived += (m) => networkManager.MessageReceived += (m) =>
{ {
string s = m.type + ":" + m.sender + ":" + m.text; string s = m.type + ":" + m.sender + ":" + m.text;
messageBuffer.Add(s); messageBuffer.Add(s);
@ -56,9 +56,9 @@ namespace VelNetUnity
messageBuffer.RemoveAt(0); messageBuffer.RemoveAt(0);
} }
for (int i = 0; i < messageBuffer.Count; i++) foreach (string msg in messageBuffer)
{ {
messages.text = messages.text + messageBuffer[i] + "\n"; messages.text = messages.text + msg + "\n";
} }
}; };
} }
@ -67,10 +67,5 @@ namespace VelNetUnity
{ {
comms.MicrophoneName = microphones.options[microphones.value].text; comms.MicrophoneName = microphones.options[microphones.value].text;
} }
// Update is called once per frame
void Update()
{
}
} }
} }

View File

@ -44,7 +44,7 @@ namespace VelNetUnity
return toReturn; return toReturn;
} }
public override void handleMessage(string identifier, byte[] message) public override void HandleMessage(string identifier, byte[] message)
{ {
switch (identifier) switch (identifier)
{ {
@ -63,7 +63,7 @@ namespace VelNetUnity
{ {
if (isSpeaking) if (isSpeaking)
{ {
comms.voiceReceived(dissonanceID, message); comms.VoiceReceived(dissonanceID, message);
} }
break; break;
@ -115,9 +115,9 @@ namespace VelNetUnity
owner.manager.onPlayerJoined += (player) => owner.manager.onPlayerJoined += (player) =>
{ {
byte[] b = Encoding.UTF8.GetBytes(dissonanceID); byte[] b = Encoding.UTF8.GetBytes(dissonanceID);
owner.sendMessage(this, "d", b); owner.SendMessage(this, "d", b);
}; };
owner.manager.setupMessageGroup("close", closePlayers.ToArray()); owner.manager.SetupMessageGroup("close", closePlayers.ToArray());
} }
} }
@ -136,7 +136,7 @@ namespace VelNetUnity
byte[] lastAudioIdBytes = BitConverter.GetBytes(lastAudioId++); byte[] lastAudioIdBytes = BitConverter.GetBytes(lastAudioId++);
Buffer.BlockCopy(lastAudioIdBytes, 0, toSend, 0, 4); Buffer.BlockCopy(lastAudioIdBytes, 0, toSend, 0, 4);
Buffer.BlockCopy(data.Array, data.Offset, toSend, 4, data.Count); Buffer.BlockCopy(data.Array, data.Offset, toSend, 4, data.Count);
owner.sendGroupMessage(this, "close", "a", toSend, false); //send voice data unreliably owner.SendGroupMessage(this, "close", "a", toSend, false); //send voice data unreliably
} }
} }
@ -144,7 +144,7 @@ namespace VelNetUnity
{ {
dissonanceID = id; dissonanceID = id;
byte[] b = Encoding.UTF8.GetBytes(dissonanceID); byte[] b = Encoding.UTF8.GetBytes(dissonanceID);
owner.sendMessage(this, "d", b); owner.SendMessage(this, "d", b);
comms.comms.TrackPlayerPosition(this); comms.comms.TrackPlayerPosition(this);
} }
@ -163,7 +163,7 @@ namespace VelNetUnity
{ {
while (true) while (true)
{ {
owner.sendMessage(this, "s", getSyncMessage()); owner.SendMessage(this, "s", getSyncMessage());
yield return new WaitForSeconds(.1f); yield return new WaitForSeconds(.1f);
} }
} }
@ -197,7 +197,7 @@ namespace VelNetUnity
if (shouldUpdate) if (shouldUpdate)
{ {
owner.manager.setupMessageGroup("close", closePlayers.ToArray()); owner.manager.SetupMessageGroup("close", closePlayers.ToArray());
} }
} }
@ -217,7 +217,7 @@ namespace VelNetUnity
isSpeaking = !isSpeaking; isSpeaking = !isSpeaking;
byte[] toSend = new byte[1]; byte[] toSend = new byte[1];
toSend[0] = isSpeaking ? (byte)1 : (byte)0; toSend[0] = isSpeaking ? (byte)1 : (byte)0;
owner.sendMessage(this, "x", toSend); owner.SendMessage(this, "x", toSend);
if (!isSpeaking) if (!isSpeaking)
{ {
@ -234,14 +234,14 @@ namespace VelNetUnity
if (Input.GetKeyDown(KeyCode.Space)) if (Input.GetKeyDown(KeyCode.Space))
{ {
owner.networkInstantiate("TestNetworkedGameObject"); owner.NetworkInstantiate("TestNetworkedGameObject");
} }
if (Input.GetKeyDown(KeyCode.BackQuote)) if (Input.GetKeyDown(KeyCode.BackQuote))
{ {
foreach (KeyValuePair<string, NetworkObject> kvp in owner.manager.objects) foreach (KeyValuePair<string, NetworkObject> kvp in owner.manager.objects)
{ {
owner.takeOwnership(kvp.Key); owner.TakeOwnership(kvp.Key);
} }
} }
@ -249,7 +249,7 @@ namespace VelNetUnity
{ {
foreach (KeyValuePair<string, NetworkObject> kvp in owner.manager.objects) foreach (KeyValuePair<string, NetworkObject> kvp in owner.manager.objects)
{ {
owner.networkDestroy(kvp.Key); owner.NetworkDestroy(kvp.Key);
} }
} }
} }

View File

@ -2121,7 +2121,7 @@ MonoBehaviour:
m_Calls: m_Calls:
- m_Target: {fileID: 244561621} - m_Target: {fileID: 244561621}
m_TargetAssemblyTypeName: NetworkGUI, Assembly-CSharp m_TargetAssemblyTypeName: NetworkGUI, Assembly-CSharp
m_MethodName: handleJoin m_MethodName: HandleJoin
m_Mode: 1 m_Mode: 1
m_Arguments: m_Arguments:
m_ObjectArgument: {fileID: 0} m_ObjectArgument: {fileID: 0}
@ -2725,7 +2725,7 @@ MonoBehaviour:
m_Calls: m_Calls:
- m_Target: {fileID: 244561621} - m_Target: {fileID: 244561621}
m_TargetAssemblyTypeName: NetworkGUI, Assembly-CSharp m_TargetAssemblyTypeName: NetworkGUI, Assembly-CSharp
m_MethodName: handleLogin m_MethodName: HandleLogin
m_Mode: 1 m_Mode: 1
m_Arguments: m_Arguments:
m_ObjectArgument: {fileID: 0} m_ObjectArgument: {fileID: 0}
@ -2858,7 +2858,7 @@ MonoBehaviour:
m_Calls: m_Calls:
- m_Target: {fileID: 244561621} - m_Target: {fileID: 244561621}
m_TargetAssemblyTypeName: NetworkGUI, Assembly-CSharp m_TargetAssemblyTypeName: NetworkGUI, Assembly-CSharp
m_MethodName: handleSend m_MethodName: HandleSend
m_Mode: 1 m_Mode: 1
m_Arguments: m_Arguments:
m_ObjectArgument: {fileID: 0} m_ObjectArgument: {fileID: 0}

View File

@ -25,13 +25,13 @@ namespace VelNetUnity
private TcpClient socketConnection; private TcpClient socketConnection;
private Socket udpSocket; private Socket udpSocket;
public bool udpConnected = false; public bool udpConnected;
IPEndPoint RemoteEndPoint; private IPEndPoint RemoteEndPoint;
private Thread clientReceiveThread; private Thread clientReceiveThread;
private Thread clientReceiveThreadUDP; private Thread clientReceiveThreadUDP;
public int userid = -1; public int userid = -1;
public string room; public string room;
int messagesReceived = 0; private int messagesReceived = 0;
public GameObject playerPrefab; public GameObject playerPrefab;
public Dictionary<int, NetworkPlayer> players = new Dictionary<int, NetworkPlayer>(); public Dictionary<int, NetworkPlayer> players = new Dictionary<int, NetworkPlayer>();
@ -44,7 +44,7 @@ namespace VelNetUnity
public NetworkObject[] sceneObjects; public NetworkObject[] sceneObjects;
public List<string> deletedSceneObjects = new List<string>(); public List<string> deletedSceneObjects = new List<string>();
public Dictionary<string, NetworkObject> objects = new Dictionary<string, NetworkObject>(); //maintains a list of all known objects on the server (ones that have ids) public Dictionary<string, NetworkObject> objects = new Dictionary<string, NetworkObject>(); //maintains a list of all known objects on the server (ones that have ids)
NetworkPlayer masterPlayer = null; private NetworkPlayer masterPlayer;
#endregion #endregion
@ -56,16 +56,16 @@ namespace VelNetUnity
public int sender; public int sender;
} }
public List<Message> receivedMessages = new List<Message>(); public readonly List<Message> receivedMessages = new List<Message>();
void Start() private void Start()
{ {
ConnectToTcpServer(); ConnectToTcpServer();
sceneObjects = FindObjectsOfType<NetworkObject>(); //add all local network objects sceneObjects = FindObjectsOfType<NetworkObject>(); //add all local network objects
} }
private void addMessage(Message m) private void AddMessage(Message m)
{ {
lock (receivedMessages) lock (receivedMessages)
{ {
@ -87,7 +87,7 @@ namespace VelNetUnity
Debug.Log("joined server"); Debug.Log("joined server");
//start the udp thread //start the udp thread
clientReceiveThreadUDP = new Thread(new ThreadStart(ListenForDataUDP)); clientReceiveThreadUDP = new Thread(ListenForDataUDP);
clientReceiveThreadUDP.IsBackground = true; clientReceiveThreadUDP.IsBackground = true;
clientReceiveThreadUDP.Start(); clientReceiveThreadUDP.Start();
} }
@ -106,7 +106,7 @@ namespace VelNetUnity
if (m.text != "") if (m.text != "")
{ {
NetworkPlayer player = Instantiate<GameObject>(playerPrefab).GetComponent<NetworkPlayer>(); NetworkPlayer player = Instantiate(playerPrefab).GetComponent<NetworkPlayer>();
player.isLocal = true; player.isLocal = true;
player.userid = m.sender; 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 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) 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 else
{ {
//we got a join mesage, create it //we got a join mesage, create it
NetworkPlayer player = Instantiate<GameObject>(playerPrefab).GetComponent<NetworkPlayer>(); NetworkPlayer player = Instantiate(playerPrefab).GetComponent<NetworkPlayer>();
player.isLocal = false; player.isLocal = false;
player.room = m.text; player.room = m.text;
player.userid = m.sender; player.userid = m.sender;
@ -159,7 +159,7 @@ namespace VelNetUnity
if (m.type == 3) //generic message 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) 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 = players[m.sender];
} }
masterPlayer.setAsMasterPlayer(); masterPlayer.SetAsMasterPlayer();
//master player should take over any objects that do not have an owner //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(); receivedMessages.Clear();
@ -208,12 +208,12 @@ namespace VelNetUnity
socketConnection.Close(); socketConnection.Close();
} }
public Action<string, int> joinedRoom = delegate { }; public Action<string, int> JoinedRoom = delegate { };
public Action<Message> messageReceived = delegate { }; public Action<Message> MessageReceived = delegate { };
public Action<string, int> loggedIn = delegate { }; public Action<string, int> LoggedIn = delegate { };
public Action<string[], int> roomsReceived = delegate { }; public Action<string[], int> RoomsReceived = delegate { };
public bool connected = false; public bool connected;
/// <summary> /// <summary>
/// Setup socket connection. /// Setup socket connection.
@ -222,7 +222,7 @@ namespace VelNetUnity
{ {
try try
{ {
clientReceiveThread = new Thread(new ThreadStart(ListenForData)); clientReceiveThread = new Thread(ListenForData);
clientReceiveThread.IsBackground = true; clientReceiveThread.IsBackground = true;
clientReceiveThread.Start(); 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(); Message m = new Message();
string[] sections = s.Split(':'); string[] sections = s.Split(':');
@ -249,7 +249,7 @@ namespace VelNetUnity
m.type = type; m.type = type;
m.sender = int.Parse(sections[1]); m.sender = int.Parse(sections[1]);
m.text = ""; m.text = "";
addMessage(m); AddMessage(m);
} }
break; break;
@ -268,7 +268,7 @@ namespace VelNetUnity
string new_room = sections[2]; string new_room = sections[2];
m.text = new_room; m.text = new_room;
addMessage(m); AddMessage(m);
} }
break; break;
@ -280,7 +280,7 @@ namespace VelNetUnity
m.type = 3; m.type = 3;
m.sender = int.Parse(sections[1]); m.sender = int.Parse(sections[1]);
m.text = sections[2]; m.text = sections[2];
addMessage(m); AddMessage(m);
} }
break; break;
@ -291,7 +291,7 @@ namespace VelNetUnity
{ {
m.type = 4; m.type = 4;
m.sender = int.Parse(sections[1]); m.sender = int.Parse(sections[1]);
addMessage(m); AddMessage(m);
} }
break; break;
@ -310,7 +310,7 @@ namespace VelNetUnity
{ {
socketConnection = new TcpClient(host, port); socketConnection = new TcpClient(host, port);
socketConnection.NoDelay = true; socketConnection.NoDelay = true;
Byte[] bytes = new Byte[1024]; byte[] bytes = new byte[1024];
string partialMessage = ""; string partialMessage = "";
while (true) while (true)
{ {
@ -321,7 +321,7 @@ namespace VelNetUnity
// Read incomming stream into byte arrary. // Read incomming stream into byte arrary.
while ((length = stream.Read(bytes, 0, bytes.Length)) != 0) 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); Array.Copy(bytes, 0, incommingData, 0, length);
// Convert byte array to string message. // Convert byte array to string message.
string serverMessage = Encoding.ASCII.GetString(incommingData); string serverMessage = Encoding.ASCII.GetString(incommingData);
@ -334,12 +334,12 @@ namespace VelNetUnity
{ {
if (i == 0) if (i == 0)
{ {
handleMessage(partialMessage + sections[0]); HandleMessage(partialMessage + sections[0]);
partialMessage = ""; partialMessage = "";
} }
else else
{ {
handleMessage(sections[i]); HandleMessage(sections[i]);
} }
} }
} }
@ -365,7 +365,7 @@ namespace VelNetUnity
//I don't yet have a UDP connection //I don't yet have a UDP connection
try try
{ {
var addresses = Dns.GetHostAddresses(host); IPAddress[] addresses = Dns.GetHostAddresses(host);
Debug.Assert(addresses.Length > 0); Debug.Assert(addresses.Length > 0);
RemoteEndPoint = new IPEndPoint(addresses[0], port); RemoteEndPoint = new IPEndPoint(addresses[0], port);
@ -408,7 +408,7 @@ namespace VelNetUnity
if (sections[0] == "3") 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); SendNetworkMessage("0:" + username + ":" + password);
} }
public void join(string roomname) public void Join(string roomname)
{ {
SendNetworkMessage("2:" + roomname); SendNetworkMessage("2:" + roomname);
} }
public void leave() public void Leave()
{ {
SendNetworkMessage("2:-1"); 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) 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) if (reliable)
{ {
@ -499,12 +499,12 @@ namespace VelNetUnity
} }
//changes the designated group that sendto(4) will go to //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)); SendNetworkMessage("5:" + groupname + ":" + String.Join(":", userids));
} }
public void deleteNetworkObject(string networkId) public void DeleteNetworkObject(string networkId)
{ {
if (objects.ContainsKey(networkId)) if (objects.ContainsKey(networkId))
{ {

View File

@ -10,7 +10,7 @@ namespace VelNetUnity
public NetworkPlayer owner; 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 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 string prefabName; //this may be empty if it's not a prefab (scene object)
public bool isSceneObject = false; public bool isSceneObject;
public abstract void handleMessage(string identifier, byte[] message); public abstract void HandleMessage(string identifier, byte[] message);
} }
} }

View File

@ -15,21 +15,21 @@ namespace VelNetUnity
public string room; public string room;
public NetworkManager manager; 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() private void Start()
{ {
myObject.owner = this; myObject.owner = this;
manager = FindObjectOfType<NetworkManager>(); manager = FindObjectOfType<NetworkManager>();
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 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) if (isLocal)
@ -38,20 +38,20 @@ namespace VelNetUnity
{ {
if (kvp.Value.owner == this && kvp.Value.prefabName != "") 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) if (isMaster)
{ {
//send a list of scene object ids when someone joins //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 //these are generally things that come from the "owner" and should be enacted locally, where appropriate
//we need to parse the message //we need to parse the message
@ -69,7 +69,7 @@ namespace VelNetUnity
{ {
string identifier = sections[1]; string identifier = sections[1];
byte[] message = Convert.FromBase64String(sections[2]); byte[] message = Convert.FromBase64String(sections[2]);
myObject.handleMessage(identifier, message); myObject.HandleMessage(identifier, message);
break; break;
} }
case "5": //sync update for an object I may own case "5": //sync update for an object I may own
@ -82,7 +82,7 @@ namespace VelNetUnity
{ {
if (manager.objects[objectKey].owner == this) 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]; string networkId = sections[1];
manager.deleteNetworkObject(networkId); manager.DeleteNetworkObject(networkId);
break; break;
} }
case "9": //deleted scene objects case "9": //deleted scene objects
{ {
for (int k = 1; k < sections.Length; k++) for (int k = 1; k < sections.Length; k++)
{ {
manager.deleteNetworkObject(sections[k]); manager.DeleteNetworkObject(sections[k]);
} }
break; break;
@ -140,38 +140,38 @@ namespace VelNetUnity
} }
} }
public void setAsMasterPlayer() public void SetAsMasterPlayer()
{ {
isMaster = true; isMaster = true;
//if I'm master, I'm now responsible for updating all scene objects //if I'm master, I'm now responsible for updating all scene objects
//FindObjectsOfType<NetworkObject>(); //FindObjectsOfType<NetworkObject>();
} }
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) if (obj == myObject)
{ {
manager.sendToGroup(group, "1," + identifier + "," + Convert.ToBase64String(data), reliable); manager.SendToGroup(group, "1," + identifier + "," + Convert.ToBase64String(data), reliable);
} }
else 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) 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 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) if (!isLocal)
{ {
@ -190,30 +190,30 @@ namespace VelNetUnity
instance.owner = this; instance.owner = this;
manager.objects.Add(instance.networkId, instance); 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 instance;
} }
return null; 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 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 if (!manager.objects.ContainsKey(networkId) || !isLocal) return; //must exist and be the the local player
manager.objects[networkId].owner = this; //immediately successful 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));
} }
} }
} }

View File

@ -14,7 +14,7 @@ namespace VelNetUnity
public Quaternion targetRotation; public Quaternion targetRotation;
public byte[] getSyncMessage() public byte[] GetSyncMessage()
{ {
float[] data = new float[7]; float[] data = new float[7];
for (int i = 0; i < 3; i++) for (int i = 0; i < 3; i++)
@ -30,7 +30,7 @@ namespace VelNetUnity
return toReturn; return toReturn;
} }
public override void handleMessage(string identifier, byte[] message) public override void HandleMessage(string identifier, byte[] message)
{ {
switch (identifier) switch (identifier)
{ {
@ -49,18 +49,18 @@ namespace VelNetUnity
} }
// Start is called before the first frame update // Start is called before the first frame update
void Start() private void Start()
{ {
StartCoroutine(syncBehavior()); StartCoroutine(SyncBehavior());
} }
IEnumerator syncBehavior() private IEnumerator SyncBehavior()
{ {
while (true) while (true)
{ {
if (owner != null && owner.isLocal) if (owner != null && owner.isLocal)
{ {
owner.sendMessage(this, "s", getSyncMessage()); owner.SendMessage(this, "s", GetSyncMessage());
} }
yield return new WaitForSeconds(.1f); yield return new WaitForSeconds(.1f);

View File

@ -1,7 +1,7 @@
{ {
"name": "edu.uga.engr.vel.velnetunity", "name": "edu.uga.engr.vel.velnetunity",
"displayName": "VelNetUnity", "displayName": "VelNetUnity",
"version": "1.0.0", "version": "1.0.1",
"unity": "2019.1", "unity": "2019.1",
"description": "A custom networking library for Unity.", "description": "A custom networking library for Unity.",
"keywords": [ "keywords": [