welsonjs/lib/httpserver.js
2020-12-07 12:48:37 +09:00

81 lines
2.2 KiB
JavaScript

////////////////////////////////////////////////////////////////////////
// HTTPServer API
///////////////////////////////////////////////////////////////////////
var HTTPServer = {
_this: this, // Avoid conflicts between HTTPServer and Winsock variables
StatusCodes: {
100: "Continue",
200: "OK",
206: "Partial Content",
301: "Moved Permanently",
302: "Found",
304: "Not Modified",
400: "Bad Request",
401: "Unauthorized",
403: "Forbidden",
404: "Not Found",
500: "Internal Server Error",
503: "Service Unavailable"
},
Listener: null,
Connections: {},
CreateWinsockObject: function() {
return CreateObject([
"MSWinsock.Winsock.1",
"MSWinsock.Winsock"
], "listener_");
},
Bind: function(port) {
try {
_this.Listener = _this.CreateWinsockObject();
_this.Listener.localPort = port;
_this.Listener.bind();
_this.Listener.listen();
console.info("Listening port: " + port);
} catch (e) {
console.error("port ", port, " could not bind: ", e.message);
}
},
OnRequest: function(request, response) {
console.log("HTTPServer.OnRequest() dose not implemented");
},
CreateServer: function(OnRequest) {
if (typeof OnRequest !== "function") {
throw new TypeError("OnRequest() must be a function.");
}
_this.OnRequest = OnRequest;
return HTTPServer;
},
ConnectionRequest: function(requestID) {
console.info("Connection request " + requestID);
_this.Connections[requestID] = {
Listener: _this.CreateWinsockObject()
};
_this.Connections[requestID].Listener.accept(requestID);
},
DataArrival: function(length) {
// TODO: DataArrival
},
SendComplete: function() {
// TODO: SendComplete
}
};
global.listener_ConnectionRequest = HTTPServer.ConnectionRequest;
global.listener_DataArrival = HTTPServer.DataArrival;
global.listener_SendComplete = HTTPServer.SendComplete;
exports = HTTPServer;