/// <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(); }
/// <summary> /// Used to stop the broadcast of the current match /// </summary> public void StopMatchBroadcast() { if (!IsBroadcastingMatch) { return; } IsBroadcastingMatch = false; LANMatchSendThread.Abort(); LANMatchSocket.Close(); }
/// <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); }
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(); }
private void MatchRequest(byte[] packet, EndPoint e) { LANMatchSocket.SendTo(packet, e); }