예제 #1
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: private void sendToUser(User user, pspsharp.network.proonline.PacketFactory.SceNetAdhocctlPacketBaseS2C packet) throws java.io.IOException
        private void sendToUser(User user, SceNetAdhocctlPacketBaseS2C packet)
        {
            System.IO.Stream os = user.socket.OutputStream;
            os.Write(packet.Bytes, 0, packet.Bytes.Length);
            os.Flush();
        }
예제 #2
0
        protected internal virtual void friendFinder()
        {
            long lastPing = Emulator.Clock.currentTimeMillis();

            sbyte[] buffer = new sbyte[1024];
            int     offset = 0;

            //if (log.DebugEnabled)
            {
                Console.WriteLine("Starting friendFinder");
            }

            friendFinderActive = true;

            while (!exit_Renamed)
            {
                long now = Emulator.Clock.currentTimeMillis();
                if (now - lastPing >= pingTimeoutMillis)
                {
                    lastPing = now;
                    safeSendToMetaServer(new PacketFactory.SceNetAdhocctlPingPacketC2S(this));
                }

                try
                {
                    int Length = metaSocket.InputStream.read(buffer, offset, buffer.Length - offset);
                    if (Length > 0)
                    {
                        offset += Length;
                    }
                    else if (Length < 0)
                    {
                        // The connection has been closed by the server, try to reconnect...
                        closeConnectionToMetaServer();
                        connectToMetaServer();
                    }
                }
                catch (SocketTimeoutException)
                {
                    // Ignore read timeout
                }
                catch (IOException e)
                {
                    Console.WriteLine("friendFinder", e);
                }

                if (offset > 0)
                {
                    if (log.TraceEnabled)
                    {
                        log.trace(string.Format("Received from meta server: OPCODE {0:D}", buffer[0]));
                    }

                    int consumed = 0;
                    SceNetAdhocctlPacketBaseS2C packet = packetFactory.createPacketS2C(this, buffer, offset);
                    if (packet == null)
                    {
                        // Skip the unknown opcode
                        consumed = 1;
                    }
                    else if (offset >= packet.Length)
                    {
                        //if (log.DebugEnabled)
                        {
                            Console.WriteLine(string.Format("Incoming server packet {0}", packet));
                        }
                        packet.process();
                        consumed = packet.Length;
                    }

                    if (consumed > 0)
                    {
                        Array.Copy(buffer, consumed, buffer, 0, offset - consumed);
                        offset -= consumed;
                    }
                }
            }

            //if (log.DebugEnabled)
            {
                Console.WriteLine("Exiting friendFinder");
            }

            // Be clean, send a disconnect message to the server
            try
            {
                sendToMetaServer(new PacketFactory.SceNetAdhocctlDisconnectPacketC2S(this));
            }
            catch (IOException)
            {
                // Ignore error
            }

            closeConnectionToMetaServer();
            exit_Renamed = false;

            friendFinderActive = false;
        }