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 GameObject PlayerObject;
|
||||
public List<NetworkedObject> OwnedObjects;
|
||||
public List<NetworkedObject> OwnedObjects = new List<NetworkedObject>();
|
||||
}
|
||||
}
|
||||
|
@ -269,7 +269,11 @@ namespace MLAPI
|
||||
}
|
||||
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))
|
||||
{
|
||||
@ -280,7 +284,7 @@ namespace MLAPI
|
||||
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;
|
||||
@ -342,7 +346,6 @@ namespace MLAPI
|
||||
if(targeted)
|
||||
{
|
||||
List<int> handlerIds = MessageManager.targetedMessages[messageType][targetNetworkId];
|
||||
Debug.Log(handlerIds.Count);
|
||||
for (int i = 0; i < handlerIds.Count; i++)
|
||||
{
|
||||
MessageManager.messageCallbacks[messageType][handlerIds[i]](clientId, incommingData);
|
||||
@ -720,10 +723,12 @@ namespace MLAPI
|
||||
{
|
||||
if(NetworkConfig.HandleObjectSpawning)
|
||||
{
|
||||
Destroy(connectedClients[clientId].PlayerObject);
|
||||
if (connectedClients[clientId].PlayerObject != null)
|
||||
Destroy(connectedClients[clientId].PlayerObject);
|
||||
for (int i = 0; i < connectedClients[clientId].OwnedObjects.Count; i++)
|
||||
{
|
||||
Destroy(connectedClients[clientId].OwnedObjects[i].gameObject);
|
||||
if (connectedClients[clientId].OwnedObjects[i] != null)
|
||||
Destroy(connectedClients[clientId].OwnedObjects[i].gameObject);
|
||||
}
|
||||
}
|
||||
connectedClients.Remove(clientId);
|
||||
@ -731,13 +736,13 @@ namespace MLAPI
|
||||
|
||||
if (isServer)
|
||||
{
|
||||
using (MemoryStream stream = new MemoryStream())
|
||||
using (MemoryStream stream = new MemoryStream(4))
|
||||
{
|
||||
using (BinaryWriter writer = new BinaryWriter(stream))
|
||||
{
|
||||
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);
|
||||
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))
|
||||
{
|
||||
@ -776,23 +798,10 @@ namespace MLAPI
|
||||
}
|
||||
if (NetworkConfig.HandleObjectSpawning)
|
||||
{
|
||||
int amountOfObjectsToSend = 0;
|
||||
foreach (KeyValuePair<uint, NetworkedObject> pair in SpawnManager.spawnedObjects)
|
||||
{
|
||||
if (pair.Value.ServerOnly)
|
||||
continue;
|
||||
else
|
||||
amountOfObjectsToSend++;
|
||||
}
|
||||
writer.Write(amountOfObjectsToSend);
|
||||
|
||||
foreach (KeyValuePair<uint, NetworkedObject> pair in SpawnManager.spawnedObjects)
|
||||
{
|
||||
if (pair.Value.ServerOnly)
|
||||
continue;
|
||||
else
|
||||
amountOfObjectsToSend++;
|
||||
|
||||
if (pair.Value.ServerOnly)
|
||||
continue;
|
||||
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
|
||||
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))
|
||||
{
|
||||
@ -822,7 +837,7 @@ namespace MLAPI
|
||||
writer.Write(clientId);
|
||||
}
|
||||
}
|
||||
Send("MLAPI_ADD_OBJECT", "MLAPI_RELIABLE_FRAGMENTED", stream.ToArray(), clientId);
|
||||
Send("MLAPI_ADD_OBJECT", "MLAPI_RELIABLE_FRAGMENTED", stream.GetBuffer(), clientId);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -70,7 +70,7 @@ namespace MLAP
|
||||
lastSendTime = Time.time;
|
||||
lastSentPos = transform.position;
|
||||
lastSentRot = transform.rotation;
|
||||
using (MemoryStream writeStream = new MemoryStream())
|
||||
using (MemoryStream writeStream = new MemoryStream(24))
|
||||
{
|
||||
using (BinaryWriter writer = new BinaryWriter(writeStream))
|
||||
{
|
||||
@ -81,7 +81,7 @@ namespace MLAP
|
||||
writer.Write(transform.rotation.y);
|
||||
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.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))
|
||||
{
|
||||
@ -156,7 +156,7 @@ namespace MLAP
|
||||
writer.Write(yRot);
|
||||
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)
|
||||
return;
|
||||
GameObject go = spawnedObjects[networkId].gameObject;
|
||||
if (netManager.isServer)
|
||||
if (netManager != null && netManager.isServer)
|
||||
{
|
||||
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))
|
||||
{
|
||||
@ -97,13 +97,13 @@ namespace MLAPI.NetworkingManagerComponents
|
||||
}
|
||||
//If we are host, send to everyone except ourselves. Otherwise, send to all
|
||||
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
|
||||
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);
|
||||
spawnedObjects.Remove(networkId);
|
||||
}
|
||||
@ -139,8 +139,8 @@ namespace MLAPI.NetworkingManagerComponents
|
||||
spawnedObjects.Add(netId, netObject);
|
||||
netObject.isSpawned = true;
|
||||
if (clientOwnerId != null)
|
||||
netObject.OwnerClientId = (int)clientOwnerId;
|
||||
using (MemoryStream stream = new MemoryStream())
|
||||
netObject.OwnerClientId = clientOwnerId.Value;
|
||||
using (MemoryStream stream = new MemoryStream(13))
|
||||
{
|
||||
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 (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
|
||||
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