Added host support
This commit is contained in:
parent
db1e200494
commit
bde2f0f3af
@ -82,12 +82,14 @@ namespace MLAPI
|
|||||||
|
|
||||||
public void SendToServer(string messageType, string channelName, byte[] data)
|
public void SendToServer(string messageType, string channelName, byte[] data)
|
||||||
{
|
{
|
||||||
if(isServer)
|
if (isServer)
|
||||||
{
|
{
|
||||||
Debug.LogWarning("MLAPI: Sending messages from server to server is not yet supported");
|
NetworkingManager.singleton.InvokeMessageHandlers(messageType, data, -1);
|
||||||
return;
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
NetworkingManager.singleton.Send(NetworkingManager.singleton.serverClientId, messageType, channelName, data);
|
||||||
}
|
}
|
||||||
NetworkingManager.singleton.Send(NetworkingManager.singleton.serverClientId, messageType, channelName, data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendToLocalClient(string messageType, string channelName, byte[] data)
|
public void SendToLocalClient(string messageType, string channelName, byte[] data)
|
||||||
|
@ -139,6 +139,17 @@ namespace MLAPI
|
|||||||
singleton.releasedNetworkObjectIds.Push(networkId);
|
singleton.releasedNetworkObjectIds.Push(networkId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal void InvokeMessageHandlers(string messageType, byte[] data, int clientId)
|
||||||
|
{
|
||||||
|
if(!messageTypes.ContainsKey(messageType) || !messageCallbacks.ContainsKey(messageTypes[messageType]))
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (KeyValuePair<int, Action<int, byte[]>> pair in messageCallbacks[messageTypes[messageType]])
|
||||||
|
{
|
||||||
|
pair.Value(clientId, data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
internal int AddIncomingMessageHandler(string name, Action<int, byte[]> action)
|
internal int AddIncomingMessageHandler(string name, Action<int, byte[]> action)
|
||||||
{
|
{
|
||||||
if(messageTypes.ContainsKey(name))
|
if(messageTypes.ContainsKey(name))
|
||||||
@ -566,6 +577,17 @@ namespace MLAPI
|
|||||||
|
|
||||||
internal void Send(int clientId, string messageType, string channelName, byte[] data)
|
internal void Send(int clientId, string messageType, string channelName, byte[] data)
|
||||||
{
|
{
|
||||||
|
if(isHost && clientId == -1)
|
||||||
|
{
|
||||||
|
//Host trying to send data to it's own client
|
||||||
|
InvokeMessageHandlers(messageType, data, clientId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if(clientId == -1)
|
||||||
|
{
|
||||||
|
//Client trying to send data to host
|
||||||
|
clientId = serverClientId;
|
||||||
|
}
|
||||||
using (MemoryStream stream = new MemoryStream())
|
using (MemoryStream stream = new MemoryStream())
|
||||||
{
|
{
|
||||||
using (BinaryWriter writer = new BinaryWriter(stream))
|
using (BinaryWriter writer = new BinaryWriter(stream))
|
||||||
@ -597,7 +619,18 @@ namespace MLAPI
|
|||||||
int channel = channels[channelName];
|
int channel = channels[channelName];
|
||||||
for (int i = 0; i < clientIds.Length; i++)
|
for (int i = 0; i < clientIds.Length; i++)
|
||||||
{
|
{
|
||||||
NetworkTransport.Send(hostId, clientIds[i], channel, dataToSend, size, out error);
|
int clientId = clientIds[i];
|
||||||
|
if (isHost && clientId == -1)
|
||||||
|
{
|
||||||
|
InvokeMessageHandlers(messageType, data, clientId);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else if (clientId == -1)
|
||||||
|
{
|
||||||
|
//Client trying to send data to host
|
||||||
|
clientId = serverClientId;
|
||||||
|
}
|
||||||
|
NetworkTransport.Send(hostId, clientId, channel, dataToSend, size, out error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -618,7 +651,18 @@ namespace MLAPI
|
|||||||
int channel = channels[channelName];
|
int channel = channels[channelName];
|
||||||
for (int i = 0; i < clientIds.Count; i++)
|
for (int i = 0; i < clientIds.Count; i++)
|
||||||
{
|
{
|
||||||
NetworkTransport.Send(hostId, clientIds[i], channel, dataToSend, size, out error);
|
int clientId = clientIds[i];
|
||||||
|
if (isHost && clientId == -1)
|
||||||
|
{
|
||||||
|
InvokeMessageHandlers(messageType, data, clientId);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else if (clientId == -1)
|
||||||
|
{
|
||||||
|
//Client trying to send data to host
|
||||||
|
clientId = serverClientId;
|
||||||
|
}
|
||||||
|
NetworkTransport.Send(hostId, clientId, channel, dataToSend, size, out error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -639,7 +683,19 @@ namespace MLAPI
|
|||||||
int channel = channels[channelName];
|
int channel = channels[channelName];
|
||||||
foreach (KeyValuePair<int, NetworkedClient> pair in connectedClients)
|
foreach (KeyValuePair<int, NetworkedClient> pair in connectedClients)
|
||||||
{
|
{
|
||||||
NetworkTransport.Send(hostId, pair.Key, channel, dataToSend, size, out error);
|
int clientId = pair.Key;
|
||||||
|
if(isHost && pair.Key == -1)
|
||||||
|
{
|
||||||
|
InvokeMessageHandlers(messageType, data, pair.Key);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else if (clientId == -1)
|
||||||
|
{
|
||||||
|
//Client trying to send data to host
|
||||||
|
clientId = serverClientId;
|
||||||
|
}
|
||||||
|
NetworkTransport.Send(hostId, clientId, channel, dataToSend, size, out error);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -662,7 +718,18 @@ namespace MLAPI
|
|||||||
{
|
{
|
||||||
if (pair.Key == clientIdToIgnore)
|
if (pair.Key == clientIdToIgnore)
|
||||||
continue;
|
continue;
|
||||||
NetworkTransport.Send(hostId, pair.Key, channel, dataToSend, size, out error);
|
int clientId = pair.Key;
|
||||||
|
if (isHost && pair.Key == -1)
|
||||||
|
{
|
||||||
|
InvokeMessageHandlers(messageType, data, clientId);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else if (clientId == -1)
|
||||||
|
{
|
||||||
|
//Client trying to send data to host
|
||||||
|
clientId = serverClientId;
|
||||||
|
}
|
||||||
|
NetworkTransport.Send(hostId, clientId, channel, dataToSend, size, out error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@ It's licenced under the MIT licence :D
|
|||||||
* Serializer (both for the library to speed up and to allow structs to be sent easily)
|
* Serializer (both for the library to speed up and to allow structs to be sent easily)
|
||||||
* SyncVars (allow variables to automatically be synced to new clients and current clients when it's changed)
|
* SyncVars (allow variables to automatically be synced to new clients and current clients when it's changed)
|
||||||
* Message compression
|
* Message compression
|
||||||
|
* Host support (Client hosts the server) (done)
|
||||||
|
|
||||||
That's all I can think of right now. But there is more to come, especially if people show intrest in the project.
|
That's all I can think of right now. But there is more to come, especially if people show intrest in the project.
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user