public SparkRPC(Guid netGuid, string methodName, int[] receiverIds, SparkPeer sender, object[] parameters) { this.NetGuid = netGuid; this.MethodName = methodName; this.ReceiverIds = receiverIds; this.Sender = sender; this.Parameters = parameters; }
/// <summary> /// Starts the match. /// </summary> /// <param name="message">Message.</param> public void StartMatch(MatchFoundMessage message) { sparkMatch = new SparkMatch(message); foreach (MatchFoundMessage._Participant participant in message.Participants) { SparkPeer peer = new SparkPeer(participant.DisplayName, participant.Id, participant.PeerId.Value); sparkMatch.peerList.Add(peer); } sparkNetwork.Configure(message, OnPlayerConnect, OnPlayerDisconnect, OnReady, OnPacket ); sparkNetwork.Connect(); }
/// <summary> /// Raises the player disconnect event. /// </summary> /// <param name="peerId">Peer identifier.</param> private void OnPlayerDisconnect(int peerId) { SparkPeer peer = sparkMatch.FindBy_Id(peerId); foreach (SparkView view in sparkViews) { if (view.sparkPeer.id == peerId) { view.SendEvent_PlayerDisconnect(peer); } } if (IsMasterPlayer) { LocalRPC("Remove_LocalRPC_Buffer", SparkTargets.Others, false, peer); LocalRPC("Remove_RPC_Buffer", SparkTargets.Others, false, peer); Remove_LocalRPC_Buffer(peer); Remove_RPC_Buffer(peer); } for (int i = sparkViews.Count - 1; i >= 0; i--) { if (sparkViews[i].sparkPeer.id == peerId) { Destroy(sparkViews[i].gameObject); } } if (IsMasterPlayer) { foreach (SparkView view in sparkViews) { view.Call("LocalRPC", "Remove_LocalRPC_Buffer", SparkTargets.Others, false, peer); view.Call("LocalRPC", "Remove_RPC_Buffer", SparkTargets.Others, false, peer); view.Call("Remove_LocalRPC_Buffer", SparkTargets.Others, false, peer); view.Call("Remove_RPC_Buffer", SparkTargets.Others, false, peer); } } }
private GameObject TryInstantiate(GameObject prefab, Vector3 position, Quaternion rotation, bool isBuffered = true) { SparkIdentity identity = prefab.GetComponent <SparkIdentity> (); SparkPeer sender = sparkMatch.peerList.Find(x => x.id == sparkNetwork.PeerId); List <Guid> guids = new List <Guid> (); foreach (SparkBehaviour behaviour in prefab.GetComponentsInChildren <SparkBehaviour>()) { guids.Add(Guid.NewGuid()); } foreach (SparkView view in prefab.GetComponentsInChildren <SparkView>()) { guids.Add(Guid.NewGuid()); } GameObject instantiate = NetworkInstantiate(identity.uniqueId, isBuffered, position, rotation, sender, guids.ToArray()); LocalRPC("NetworkInstantiate", SparkTargets.Others, isBuffered, identity.uniqueId, isBuffered, position, rotation, sender, guids.ToArray()); return(instantiate); }
/// <summary> /// Raises the match updated event. /// </summary> /// <param name="message">Message.</param> private void OnMatchUpdated(MatchUpdatedMessage message) { foreach (SparkView view in sparkViews) { view.SendEvent_MatchUpdated(message); } foreach (MatchUpdatedMessage._Participant participant in message.Participants) { SparkPeer peer = new SparkPeer(participant.DisplayName, participant.Id, participant.PeerId.Value); if (message.AddedPlayers.Contains(participant.Id)) { sparkMatch.peerList.Add(peer); } if (message.RemovedPlayers.Contains(participant.Id)) { sparkMatch.peerList.Remove(peer); } } }
// Disconnect private void OnPlayerDisconnect(SparkPeer peer) { }
private GameObject NetworkInstantiate(string uniqueId, bool isBuffered, Vector3 position, Quaternion rotation, SparkPeer sender, Guid[] guids) { GameObject[] gameObjects = Resources.FindObjectsOfTypeAll <GameObject> (); foreach (GameObject instantiate in gameObjects) { SparkIdentity identity = instantiate.GetComponent <SparkIdentity> (); if (identity != null && identity.uniqueId == uniqueId) { GameObject obj = GameObject.Instantiate(instantiate, position, rotation); int count = 0; foreach (SparkBehaviour behaviour in obj.GetComponentsInChildren <SparkBehaviour>()) { behaviour.netGuid = guids [count++]; } foreach (SparkView view in obj.GetComponentsInChildren <SparkView>()) { view.sparkPeer = sender; view.SendEvent_OnInstantiate(); view.netGuid = guids[count++]; } return(obj); } } throw new Exception("A GameObject with this SparkIdentity ID was not found."); }
/// <summary> /// Removes the RPC from the local RPC buffer. /// </summary> /// <param name="sender">Sender.</param> private void Remove_LocalRPC_Buffer(SparkPeer sender) { LocalRPC_Buffer.RemoveAll(x => x.Sender == sender); }
public SparkMessageInfo(SparkPeer sender) { this.Sender = sender; }
private void OnPlayerDisconnect(SparkPeer peer) { Debug.Log("On player disconnect."); }