maybe fixed ci, made naming convention consistent
parent
887d310053
commit
55b405c5b8
|
|
@ -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))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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": [
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue