物語
すでに書いたように、2010年にノード番号2を受け取りました:5020/848。 仕事で十分な仕事を持っていなかったため、「創造的な飢er」を経験し、自分の力を発揮できる場所を探していました。 そして見つけた! 1か月も経たないうちに、私のサイトのユーザーにさまざまな追加の機会を与える一定量のソフトウェアが作成されました-フォーラムまたはNNTPを介したFidoへのアクセス、送受信メールの電子メールへの変換など。
この動物園全体が安定して動作し始める頃には、サイトの開発にほとんど興味を失い、月に数回メールを見ていました。
2011年に、私のソフトウェアの一部をJavaで書き直し、別のノードとして実行することになりました。そのため、ノード番号2:5020/849を取得しましたが、プロジェクトはプロジェクトを超えませんでした。
そしてちょうど一ヶ月前、一人の人が私のサイトでユーザーを管理するソフトウェアのソースコードを彼に送るように私に頼みました。 それらをそのまま送信するとSendいため、コードを適切にクリーンアップする必要がありました。 それから、このすべてのコードを見て、アルゴリズムがすべて発明されたので、1年前に計画したように、すべてをJavaで書き換えてみませんか? まあ、それは始まった...
せっかちな人のために
技術的な詳細に興味がない人のために、すぐにその本質をお話しします。
現在、 jNodeは、メーラー(メールの送受信)、トッサー(エコー会議でメッセージを管理)、およびトラッカー( ネットメールメッセージを管理)の機能を実行する1インスタンスアプリケーションです。
jNodeをホストシステムとして設定することにより、一般にオペレーターは他に何も必要ありません-システムは設定に従ってメールを自動的に送受信します。
将来的には、管理用のWebインターフェイスを作成する予定ですが、今のところは、選択したデータベースにクエリを簡単に書き込むことができます:)
近い将来、エンドユーザーのファイドクライアント向けにプロジェクトを分岐する予定です。
必要に応じて、開発に参加してください。
技術的な詳細
以下に、コードのサンプルとその理由を簡単に説明します。
それはFTNまたはこのプロジェクトに精通している人だけにおもしろいでしょう 。
Javaバージョン: 1.7
ライブラリ:選択したDBMS用のORMLite 4、JBDCドライバー。
ライセンス: Apache License 2.0
入手先: github
0. FTNはLEショートフィールドを使用します。 裏返し:
public static short revShort(short v) { return (short) ((short) ((short) (v >> 8) & 0xff) | (short) (v << 8)); }
1. Z形式のFTNアドレス:N / FP @ D ドメインは使用せず、標準の「fidonet」と見なします。
public class FtnAddress { private int zone; private int net; private int node; private int point; }
2.パッケージは、ヘッダーとN個のメッセージを含むデータの配列です。
public class FtnPkt { private FtnAddress fromAddr; private FtnAddress toAddr; private String password; private List<FtnMessage> messages; private Date date; }
3.メッセージ-from / to、属性、件名、メッセージテキストが含まれます。
public class FtnMessage { private boolean isNetmail; private Date date; private String fromName; private String toName; private FtnAddress fromAddr; private FtnAddress toAddr; private String area; private String subject; private String text; private List<Ftn2D> seenby; private List<Ftn2D> path; }
4. ORMLite-仕事をしてDaoを取得するシングルトンマネージャーを作成しました。
public class ORMManager { private static ORMManager self = new ORMManager(); private boolean started = false; private Dao<X, ?> daoX; public static ORMManager getInstanse() { return self; } public void start(Hashtable<String, String> settings) throws SQLException { if (!started) { ConnectionSource source = new JdbcConnectionSource(JDBC_URL, JDBC_USER, JDBC_PASS); daoX = DaoManager.createDao(source, X.class); if (!daoX.isTableExists()) { TableUtils.createTable(source, X.class); } started = true; } } public static Dao<X, ?> x() { return getInstanse().daoX; } }
5. FtnTosser-ここでは、package-> baseおよびbase-> packageを変換するメソッドが収集されます。
すべてのメソッドは静的です。 たぶんこれはアーキテクチャ的に間違っているかもしれませんが、私は別のオプションを見ませんでした。
2つの主な方法:
public class FtnTosser { public static void tossIncoming(Message[] received) { // } public static List<Message> getMessagesForLink(Link link) { // } }
6. ProtocolConnector-プロトコル接続用のインターフェース。 これまでのところ、binkpのみが実装されていますが、Fidoの他のプロトコルが将来登場したらどうなるでしょうか?
InputStreamのみが入力を受け取り、ソケットについては何も知りません。たとえば、ファイルから読み取ることもできます。
public interface ProtocolConnector { // ( ) public void initOutgoing(Connector connector); // ( ) public void initIncoming(Connector connector); // , public void avalible(InputStream is); // Frame - byte[] getBytes() // public Frame[] getFrames(); // true public boolean closed(); // true public boolean canSend(); // public void reset(); // message Frame[] public void send(Message message); // , public void eob(); // public Message[] getReceived(); }
7.コネクタ-ネットワークを直接処理します。 ProtocolConnectorとアドレス(クライアントの場合)またはソケット(受け入れの場合)を受信します(サーバーの場合)。
ProtocolConnector(以降PCと呼びます)の初期化をリセットします。 canSend()がリンク(FtnTosser.getMessagesForLink(リンクリンク))のメッセージを受信し、PC.send()を実行する場合; メッセージの最後にPC.eob()があります。
PC.closed()がtrueを返した後、受信したメッセージの処理を呼び出します(FtnTosser.tossIncoming(PC.getReceived());
おわりに
あなたがこの場所を読んでいるなら、あなたは何か現代のファイドに興味があります。
まだ活発なネットワークではありますが、これに参加してみてください。
おそらくあなたはそこにあなた自身にとって興味深い何かを見つけるでしょう。
アクセスは私からも得られることを思い出させてください 。