Ejemplo n.º 1
0
        /// <summary>
        /// Internal method used to serialize and send match messages on another thread
        /// </summary>
        private void MatchSend()
        {
            MatchData match = new MatchData
            {
                matchName   = man.ServerName,
                playerCount = man.ConnectedClients.Count
            };

            IPEndPoint target = new IPEndPoint(IPAddress.Broadcast, NetworkManager.LANBroadcastPort);

            byte[] packet;

            try
            {
                packet = man.prepSend(match);
            }

            catch (Exception ex)
            {
                string message = "Recieved exception from prepSend: " + ex.ToString();
                Debug.LogError(message + ", MSG: " + match);
                return;
            }

            LANMatchSocket.SendTo(packet, target);

            Thread.Sleep(matchBroadcastInterval);
            MatchSend();
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Used to stop the broadcast of the current match
        /// </summary>
        public void StopMatchBroadcast()
        {
            if (!IsBroadcastingMatch)
            {
                return;
            }

            IsBroadcastingMatch = false;
            LANMatchSendThread.Abort();
            LANMatchSocket.Close();
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Function used to start recieving LAN matches
        /// </summary>
        public void StopLANMatchRecieve()
        {
            if (!IsSearchingForMatches)
            {
                return;
            }

            Log("Stop LAN listen");

            IsSearchingForMatches = false;
            LANMatchRecieveThread.Abort();
            LANMatchSocket.Close(1);
        }
Ejemplo n.º 4
0
        private void MatchRecieve()
        {
            if (Thread.CurrentThread.ManagedThreadId == man.MainThread.ManagedThreadId)
            {
                Debug.LogError("Match recieve tried to run on main thread");
                return;
            }

            byte[]     data      = new byte[1024];
            IPEndPoint sender    = new IPEndPoint(IPAddress.Any, 0); //Recieve from any
            EndPoint   tmpRemote = (EndPoint)(sender);               //Convert IPEndPoint to EndPoint

            LANMatchSocket.ReceiveFrom(data, ref tmpRemote);

            int targetLength = data[1020] + data[1021] + data[1022] + data[1023];

            if (targetLength == 0)
            {
                Debug.LogWarning("Recieved an incomplete match message from: " + tmpRemote);
                MatchRecieve();
                return;
            }

            byte type = data[1019];

            Array.Resize(ref data, targetLength);

            if (type == (byte)MessageType.MatchData)
            {
                try
                {
                    MatchData match = Serializer.DeSerialize <MatchData>(data);
                    pendingMatchData.Enqueue(match);
                }
                catch (Exception e)
                {
                    Debug.LogError("Match making serialize error: " + e);
                }
            }

            MatchRecieve();
        }
Ejemplo n.º 5
0
 private void MatchRequest(byte[] packet, EndPoint e)
 {
     LANMatchSocket.SendTo(packet, e);
 }