void StreamRoutine() { try { System.Diagnostics.Debug.WriteLine("StreamRoutine"); using (var byteStreamer = new ByteStreamer( LaunchOpts.StreamWidth, LaunchOpts.StreamHeight)) using (var pptView = new PptView( LaunchOpts.RootPath, LaunchOpts.SlideShowPath, LaunchOpts.StartSlide)) { System.Diagnostics.Debug.WriteLine("Loop"); while (!Quit) { int width = 0, height = 0; if (pptView.Render(ref SlidePixels, ref width, ref height) && byteStreamer.NeedData) { byteStreamer.PushBuffer(SlidePixels); } System.Diagnostics.Debug.WriteLine("Render"); Thread.Sleep(StreamDelay); } } } catch (Exception) { System.Diagnostics.Debug.WriteLine("done"); Quit = true; return; } }
void OnReceivedServerResponse(DiscoveryInfo info) { // Validation is our capacity to decode the message, if the payload is so different we cant parse it we silently dump it! NetworkDiscoveryUtility.RunSafe(() => { info.unpackedData = (GameBroadcastPacket)ByteStreamer.StreamFromBytes(info.packetData); }, false); if (info.unpackedData != null) { onReceivedServerResponse(info); } }
void OnGUI() { if (NetworkManager.singleton == null) { return; } if (NetworkServer.active || NetworkClient.active) { return; } if (!NetworkDiscovery.SupportedOnThisPlatform) { return; } if (m_centeredLabelStyle == null) { m_centeredLabelStyle = new GUIStyle(GUI.skin.label); m_centeredLabelStyle.alignment = TextAnchor.MiddleCenter; } int elemWidth = width / m_headerNames.Length - 5; GUILayout.BeginArea(new Rect(offsetX, offsetY, width, height)); // In my own game I ripped this out, this is just as an example (wanted to avoid adding a NetworkManager to the sample) if (!NetworkClient.isConnected && !NetworkServer.active) { if (!NetworkClient.active) { // LAN Host if (GUILayout.Button("Passive Host", GUILayout.Height(25), GUILayout.ExpandWidth(false))) { m_discoveredServers.Clear(); NetworkManager.singleton.StartHost(); // Wire in broadcaster pipeline here GameBroadcastPacket gameBroadcastPacket = new GameBroadcastPacket(); gameBroadcastPacket.serverAddress = NetworkManager.singleton.networkAddress; gameBroadcastPacket.port = ((TelepathyTransport)Transport.activeTransport).port; gameBroadcastPacket.hostName = "MyDistinctDummyPlayerName"; gameBroadcastPacket.serverGUID = NetworkDiscovery.instance.serverId; byte[] broadcastData = ByteStreamer.StreamToBytes(gameBroadcastPacket); NetworkDiscovery.instance.ServerPassiveBroadcastGame(broadcastData); } } } if (GUILayout.Button("Active Discovery", GUILayout.Height(25), GUILayout.ExpandWidth(false))) { m_discoveredServers.Clear(); NetworkDiscovery.instance.ClientRunActiveDiscovery(); } GUILayout.Label(string.Format("Servers [{0}]:", m_discoveredServers.Count)); // header GUILayout.BeginHorizontal(); foreach (string str in m_headerNames) { GUILayout.Button(str, GUILayout.Width(elemWidth)); } GUILayout.EndHorizontal(); // servers m_scrollViewPos = GUILayout.BeginScrollView(m_scrollViewPos); foreach (var info in m_discoveredServers.Values) { GUILayout.BeginHorizontal(); if (GUILayout.Button(info.EndPoint.Address.ToString(), GUILayout.Width(elemWidth))) { Connect(info); } for (int i = 0; i < m_headerNames.Length; i++) { if (i == 0) { GUILayout.Label(info.unpackedData.serverAddress, m_centeredLabelStyle, GUILayout.Width(elemWidth)); } else { GUILayout.Label(info.unpackedData.hostName, m_centeredLabelStyle, GUILayout.Width(elemWidth)); } } GUILayout.EndHorizontal(); } GUILayout.EndScrollView(); GUILayout.EndArea(); }