private void broadcastPeers() { if (sceNetAdhocctlModule.hleNetAdhocctlGetGroupName() == null) { return; } try { openSocket(); JpcspAdhocctlMessage adhocctlMessage = new JpcspAdhocctlMessage(sceUtility.SystemParamNickname, Wlan.MacAddress, sceNetAdhocctlModule.hleNetAdhocctlGetGroupName()); if (sceNetAdhocctlModule.hleNetAdhocctlGetMode() == PSP_ADHOCCTL_MODE_GAMEMODE && sceNetAdhocctlModule.hleNetAdhocctlGetRequiredGameModeMacs().size() > 0) { bool gameModeComplete = sceNetAdhocctlModule.GameModeComplete; adhocctlMessage.setGameModeComplete(gameModeComplete, sceNetAdhocctlModule.hleNetAdhocctlGetRequiredGameModeMacs()); } SocketAddress[] socketAddress = sceNetAdhocModule.getMultiSocketAddress(sceNetAdhoc.ANY_MAC_ADDRESS, sceNetAdhocModule.getRealPortFromClientPort(sceNetAdhoc.ANY_MAC_ADDRESS, adhocctlBroadcastPort)); for (int i = 0; i < socketAddress.Length; i++) { DatagramPacket packet = new DatagramPacket(adhocctlMessage.Message, JpcspAdhocctlMessage.MessageLength, socketAddress[i]); adhocctlSocket.send(packet); //if (log.DebugEnabled) { Console.WriteLine(string.Format("broadcast sent to peer[{0}]: {1}", socketAddress[i], adhocctlMessage)); } } } catch (SocketException e) { Console.WriteLine("broadcastPeers", e); } catch (IOException e) { Console.WriteLine("broadcastPeers", e); } }
private void pollPeers() { try { openSocket(); // Poll all the available messages. // Exiting the loop only when no more messages are available (SocketTimeoutException) while (true) { sbyte[] bytes = new sbyte[JpcspAdhocctlMessage.MessageLength]; DatagramPacket packet = new DatagramPacket(bytes, bytes.Length); adhocctlSocket.receive(packet); JpcspAdhocctlMessage adhocctlMessage = new JpcspAdhocctlMessage(packet.Data, packet.Length); //if (log.DebugEnabled) { Console.WriteLine(string.Format("broadcast received from peer: {0}", adhocctlMessage)); } // Ignore messages coming from myself if (!sceNetAdhoc.isSameMacAddress(Wlan.MacAddress, adhocctlMessage.macAddress)) { if (adhocctlMessage.groupName.Equals(sceNetAdhocctlModule.hleNetAdhocctlGetGroupName())) { sceNetAdhocctlModule.hleNetAdhocctlAddPeer(adhocctlMessage.nickName, new pspNetMacAddress(adhocctlMessage.macAddress)); } if (adhocctlMessage.ibss.Equals(sceNetAdhocctlModule.hleNetAdhocctlGetIBSS())) { sceNetAdhocctlModule.hleNetAdhocctlAddNetwork(adhocctlMessage.groupName, new pspNetMacAddress(adhocctlMessage.macAddress), adhocctlMessage.channel, adhocctlMessage.ibss, adhocctlMessage.mode); if (adhocctlMessage.mode == PSP_ADHOCCTL_MODE_GAMEMODE) { sceNetAdhocctlModule.hleNetAdhocctlAddGameModeMac(adhocctlMessage.macAddress); if (sceNetAdhocctlModule.hleNetAdhocctlGetRequiredGameModeMacs().size() <= 0) { sceNetAdhocctlModule.hleNetAdhocctlSetGameModeJoinComplete(adhocctlMessage.gameModeComplete); if (adhocctlMessage.gameModeComplete) { sbyte[][] macs = adhocctlMessage.gameModeMacs; if (macs != null) { sceNetAdhocctlModule.hleNetAdhocctlSetGameModeMacs(macs); } } } } } } } } catch (SocketException e) { Console.WriteLine("broadcastPeers", e); } catch (SocketTimeoutException) { // Nothing available } catch (IOException e) { Console.WriteLine("broadcastPeers", e); } }