public void Interpret(INetworkMediator netMediator, EndPoint sender, IMessage message) { var engine = (IEngineFacade)netMediator.EngineProxy; int count = engine.EntityRepository.Count; var msg = new SendEntitiesToNewPlayerMessage(); msg.EntityCount = count; msg.Ids = new int[count]; msg.PrefabIds = new int[count]; msg.Positions = new Vector3[count]; msg.Rotations = new Quaternion[count]; msg.Scales = new Vector3[count]; msg.SceneIdentifiers = new string[count]; int i = 0; var itr = engine.EntityRepository.GetEnumerator(); while (itr.MoveNext()) { if (itr.Current != null) { var t = itr.Current.OwnerGameObject.transform; msg.Ids[i] = itr.Current.Id; msg.PrefabIds[i] = itr.Current.PrefabId; msg.Positions[i] = t.position; msg.Rotations[i] = t.rotation; msg.Scales[i] = t.localScale; msg.SceneIdentifiers[i] = itr.Current.SceneIdentifier; } i++; } netMediator.SendReliableMessage(msg, sender); }
public static void ForwardToOtherClients(this INetworkMediator netMediator, EndPoint sender, IMessage message) { if (!netMediator.IsServer) { throw new SocketNotServerException("Tried to forward a message" + "to connected clients, but the current socket is not a server"); } var itr = netMediator.PlayerRepository.GetEnumerator(); while (itr.MoveNext()) { if (itr.Current != null && itr.Current.EndPoint != sender) { netMediator.SendReliableMessage(message, itr.Current.EndPoint); } } }