예제 #1
0
 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;
     }
 }
예제 #2
0
        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);
            }
        }
예제 #3
0
        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();
        }