Gnutella Forums

Gnutella Forums (https://www.gnutellaforums.com/)
-   General Discussion (https://www.gnutellaforums.com/general-discussion/)
-   -   Somebody Help! (https://www.gnutellaforums.com/general-discussion/1268-somebody-help.html)

sunjun March 21st, 2001 06:14 PM

Somebody Help!
 
I am currently doing a project on Furi. I am supposed to figure about how Furi works. And more than just figuring out the architecture, I have to suggest some ways to improve Furi. I have download the source code of Furi, but as you all know, reading source code is a quite hard work, so could anyone one give me some documentation on how Furi was designed? (Classes used, what functions performed by each class, relations between classes, any assumptions made, any unique way of solving some issues, whatever)

Thanks a lot. Please do help me.

konrad_h March 22nd, 2001 01:34 AM

This sound pretty good. I am trying just the same, but unfortunately I didnīt get very far yet. At the present, there is a big computer-related convention here in Germany (the CeBIT) and I am busy beyond rationality. But when it is over I will take some time to work into the Furi-Source.

Nevertheless I would be happy if you shared your information as soon as you have any (perhaps on a web-page). I will do just the same the moment I have any idea about how Furi works.

I will keep you informed through this Forum.

Bye,
Konrad

martinpg March 22nd, 2001 09:02 AM

Hi, I've spent some time in the last couple of weeks going through the Furi code, so what follows are just some preliminary observations. On the whole, I'm very impressed - it's pretty good and extensible.

1. The main UI classes are the MainFrame and BaseFrame classes: BF provides the basic support for a UI and then MainFrame adds all of the Furi-specific components.

2. UI actions are managed through the Furi.properties file. Essentially, Furi is designed to have pluggable action classes that you associate to each UI component when the applications starts-up. This makes adding menu items and functions a snap.

All of the Action classes extend the ActionBase class by overwriting the actionPerformed and refresh methods. The former is the real action method: refresh just helps the Action button or menu item know whether it is enabled or not.

3. Dialog boxes are associated with some but not all of the actions. These all extend JDialog.

4. UI items such as buttons, textfields, and tables have ActionListeners attached to them. These are usually Handler classes that call some MainFrame method that performs the action logic. Most handlers also call refreshAllActions - this calls the refresh method of each Action class.

So much for the UI: now come the interesting bits!

4. On startup, Furi intializes several Manager classes: these manage the various main functions of Furi. There is a single instance of each, created by the ServiceManager on start-up. The Managers work with Worker classes to handle requests. The SendManager is responsible for queeing outbound messages and it spawns SendWorker threads as required.

5. Worker classes all implement the runnable interface in order that each Worker can be spawned in its own Thread. For example, a ReadWorker will typically process a request by performing a handshake with a remote host (represented by the Host class) and then processing the request using its processIncomingData method. Most of the time the Listener class is responsible for listening for connections and handing off the Host to a ReadWorker instance. Each Host comes with its input stream (to read the request) and output stream (to write the response).

6. The message classes are used to encapsulate messages: header information is provided in the MsgHeader class (includng the Host), and the header is used to retrieve the body of the message in the form of a byte array.

Possibly the single biggest improvement that could be made is organizational: providing a better package structure would help. The MainFrame class is huge - one change I made was to pull the Handlers out into their own class. I've also pulled the Actions, Dialog, and TableModels into their own packages to make it easier see the forest for the trees.

Hope this helps. Martin

sunjun March 23rd, 2001 12:31 AM

Thanks a lot. I am supposed to work out the first report on Furi in weeks. I am working on it now.

konrad_h March 23rd, 2001 10:43 AM

Can I download the more "ordered" version of Furi somewhere?

konrad_h March 24th, 2001 09:16 AM

I made a little "Furi-Developer-Package". It requires "ant" from the jakarta project. If it is installed correctly you will find a standardized file-structure:

- src
- src/resources
- bin
- classes

and a

build.xml

With the simple command "ant dist" furi will be compiled and packed into the well know

"furi.jar"

If there is a need for this developer-package i would probably take the time to put it on my homepage. So, tell me if you have use for it.

Bye,
Konrad

sunjun March 25th, 2001 05:55 PM

I do want it. your web site url please.


All times are GMT -7. The time now is 02:02 PM.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2025, vBulletin Solutions, Inc.
SEO by vBSEO 3.6.0 ©2011, Crawlability, Inc.

Copyright Đ 2020 Gnutella Forums.
All Rights Reserved.