Over almost exactly the past seven days, I have been working on globalCALCnet (heretofore gCn for the sake of simplicity), a longstanding project of mine to connect CALCnet2.2 networks and their constituent calculators over the internet. It can work as simply as connecting two individual calculators as if they were right next to each other, or at the opposite extreme link together many networks, each consisting of many calculators, into a single virtual hub. As you might imagine, such a system is quite complex, and once I finish working out glitches and kinks, I will probably write a Cemetech whitepaper to detail the system. Here's the executive summary of the different pieces:
CALCnet2.2 network: One or more calculators linked together with a Cn2.2 network, requiring only the calculators and a handful of unit-to-unit cables.
AVR-based microcontroller board with FTDI: For the prototypes I've made, I'm using the widely-popular Arduino Duemilanove board, offering a 16MHz AVR with 32KB of EEPROM and 2KB of SRAM. This board pretends to be a calculator participating in the network, but passing incoming frames up to a connected PC via serial/USB, and injects frames into the network from the PC.
C++ gcnclient application: The gcnclient application connects both to the local Arduino and to a remove gCn virtual hub aggregator. The gcnclient is responsible for moving 1-to-1 and broadcast frames from the Arduino to the remote server and vice versa.
Python gcnhub server daemon: The gcnhub, or virtual hub aggregator, acts as one or more virtual hubs linking together groups of remote gcnclient applications. There is currently a single gcnhub server, but if gCn becomes more popular, it would be easy to distribute this program so that users could set up their own servers.
Frames (the CALCnet equivalent of packets) travel from one CALCnet2.2 network, through the connected Arduino, to the gcnclient and through the internet to a gcnhub, which routes the packet as necessary to another gcnclient, which hands off the frame to its Arduino and therefore its connected CALCnet2.2 network. I have successfully demonstrated Flourish running between a pair of single-calculator CALCnet2.2 networks, connected by a 12-mile round-trip over the internet but acting as if they were directly connected; my testbed can be seen below.
Please post all kinds of questions, suggestions, comments, and insults in the attached topic. I would especially appreciate users who have an Arduino to spare who would like to help me test globalCALCnet. Cheers!