2011-03-08 110 views
6

我寫了一個小型的node.js netServer聊天應用程序。我想要爲它創建一個ncurses用戶界面。問題是,聊天應用程序是寫在服務器端,人們通過netcat連接,所以問題是我將如何去通過它在客戶端操縱ncurses?通過服務器端腳本使用node-ncurses客戶端?

+0

你看過node-ncurses嗎?不知道它是否會通過netcat工作。 https://github.com/mscdex/node-ncurses – 2011-03-16 22:06:46

回答

1

ncurses是一個C庫,你需要鏈接到它來調用它的功能,所以我不認爲它可以用於你的用例。

我猜,由「操縱ncurses的」你是真的後有什麼改變文本的您正在編寫的用戶,並上下移動屏幕上的顏色的方法等

你也許能夠通過讓用戶通過支持ANSI顏色轉義代碼的telnet客戶端進行連接來實現您想要的一些功能。解答產生顏色代碼的模擬問題here

1

你需要的是一個作爲NodeJS模塊寫入的telnet(或ssh)服務器。

它需要了解telnet協議,它比簡單的字符流更豐富。 (例如,它發送終端(重新)大小和許多其他事件的消息)。 http://en.wikipedia.org/wiki/Telnet - 請參閱RFC。

這很令人困惑,因爲telnet客戶端通常用於連接到僅使用普通字符流的服務。

據我所知,沒有這樣的工作模塊。請糾正我,如果你找到一個。

Netcat不會發送有關終端類型,終端大小或終端事件的任何信息。這些對於一個ncurses類型的應用程序來說都是必需的。

0

您可以編寫一個net.server包裝您的服務器端節點應用程序,讓用戶telnet到服務器,將您的應用程序輸出管道連接到連接並將連接管道連接到您的應用程序。

#!/usr/bin/env node 


/** 
* widget.js is in node-ncurses's examples 
*/ 
var net = require('net'), 
    child = require('child_process'), 
    bin = child.spawn('./widget.js', ['InputBox']); 

var server = net.createServer(function(c) { 

    console.log('server connected'); 
    c.on('end', function() { 
     console.log('server disconnected'); 
    }); 

    c.pipe(bin.stdin); 
    bin.stdout.pipe(c); 

}).listen(8124, function() { 
    console.log('server bound 8124'); 
}); 

// and let users: 
// $ telnet localhost 8124