Everything you ever wanted to know about using fTelnet
fTelnet comes in both Managed and Unmanaged versions, and I can't stress enough how much I recommend using the managed version.
Why do I recommend the managed version? Because it's pretty much foolproof (no offense intended!), and doesn't require you to keep anything up to date, I do all that for you.
So if you want to stop reading now and go try the managed version instead, head on over to the Embed Wizard. Seriously, you'll be up and running in under 5 minutes. It's awesome.
I see you're still reading, so I guess you don't want to use the managed version...that sucks because I put a lot of effort into getting that up and running!
Anyway, before you 100% decide which version to run, check of these differences:
Managed | Unmanaged | |
---|---|---|
Installing | Dead simple | Lots of reading |
Customizing | Most options can be set automatically via the wizard, a few have to be set manually | All options must be set manually |
Upgrading | I keep everything up to date with the latest bugfixes and improvements | You update as necessary. And don't forget to RTFM to see what I broke between versions |
Support | I'm there for you | I'm there for you, but if it sounds like you didn't RTFM, or if you're in way over your head, my answer to your support request may be Use the Managed version! |
Here's the Embed Wizard link again, just in case you changed your mind!
The fTelnet contact page or the GitHub Issues page are the two best ways to get ahold of me.
Installing is pretty simple. If you're reading this that means you've already downloaded and extracted the archive, so just put all these files into an fTelnet directory on your webserver and you're good to go.
Using fTelnet is almost as easy as installing it was. First you need to include the correct files. Assuming you have an index.html in your document root, and fTelnet in a subdirectory called fTelnet, you can do that by putting this in your <body> section where you want the client to appear:
<div id="fTelnetContainer"></div>
<script src="ftelnet.norip.noxfer.min.js" id="fTelnetScript"></script>
<script>
var Options = new fTelnetOptions();
Options.Hostname = "bbs.ftelnet.ca";
Options.Port = 23;
var Client = new fTelnetClient('fTelnetContainer', Options);
</script>
That should now get you up and running.
Ahh, now we get to the meat of the document. You've installed fTelnet, you've got it up and running, and now you want to customize it (what, you mean you DIDN'T want it to just connect to my server?!?)
So here's a complete (at the time of this writing, hopefully I'll remember to keep it up to date in the future!) list of variables that you can customize. You should assign values to these variables right before you call fTelnet.Init(). You should be able to assign them after you call fTelnet.Init(), but some of them may cause flicker (ie font or screen size changes), so best to do it before.
Variable | Type | Default | Notes |
---|---|---|---|
AllowModernScrollback | boolean | true |
true: fTelnet will try to detect desktop vs mobile devices, and use a modern scrollable div for desktop users false: all users will use the classic scrollback |
BareLFtoCRLF | boolean | false |
true: a BARE LINE FEED (one that is not preceded by a CARRIAGE RETURN) from the server will be treated as a CARRIAGE RETURN + LINE FEED pair false: no translation of LINE FEED occurs (BARE or not) Useful for servers that break the telnet spec and send "\n" instead of "\r\n" to end a line |
BitsPerSecond | number | 57600 | Lets you emulate a given connection speed. I don't recommend you use a value higher than this as it causes problems with painting (ie entire screens get drawn at once after a small but noticeable delay, rather than a couple lines at a time) |
ConnectionType | string | telnet |
rlogin: You're going to be making an rlogin connection (see other RLogin* settings below) tcp: You're going to be making a raw tcp connection (no protocol will be used) telnet: You're going to be making a telnet connection |
Emulation | string | ansi-bbs |
ansi-bbs: The default, and probably only value you'll ever want to use RIP: Enable RIPscript mode. Still very experimental, I wouldn't use this in production |
Enter | string | \r | The character(s) that get sent when the user hits the Enter key. Most BBSes expect a CARRIAGE RETURN only, but if your server follows the telnet spec and wants both CARRIAGE RETURN + LINE FEED, then change this to \r\n |
Font | string | CP437 | The character set to use. Check the fonts subdirectory to see supported ones |
ForceWss | boolean | false |
true: Always use the secure wss:// protocol for connecting to the server false: Use the secure wss:// protocol for pages served via https://, and normal ws:// protocol for pages served via http:// If your server supports wss://, then it makes sense to change this to true |
Hostname | string | bbs.ftelnet.ca | The hostname (or ip address) of the server you want to connect to |
LocalEcho | boolean | false |
true: User input is echo'd to the screen false: User input is not echo'd to the screen Most BBSes handle echoing input back to the user, which is why the default is false |
NegotiateLocalEcho | boolean | true |
true: Your LocalEcho setting is used as the default, but you will allow the telnet server to use negotiation sequences to change this setting false: Your LocalEcho setting is used, and negotiation sequences sent by the server are ignored |
Port | number | 1123 |
If the server you are connecting to DOES SPEAK WebSocket, then you want to specify the port of the server here. I've arbitrarily chosen 1123 as the default WebSocket port in the server software I wrote because it (A) is > 1024, (B) has 23 in it, and (C) is the start of the fibonacci sequence If the server you are connecting to DOES NOT SPEAK WebSocket, then you want to specify the port of the telnet server you'll be proxied to. This is usually going to be 23 |
ProxyHostname | string | blank |
If the server you are connecting to DOES SPEAK WebSocket, leave this alone If the server you are connecting to DOES NOT SPEAK WebSocket, then you want to specify the hostname (or ip address) of the WebSocket-to-telnet proxy that you'll be connecting to |
ProxyPort | number | 1123 |
If the server you are connecting to DOES SPEAK WebSocket, leave this alone If the server you are connecting to DOES NOT SPEAK WebSocket, then you want to specify the port of the WebSocket-to-telnet proxy that you'll be connecting to |
ProxyPortSecure | number | 11235 |
If the server you are connecting to DOES SPEAK WebSocket, leave this alone If the server you are connecting to DOES NOT SPEAK WebSocket, then you want to specify the secure port of the WebSocket-to-telnet proxy that you'll be connecting to. Some server software listen for wss:// connections on a different port than ws:// connections, hence the two port numbers. If your proxy listens on the same port for both types, then you can specify the same ports for both settings. |
RLoginClientUsername | string | blank |
The string to send for the client-user-name portion of the connection establishment packet If using Synchronet's auto login feature, this should be your password |
RLoginServerUsername | string | blank |
The string to send for the server-user-name portion of the connection establishment packet If using Synchronet's auto login feature, this should be your username |
RLoginTerminalType | string | blank |
The string to send for the terminal-type/speed portion of the connection establishment packet If you leave this blank, the default of ansi-bbs/BitsPerSecond (ie ansi-bbs/57600) will be used |
ScreenColumns | number | 80 | The number of columns making up the client area |
ScreenRows | number | 25 | The number of rows making up the client area |
SendLocation | boolean | true |
true: If the telnet server sends a negotiation sequence to request the user's IP address, fTelnet will use a 3rd party service to identify the user's IPv4 address, and reply with that false: A request sent by the server will be ignored If you're using a public proxy, then all requests will look like they're originating from the proxy's IP address. With this option enabled, you'll be able to query the user's real IP address. Requires your telnet server to support the correct negotiation sequence of course |
SkipRedrawWhenSameFontSize | boolean | false |
true: When the Crt font changes, if the new font is the same size as the old font, the screen won't be redrawn. This allows you to display a screen using characters from multiple fonts. NOTE: Any events that force a redraw (selecting text, scrolling with the classic scrollback, etc) will redraw using the new font. false: When the Crt font changes, the entire screen is redrawn using the new font. |
SplashScreen | string | base64 data | A base64 encoded string containing the ANSI screen that will be displayed to the user after the client initializes |
VirtualKeyboardVibrateDuration | number | 25 | The number of milliseconds to vibrate for when a virtual keyboard key is pressed. A value of 0 will disable the vibration feature |
VirtualKeyboardVisible | boolean | true |
true: The virtual keyboard is visible false: The virtual keyboard is hidden |
WebSocketUrlPath | string | blank |
If you are using a proxy, this setting does nothing. If you are not using a proxy, this is the path to append to the WebSocket Url. For example if your hostname is bbs.ftelnet.ca and port is 80, fTelnet will connect to ws://bbs.ftelnet.ca:80. If what you really need is ws://bbs.ftelnet.ca:80/plus/some/path, then you want to set WebSocketUrlPath to '/plus/some/path'. If you're confused by this setting, don't worry, 99.9% of people won't need it and can leave it blank. |
Additionally, there is that fTelnet.css that you can customize to control the appearance of the buttons / statusbar / etc.
Internet Explorer 8 (and older) do not support the Canvas element, and while there are polyfills, none of them have support for the features fTelnet needs. So unfortunately IE8 (and older) will never be supported.
First, re-read this document
Second, consider using the managed version
And if after all that you still need more help, then see the support section above