public void SendNetworkMessage(Message message, SendTo sendTo, NetIncomingMessage netMessage = null, NetDeliveryMethod deliveryMethod = NetDeliveryMethod.ReliableOrdered) { if (m_isServer) { Type messageType = message.GetType(); NetOutgoingMessage om = m_server.CreateMessage(); om.Write((int)MessageFunction.ClassMessage);; om.Write(messageType.Assembly.ToString()); om.Write(messageType.ToString()); om.WriteAllFields(message); NetConnection sender = null; if (netMessage != null) { sender = netMessage.SenderConnection; } switch (sendTo) { case SendTo.All: message.OnCalled(message, netMessage); m_server.SendToAll(om, sender, deliveryMethod, 0); break; case SendTo.Others: m_server.SendToAll(om, sender, deliveryMethod, 0); if (sender != null) //If server diden't send the message { message.OnCalled(message, netMessage); } break; case SendTo.Server: message.OnCalled(message, netMessage); break; } } else { Type messageType = message.GetType(); NetOutgoingMessage om = m_client.CreateMessage(); om.Write((int)MessageFunction.ClassMessage); om.Write((int)sendTo); om.Write(messageType.Assembly.ToString()); om.Write(messageType.ToString()); om.WriteAllFields(message); m_client.SendMessage(om, deliveryMethod); if (sendTo == SendTo.All) //Trigger for sender if you sent it to everybody { message.OnCalled(message, netMessage); } } }
void HandleClientMessage(NetIncomingMessage msg) { MessageFunction type = (MessageFunction)msg.ReadInt32(); switch (type) { case MessageFunction.ClassMessage: string assemblyName = msg.ReadString(); string classType = msg.ReadString(); Message report = (Message)Activator.CreateInstance(assemblyName, classType).Unwrap(); msg.ReadAllFields(report); report.OnCalled(report, msg); break; case MessageFunction.SpawnAllPlayer: int count = msg.ReadInt32(); for (int i = 0; i < count; i++) { int id = msg.ReadInt32(); string playerName = msg.ReadString(); SpawnPlayer(id, playerName); } int newId = SpawnLocalPlayer(); MessageSpawnPlayer spawnMessage = new MessageSpawnPlayer(); spawnMessage.playerId = newId; spawnMessage.playerName = PlatformService.personaName; SendNetworkMessage(spawnMessage, SendTo.Others); break; case MessageFunction.UpdateVehiclesPositions: m_vNetworkManager.UpdateCarsPositions(msg); break; case MessageFunction.RemoveVehicle: int carID2 = msg.ReadInt32(); m_vNetworkManager.RemoveCar(carID2); break; case MessageFunction.UpdateCitizensPositions: m_cNetworkManager.UpdateCitizensPositions(msg); break; default: Debug.LogWarning("Unhandled msg type: " + type.ToString()); break; } }
public void SendNetworkMessage(Message message, SendTo sendTo, NetIncomingMessage netMessage = null, NetDeliveryMethod deliveryMethod = NetDeliveryMethod.ReliableOrdered) { if (m_isServer) { Type messageType = message.GetType(); NetOutgoingMessage om = m_server.CreateMessage(); om.Write((int)MessageFunction.ClassMessage);; om.Write(messageType.Assembly.ToString()); om.Write(messageType.ToString()); om.WriteAllFields(message); NetConnection sender = null; if (netMessage != null) { sender = netMessage.SenderConnection; } switch (sendTo) { case SendTo.All: message.OnCalled(message, netMessage); m_server.SendToAll(om, sender, deliveryMethod, 0); break; case SendTo.Others: m_server.SendToAll(om, sender, deliveryMethod, 0); if (sender != null) //If server diden't send the message message.OnCalled(message, netMessage); break; case SendTo.Server: message.OnCalled(message, netMessage); break; } } else { Type messageType = message.GetType(); NetOutgoingMessage om = m_client.CreateMessage(); om.Write((int)MessageFunction.ClassMessage); om.Write((int) sendTo); om.Write(messageType.Assembly.ToString()); om.Write(messageType.ToString()); om.WriteAllFields(message); m_client.SendMessage(om, deliveryMethod); if (sendTo == SendTo.All) //Trigger for sender if you sent it to everybody { message.OnCalled(message, netMessage); } } }