Fixed minor issues and reduced memory allocations when creating memorystreams
This commit is contained in:
parent
eb4df1ab61
commit
0d099c83b2
@ -7,6 +7,6 @@ namespace MLAPI
|
|||||||
{
|
{
|
||||||
public int ClientId;
|
public int ClientId;
|
||||||
public GameObject PlayerObject;
|
public GameObject PlayerObject;
|
||||||
public List<NetworkedObject> OwnedObjects;
|
public List<NetworkedObject> OwnedObjects = new List<NetworkedObject>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -269,7 +269,11 @@ namespace MLAPI
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
using (MemoryStream writeStream = new MemoryStream())
|
int sizeOfStream = 32;
|
||||||
|
if (NetworkConfig.ConnectionApproval)
|
||||||
|
sizeOfStream += 2 + NetworkConfig.ConnectionData.Length;
|
||||||
|
|
||||||
|
using (MemoryStream writeStream = new MemoryStream(sizeOfStream))
|
||||||
{
|
{
|
||||||
using (BinaryWriter writer = new BinaryWriter(writeStream))
|
using (BinaryWriter writer = new BinaryWriter(writeStream))
|
||||||
{
|
{
|
||||||
@ -280,7 +284,7 @@ namespace MLAPI
|
|||||||
writer.Write(NetworkConfig.ConnectionData);
|
writer.Write(NetworkConfig.ConnectionData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Send(clientId, "MLAPI_CONNECTION_REQUEST", "MLAPI_RELIABLE_FRAGMENTED", writeStream.ToArray());
|
Send(clientId, "MLAPI_CONNECTION_REQUEST", "MLAPI_RELIABLE_FRAGMENTED", writeStream.GetBuffer());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -342,7 +346,6 @@ namespace MLAPI
|
|||||||
if(targeted)
|
if(targeted)
|
||||||
{
|
{
|
||||||
List<int> handlerIds = MessageManager.targetedMessages[messageType][targetNetworkId];
|
List<int> handlerIds = MessageManager.targetedMessages[messageType][targetNetworkId];
|
||||||
Debug.Log(handlerIds.Count);
|
|
||||||
for (int i = 0; i < handlerIds.Count; i++)
|
for (int i = 0; i < handlerIds.Count; i++)
|
||||||
{
|
{
|
||||||
MessageManager.messageCallbacks[messageType][handlerIds[i]](clientId, incommingData);
|
MessageManager.messageCallbacks[messageType][handlerIds[i]](clientId, incommingData);
|
||||||
@ -720,9 +723,11 @@ namespace MLAPI
|
|||||||
{
|
{
|
||||||
if(NetworkConfig.HandleObjectSpawning)
|
if(NetworkConfig.HandleObjectSpawning)
|
||||||
{
|
{
|
||||||
|
if (connectedClients[clientId].PlayerObject != null)
|
||||||
Destroy(connectedClients[clientId].PlayerObject);
|
Destroy(connectedClients[clientId].PlayerObject);
|
||||||
for (int i = 0; i < connectedClients[clientId].OwnedObjects.Count; i++)
|
for (int i = 0; i < connectedClients[clientId].OwnedObjects.Count; i++)
|
||||||
{
|
{
|
||||||
|
if (connectedClients[clientId].OwnedObjects[i] != null)
|
||||||
Destroy(connectedClients[clientId].OwnedObjects[i].gameObject);
|
Destroy(connectedClients[clientId].OwnedObjects[i].gameObject);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -731,13 +736,13 @@ namespace MLAPI
|
|||||||
|
|
||||||
if (isServer)
|
if (isServer)
|
||||||
{
|
{
|
||||||
using (MemoryStream stream = new MemoryStream())
|
using (MemoryStream stream = new MemoryStream(4))
|
||||||
{
|
{
|
||||||
using (BinaryWriter writer = new BinaryWriter(stream))
|
using (BinaryWriter writer = new BinaryWriter(stream))
|
||||||
{
|
{
|
||||||
writer.Write(clientId);
|
writer.Write(clientId);
|
||||||
}
|
}
|
||||||
Send("MLAPI_CLIENT_DISCONNECT", "MLAPI_RELIABLE_FRAGMENTED", stream.ToArray(), clientId);
|
Send("MLAPI_CLIENT_DISCONNECT", "MLAPI_RELIABLE_FRAGMENTED", stream.GetBuffer(), clientId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -761,7 +766,24 @@ namespace MLAPI
|
|||||||
GameObject go = SpawnManager.SpawnPlayerObject(clientId, networkId);
|
GameObject go = SpawnManager.SpawnPlayerObject(clientId, networkId);
|
||||||
connectedClients[clientId].PlayerObject = go;
|
connectedClients[clientId].PlayerObject = go;
|
||||||
}
|
}
|
||||||
using (MemoryStream writeStream = new MemoryStream())
|
|
||||||
|
|
||||||
|
int sizeOfStream = 4 + 4 + ((connectedClients.Count - 1) * 4);
|
||||||
|
int amountOfObjectsToSend = 0;
|
||||||
|
foreach (KeyValuePair<uint, NetworkedObject> pair in SpawnManager.spawnedObjects)
|
||||||
|
{
|
||||||
|
if (pair.Value.ServerOnly)
|
||||||
|
continue;
|
||||||
|
else
|
||||||
|
amountOfObjectsToSend++;
|
||||||
|
}
|
||||||
|
if(NetworkConfig.HandleObjectSpawning)
|
||||||
|
{
|
||||||
|
sizeOfStream += 4;
|
||||||
|
sizeOfStream += 13 * amountOfObjectsToSend;
|
||||||
|
}
|
||||||
|
|
||||||
|
using (MemoryStream writeStream = new MemoryStream(sizeOfStream))
|
||||||
{
|
{
|
||||||
using (BinaryWriter writer = new BinaryWriter(writeStream))
|
using (BinaryWriter writer = new BinaryWriter(writeStream))
|
||||||
{
|
{
|
||||||
@ -776,23 +798,10 @@ namespace MLAPI
|
|||||||
}
|
}
|
||||||
if (NetworkConfig.HandleObjectSpawning)
|
if (NetworkConfig.HandleObjectSpawning)
|
||||||
{
|
{
|
||||||
int amountOfObjectsToSend = 0;
|
|
||||||
foreach (KeyValuePair<uint, NetworkedObject> pair in SpawnManager.spawnedObjects)
|
|
||||||
{
|
|
||||||
if (pair.Value.ServerOnly)
|
|
||||||
continue;
|
|
||||||
else
|
|
||||||
amountOfObjectsToSend++;
|
|
||||||
}
|
|
||||||
writer.Write(amountOfObjectsToSend);
|
writer.Write(amountOfObjectsToSend);
|
||||||
|
|
||||||
foreach (KeyValuePair<uint, NetworkedObject> pair in SpawnManager.spawnedObjects)
|
foreach (KeyValuePair<uint, NetworkedObject> pair in SpawnManager.spawnedObjects)
|
||||||
{
|
{
|
||||||
if (pair.Value.ServerOnly)
|
|
||||||
continue;
|
|
||||||
else
|
|
||||||
amountOfObjectsToSend++;
|
|
||||||
|
|
||||||
if (pair.Value.ServerOnly)
|
if (pair.Value.ServerOnly)
|
||||||
continue;
|
continue;
|
||||||
writer.Write(pair.Value.isPlayerObject);
|
writer.Write(pair.Value.isPlayerObject);
|
||||||
@ -802,11 +811,17 @@ namespace MLAPI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Send(clientId, "MLAPI_CONNECTION_APPROVED", "MLAPI_RELIABLE_FRAGMENTED", writeStream.ToArray());
|
Send(clientId, "MLAPI_CONNECTION_APPROVED", "MLAPI_RELIABLE_FRAGMENTED", writeStream.GetBuffer());
|
||||||
}
|
}
|
||||||
|
|
||||||
//Inform old clients of the new player
|
//Inform old clients of the new player
|
||||||
using (MemoryStream stream = new MemoryStream())
|
|
||||||
|
if(NetworkConfig.HandleObjectSpawning)
|
||||||
|
sizeOfStream = 13;
|
||||||
|
else
|
||||||
|
sizeOfStream = 4;
|
||||||
|
|
||||||
|
using (MemoryStream stream = new MemoryStream(sizeOfStream))
|
||||||
{
|
{
|
||||||
using (BinaryWriter writer = new BinaryWriter(stream))
|
using (BinaryWriter writer = new BinaryWriter(stream))
|
||||||
{
|
{
|
||||||
@ -822,7 +837,7 @@ namespace MLAPI
|
|||||||
writer.Write(clientId);
|
writer.Write(clientId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Send("MLAPI_ADD_OBJECT", "MLAPI_RELIABLE_FRAGMENTED", stream.ToArray(), clientId);
|
Send("MLAPI_ADD_OBJECT", "MLAPI_RELIABLE_FRAGMENTED", stream.GetBuffer(), clientId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -70,7 +70,7 @@ namespace MLAP
|
|||||||
lastSendTime = Time.time;
|
lastSendTime = Time.time;
|
||||||
lastSentPos = transform.position;
|
lastSentPos = transform.position;
|
||||||
lastSentRot = transform.rotation;
|
lastSentRot = transform.rotation;
|
||||||
using (MemoryStream writeStream = new MemoryStream())
|
using (MemoryStream writeStream = new MemoryStream(24))
|
||||||
{
|
{
|
||||||
using (BinaryWriter writer = new BinaryWriter(writeStream))
|
using (BinaryWriter writer = new BinaryWriter(writeStream))
|
||||||
{
|
{
|
||||||
@ -81,7 +81,7 @@ namespace MLAP
|
|||||||
writer.Write(transform.rotation.y);
|
writer.Write(transform.rotation.y);
|
||||||
writer.Write(transform.rotation.z);
|
writer.Write(transform.rotation.z);
|
||||||
}
|
}
|
||||||
SendToServerTarget("MLAPI_OnRecieveTransformFromClient", "MLAPI_POSITION_UPDATE", writeStream.ToArray());
|
SendToServerTarget("MLAPI_OnRecieveTransformFromClient", "MLAPI_POSITION_UPDATE", writeStream.GetBuffer());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -145,7 +145,7 @@ namespace MLAP
|
|||||||
transform.position = new Vector3(xPos, yPos, zPos);
|
transform.position = new Vector3(xPos, yPos, zPos);
|
||||||
transform.rotation = Quaternion.Euler(new Vector3(xRot, yRot, zRot));
|
transform.rotation = Quaternion.Euler(new Vector3(xRot, yRot, zRot));
|
||||||
}
|
}
|
||||||
using (MemoryStream writeStream = new MemoryStream())
|
using (MemoryStream writeStream = new MemoryStream(24))
|
||||||
{
|
{
|
||||||
using(BinaryWriter writer = new BinaryWriter(writeStream))
|
using(BinaryWriter writer = new BinaryWriter(writeStream))
|
||||||
{
|
{
|
||||||
@ -156,7 +156,7 @@ namespace MLAP
|
|||||||
writer.Write(yRot);
|
writer.Write(yRot);
|
||||||
writer.Write(zRot);
|
writer.Write(zRot);
|
||||||
}
|
}
|
||||||
SendToNonLocalClientsTarget("MLAPI_OnRecieveTransformFromServer", "MLAPI_POSITION_UPDATE", writeStream.ToArray());
|
SendToNonLocalClientsTarget("MLAPI_OnRecieveTransformFromServer", "MLAPI_POSITION_UPDATE", writeStream.GetBuffer());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -84,12 +84,12 @@ namespace MLAPI.NetworkingManagerComponents
|
|||||||
if (!spawnedObjects.ContainsKey(networkId) || !netManager.NetworkConfig.HandleObjectSpawning)
|
if (!spawnedObjects.ContainsKey(networkId) || !netManager.NetworkConfig.HandleObjectSpawning)
|
||||||
return;
|
return;
|
||||||
GameObject go = spawnedObjects[networkId].gameObject;
|
GameObject go = spawnedObjects[networkId].gameObject;
|
||||||
if (netManager.isServer)
|
if (netManager != null && netManager.isServer)
|
||||||
{
|
{
|
||||||
releasedNetworkObjectIds.Push(networkId);
|
releasedNetworkObjectIds.Push(networkId);
|
||||||
if (!spawnedObjects[networkId].ServerOnly)
|
if (spawnedObjects[networkId] != null && !spawnedObjects[networkId].ServerOnly)
|
||||||
{
|
{
|
||||||
using (MemoryStream stream = new MemoryStream())
|
using (MemoryStream stream = new MemoryStream(4))
|
||||||
{
|
{
|
||||||
using (BinaryWriter writer = new BinaryWriter(stream))
|
using (BinaryWriter writer = new BinaryWriter(stream))
|
||||||
{
|
{
|
||||||
@ -97,13 +97,13 @@ namespace MLAPI.NetworkingManagerComponents
|
|||||||
}
|
}
|
||||||
//If we are host, send to everyone except ourselves. Otherwise, send to all
|
//If we are host, send to everyone except ourselves. Otherwise, send to all
|
||||||
if (netManager.isHost)
|
if (netManager.isHost)
|
||||||
netManager.Send("MLAPI_DESTROY_OBJECT", "MLAPI_RELIABLE_FRAGMENTED", stream.ToArray(), -1);
|
netManager.Send("MLAPI_DESTROY_OBJECT", "MLAPI_RELIABLE_FRAGMENTED", stream.GetBuffer(), -1);
|
||||||
else
|
else
|
||||||
netManager.Send("MLAPI_DESTROY_OBJECT", "MLAPI_RELIABLE_FRAGMENTED", stream.ToArray());
|
netManager.Send("MLAPI_DESTROY_OBJECT", "MLAPI_RELIABLE_FRAGMENTED", stream.GetBuffer());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (destroyGameObject)
|
if (destroyGameObject && go != null)
|
||||||
MonoBehaviour.Destroy(go);
|
MonoBehaviour.Destroy(go);
|
||||||
spawnedObjects.Remove(networkId);
|
spawnedObjects.Remove(networkId);
|
||||||
}
|
}
|
||||||
@ -139,8 +139,8 @@ namespace MLAPI.NetworkingManagerComponents
|
|||||||
spawnedObjects.Add(netId, netObject);
|
spawnedObjects.Add(netId, netObject);
|
||||||
netObject.isSpawned = true;
|
netObject.isSpawned = true;
|
||||||
if (clientOwnerId != null)
|
if (clientOwnerId != null)
|
||||||
netObject.OwnerClientId = (int)clientOwnerId;
|
netObject.OwnerClientId = clientOwnerId.Value;
|
||||||
using (MemoryStream stream = new MemoryStream())
|
using (MemoryStream stream = new MemoryStream(13))
|
||||||
{
|
{
|
||||||
using (BinaryWriter writer = new BinaryWriter(stream))
|
using (BinaryWriter writer = new BinaryWriter(stream))
|
||||||
{
|
{
|
||||||
@ -151,9 +151,9 @@ namespace MLAPI.NetworkingManagerComponents
|
|||||||
}
|
}
|
||||||
//If we are host, send to everyone except ourselves. Otherwise, send to all
|
//If we are host, send to everyone except ourselves. Otherwise, send to all
|
||||||
if (netManager.isHost)
|
if (netManager.isHost)
|
||||||
netManager.Send("MLAPI_ADD_OBJECT", "MLAPI_RELIABLE_FRAGMENTED", stream.ToArray(), -1);
|
netManager.Send("MLAPI_ADD_OBJECT", "MLAPI_RELIABLE_FRAGMENTED", stream.GetBuffer(), -1);
|
||||||
else
|
else
|
||||||
netManager.Send("MLAPI_ADD_OBJECT", "MLAPI_RELIABLE_FRAGMENTED", stream.ToArray());
|
netManager.Send("MLAPI_ADD_OBJECT", "MLAPI_RELIABLE_FRAGMENTED", stream.GetBuffer());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user