NEW!! :: JAVA DDIAL CLIENT! :: Connect Now!!
Apple II skin
Or the usual way - telnet thesavagefrontier.com
Project Page for Mouse's Ddial Emulator
To the last piece of civilization,
in this Savage Frontier!
Enter PW:*** *** ***
...needs to be deprecated (May 28 2009). I am currently in process of
moving all this information to its new home on thesavagefrontier.com...
Thanks to old chat logs, I have recreated The Savage Frontier, my favorite
old Philly ddial.
- 100% authentic ddial experience - a2 emulators run TASC mods version of Diversi-Dial by
Bill Basham. Multiple machines give us support for 11 users. A Java client provides 300
baud emulation and old-time Apple II / C64 fonts. (Suggest another architecture to emulate!)
- 2 Apple II+ emulators, a2 by
Rich Skrenta modified to support 7 Applecats.
The chat session (transmitted via socket) is translated byte for byte from the UNIX/Internet
side to the II's virtual modem memory addresses.
- Listener on port 23 & 9000, huntgroup, written in C, to simulate "dialing"
experience and performs the mapping of each established connection to a single virtual modem.
- A bot, Ragnarok, written in Ruby, to sit on a line as a remote, and interfaced with
the huntgroup server provides services to both sysops and users (communicating on ddial via /p)
with respect to keeping track of logged in users, offering extended ddial
functionality like lastlog, last 5 callers, when did acct xxx call last,
and even online games.
Thanks for reading. Quick background: Since 1989 I have owned a modem - a 1200
baud Datalink internal modem for my IIgs. I very quickly got hooked on talking on
a chat system called Diversi-Dial or simply 'ddial'. I knew it would come back to
haunt me some day as I now chat on the same system running under a custom emulator.
I had inherited one of the actual stations of Savage Frontier (PhillyChat, Electronic
Cafe, Silent Planet, et al) from the owner, Kozmo, many years ago and he told me to
"put it to good use". The memory must live on.. so..
..A friend and I modified an Apple II+ emulator a while back to support virtual AppleCat
modems. It uses sockets for network communication. When the socket notices a connection
it simulates a "ring", the emulator picks up the "phone" and bytes are transferred.
The Ruby DDIAL Bot Challenge
To make the system more interesting and Internet-friendly, I wanted to write a bot
that would interface both with ddial and the huntgroup software to allow for on-ddial
transmitting of IP information ("caller ID"). The bot also extends ddial
functionality in many areas - it keeps caller logs, handles email, shows who is on
across multiple stations, and provides an interface for playing games over chat.
I'm a newbie Ruby coder, with about 15 years of C under my belt and zero Object
Oriented experience. But I've been reading books (GoF DP, Booch, "Object-Oriented
Modeling and Design with UML", "Design Patterns in Ruby", etc etc) and am ready to
tackle the challenge of designing code with an OO feel.
Gentle reader, please peruse the code below. It is modelled slightly on
by Dominiek.com. (Thanks man! Beer!) It is not as complex, but _it does work!_
Follow along from genesis, where objects are initialized.
genesis.rb: Start of bot.
DeeDialServ.rb: Responsible for connecting to DDial and,
for each line the DDial sends, decoding the line and turning it into an event.
DeeDial.rb: This code uses DeeDialServ and listens for
its events. It then holds a useful state with regard to users logging in and outcurrently online users, etc.
Log.rb: tiny logger, should be replace by log4r
test-DeeDialServ.rb - unit tests, of course.
Services (ie, bots):
services/Email.rb - II+ cannot support email
(no 64k auxiliary memory like the IIe) - simulates an Apple IIe ddial server via remote /re
services/Notify.rb - Login notification (normally you only see --> Logins on your own station - this allows users to see logins across links/stations
services/Special.rb - mostly sysop and #0<T1:Ragnarok) bot code
services/WhosOn.rb - Support for the "who" command, like a multistation /s
services/WheelOfWords.rb: Ruby implementation of the classic
smash Ddial hit online game, Wheel of Words (WoW!) Sorry, I don't know who
invented it originally.
I would like to make the code more "rails" like in configuration, with an
understandable directory hierarchy and config system. Right now it's all sort of
jumbled in there.
Each service should run in its own thread, so a bug in one does not take down the other.
Any other object-oriented cleanups I can make.
Thanks for looking. The virtual Applecat code and huntgroup software will be
made available soon.