private void ReceiveCreateView(NetMessage message, NetConnection server) { if (!server.IsServer && !server.IsPeer) { return; } int viewId = (int)message.Parameters[0]; int group = (int)message.Parameters[1]; string prefabRoot = (string)message.Parameters[2]; var stream = (NetStream)message.Parameters[3]; NetView.Relation relation = default(NetView.Relation); NetConnection controller = null; switch (message.MessageId) { case (int)ViewCmd.CreateOwnerView: controller = Socket.Self; relation = NetView.Relation.Owner; break; case (int)ViewCmd.CreatePeerView: relation = NetView.Relation.Peer; break; case (int)ViewCmd.CreateCreatorView: server = Socket.Self; relation = NetView.Relation.Creator; break; case (int)ViewCmd.CreateProxyView: relation = NetView.Relation.Proxy; break; } if (relation == NetView.Relation.Creator || relation == NetView.Relation.Peer) { var ipendpoint = (IPEndPoint)message.Parameters[4]; if (ipendpoint != null) { if (Socket.EndpointConnected(ipendpoint)) { controller = Socket.EndpointToConnection(ipendpoint); } else { NetLog.Error("Failed to create view, controller endpoint not connected: " + ipendpoint); } } } var view = CreateView(controller, server, viewId, group, prefabRoot, relation); view.TriggerReadInstantiateData(stream); if (OnNetViewCreated != null) { OnNetViewCreated(view); } }
internal void AddPeerSelf(NetZone zone) { if (peerLookup.ContainsKey(zone.ServerEndpoint)) { peerLookup.Remove(zone.ServerEndpoint); } peerLookup.Add(zone.ServerEndpoint, zone); if (peers.Contains(zone)) { peers.Remove(zone); } peers.Add(zone); if (Socket.EndpointConnected(zone.ServerEndpoint)) { PeerConnected(Socket.EndpointToConnection(zone.ServerEndpoint)); } }