Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
            }
        }