mirror of
https://github.com/wbbaddons/Tims-Chat.git
synced 2024-12-22 21:40:08 +00:00
Use new nodePush package
This commit is contained in:
parent
bd649d50a6
commit
037e35ba0d
@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env php
|
#!/usr/bin/env php
|
||||||
<?php
|
<?php
|
||||||
namespace be\bastelstu\wcf\chat;
|
namespace be\bastelstu\chat;
|
||||||
/**
|
/**
|
||||||
* Builds the Chat
|
* Builds the Chat
|
||||||
*
|
*
|
||||||
@ -37,12 +37,12 @@
|
|||||||
EOT;
|
EOT;
|
||||||
foreach (glob('file/js/*.{litcoffee,coffee}', GLOB_BRACE) as $coffeeFile) {
|
foreach (glob('file/js/*.{litcoffee,coffee}', GLOB_BRACE) as $coffeeFile) {
|
||||||
echo $coffeeFile."\n";
|
echo $coffeeFile."\n";
|
||||||
passthru('coffee -cb '.escapeshellarg($coffeeFile), $code);
|
passthru('coffee -c '.escapeshellarg($coffeeFile), $code);
|
||||||
if ($code != 0) exit($code);
|
if ($code != 0) exit($code);
|
||||||
}
|
}
|
||||||
foreach (glob('file/acp/be.bastelstu.chat.nodePush/lib/*.{litcoffee,coffee}', GLOB_BRACE) as $coffeeFile) {
|
foreach (glob('file/acp/be.bastelstu.chat.nodePush/lib/*.{litcoffee,coffee}', GLOB_BRACE) as $coffeeFile) {
|
||||||
echo $coffeeFile."\n";
|
echo $coffeeFile."\n";
|
||||||
passthru('coffee -cb '.escapeshellarg($coffeeFile), $code);
|
passthru('coffee -c '.escapeshellarg($coffeeFile), $code);
|
||||||
if ($code != 0) exit($code);
|
if ($code != 0) exit($code);
|
||||||
}
|
}
|
||||||
echo <<<EOT
|
echo <<<EOT
|
||||||
@ -74,7 +74,7 @@
|
|||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
EOT;
|
EOT;
|
||||||
passthru('tar cvf ../file.tar * --exclude=*.coffee --exclude=*.scss --exclude=.sass-cache --exclude=node_modules', $code);
|
passthru('tar cvf ../file.tar * --exclude=*coffee --exclude=*.scss --exclude=.sass-cache --exclude=node_modules', $code);
|
||||||
if ($code != 0) exit($code);
|
if ($code != 0) exit($code);
|
||||||
echo <<<EOT
|
echo <<<EOT
|
||||||
|
|
||||||
|
@ -1 +0,0 @@
|
|||||||
node_modules
|
|
@ -1 +0,0 @@
|
|||||||
deny from all
|
|
@ -1,6 +0,0 @@
|
|||||||
node.js-Push for Tims Chat
|
|
||||||
==========================
|
|
||||||
|
|
||||||
This directory contains files for the node.js-Server that provides Push-Messages for Tims Chat.
|
|
||||||
|
|
||||||
DO NOT DELETE THIS DIRECTORY!
|
|
@ -1,18 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
cd `dirname $0`
|
|
||||||
if [ -d "bin" ]; then
|
|
||||||
cd "../"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$(id -u)" -eq 0 ]; then
|
|
||||||
echo "You may not start nodePush as root!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Installing dependencies"
|
|
||||||
/usr/bin/env npm install
|
|
||||||
|
|
||||||
cd "../lib"
|
|
||||||
|
|
||||||
/usr/bin/env node server.js
|
|
@ -1,3 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
port: 9001
|
|
||||||
}
|
|
@ -1,114 +0,0 @@
|
|||||||
nodePush Pushserver for Tims Chat
|
|
||||||
=================================
|
|
||||||
|
|
||||||
Copyright Information
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
"@author Tim Düsterhus"
|
|
||||||
"@copyright 2010-2013 Tim Düsterhus"
|
|
||||||
"@license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>"
|
|
||||||
"@package be.bastelstu.chat"
|
|
||||||
"@subpackage nodePush"
|
|
||||||
|
|
||||||
Setup
|
|
||||||
-----
|
|
||||||
|
|
||||||
Load required namespaces.
|
|
||||||
|
|
||||||
io = require 'socket.io'
|
|
||||||
net = require 'net'
|
|
||||||
fs = require 'fs'
|
|
||||||
|
|
||||||
Load config
|
|
||||||
|
|
||||||
config = require '../config.js'
|
|
||||||
|
|
||||||
Prepare environment
|
|
||||||
|
|
||||||
log = (message) ->
|
|
||||||
console.log "[be.bastelstu.chat.nodePush] #{message}"
|
|
||||||
|
|
||||||
# Ensure our namespace is present
|
|
||||||
be = be ? {}
|
|
||||||
be.bastelstu ?= {}
|
|
||||||
be.bastelstu.chat ?= {}
|
|
||||||
|
|
||||||
be.bastelstu.chat.nodePush
|
|
||||||
==========================
|
|
||||||
|
|
||||||
class be.bastelstu.chat.nodePush
|
|
||||||
|
|
||||||
Methods
|
|
||||||
-------
|
|
||||||
**constructor()**
|
|
||||||
|
|
||||||
constructor: ->
|
|
||||||
log 'Starting Pushserver for Tims Chat'
|
|
||||||
log "PID is #{process.pid}"
|
|
||||||
log "Using port: #{config.port}"
|
|
||||||
|
|
||||||
@initUnixSocket()
|
|
||||||
@initSocketIO()
|
|
||||||
|
|
||||||
Bind shutdown function to needed events.
|
|
||||||
|
|
||||||
process.on 'exit', @shutdown.bind @
|
|
||||||
process.on 'uncaughtException', @shutdown.bind @
|
|
||||||
process.on 'SIGINT', @shutdown.bind @
|
|
||||||
process.on 'SIGTERM', @shutdown.bind @
|
|
||||||
|
|
||||||
Set nice title for PS.
|
|
||||||
|
|
||||||
process.title = 'nodePush - Tims Chat'
|
|
||||||
|
|
||||||
Set newMessage event once a minute to allow for easier timeout detection in chat.
|
|
||||||
|
|
||||||
setInterval =>
|
|
||||||
@socket.sockets.emit 'newMessage'
|
|
||||||
, 60e3
|
|
||||||
|
|
||||||
**initSocketIO()**
|
|
||||||
Initialize socket server.
|
|
||||||
|
|
||||||
initSocketIO: ->
|
|
||||||
log 'Initializing socket.io'
|
|
||||||
@socket = io.listen config.port
|
|
||||||
|
|
||||||
@socket.set 'log level', 1
|
|
||||||
@socket.set 'browser client etag', true
|
|
||||||
@socket.set 'browser client minification', true
|
|
||||||
@socket.set 'browser client gzip', true
|
|
||||||
|
|
||||||
@socket.configure 'development', =>
|
|
||||||
@socket.set 'log level', 3
|
|
||||||
@socket.set 'browser client etag', false
|
|
||||||
@socket.set 'browser client minification', false
|
|
||||||
|
|
||||||
**initUnixSocket()**
|
|
||||||
Initialize PHP side unix socket.
|
|
||||||
|
|
||||||
initUnixSocket: ->
|
|
||||||
log 'Initializing Unix-Socket'
|
|
||||||
socket = net.createServer (c) =>
|
|
||||||
setTimeout =>
|
|
||||||
@socket.sockets.emit 'newMessage'
|
|
||||||
, 20
|
|
||||||
|
|
||||||
c.end()
|
|
||||||
|
|
||||||
socket.listen "#{__dirname}/../data.sock"
|
|
||||||
fs.chmod "#{__dirname}/../data.sock", '777'
|
|
||||||
|
|
||||||
**shutdown()**
|
|
||||||
Perform clean shutdown of nodePush.
|
|
||||||
|
|
||||||
shutdown: ->
|
|
||||||
return unless fs.existsSync "#{__dirname}/../data.sock"
|
|
||||||
|
|
||||||
log 'Shutting down'
|
|
||||||
fs.unlinkSync "#{__dirname}/../data.sock"
|
|
||||||
process.exit()
|
|
||||||
|
|
||||||
And finally start the service.
|
|
||||||
|
|
||||||
new be.bastelstu.chat.nodePush()
|
|
@ -1,16 +0,0 @@
|
|||||||
{
|
|
||||||
"name" : "be.bastelstu.chat.nodePush",
|
|
||||||
"description" : "node.js-Pushing for Tims Chat",
|
|
||||||
"homepage" : "https://github.com/wbbaddons/Tims-Chat",
|
|
||||||
"keywords" : ["chat"],
|
|
||||||
"author" : "Tim Düsterhus <timwolla@bastelstu.be>",
|
|
||||||
"contributors" : [
|
|
||||||
],
|
|
||||||
"dependencies" : {
|
|
||||||
"socket.io" : "0.8.7"
|
|
||||||
},
|
|
||||||
"engines" : { "node" : ">=0.6.0",
|
|
||||||
"npm" : ">=1.0"
|
|
||||||
},
|
|
||||||
"version" : "3.0.0"
|
|
||||||
}
|
|
@ -560,27 +560,27 @@ Remove all users that left the chat.
|
|||||||
Initialize socket.io to enable nodePush.
|
Initialize socket.io to enable nodePush.
|
||||||
|
|
||||||
initPush: ->
|
initPush: ->
|
||||||
if window.io?
|
be.bastelstu.wcf.nodePush.onConnect =>
|
||||||
console.log 'Initializing nodePush'
|
console.log 'Disabling periodic loading'
|
||||||
@socket = io.connect @config.socketIOPath
|
|
||||||
|
|
||||||
@socket.on 'connect', =>
|
|
||||||
console.log 'Connected to nodePush'
|
|
||||||
|
|
||||||
Disable `@pe.getMessages` once we are connected.
|
Disable `@pe.getMessages` once we are connected.
|
||||||
|
|
||||||
@pe.getMessages.stop()
|
@pe.getMessages.stop()
|
||||||
|
|
||||||
@socket.on 'disconnect', =>
|
be.bastelstu.wcf.nodePush.onDisconnect =>
|
||||||
console.log 'Lost connection to nodePush'
|
console.log 'Enabling periodic loading'
|
||||||
|
|
||||||
Reenable `@pe.getMessages` once we are disconnected.
|
Reenable `@pe.getMessages` once we are disconnected.
|
||||||
|
|
||||||
@pe.getMessages = new WCF.PeriodicalExecuter $.proxy(@getMessages, @), @config.reloadTime * 1e3
|
@pe.getMessages = new WCF.PeriodicalExecuter $.proxy(@getMessages, @), @config.reloadTime * 1e3
|
||||||
|
|
||||||
@socket.on 'newMessage', =>
|
be.bastelstu.wcf.nodePush.onMessage 'be.bastelstu.chat.newMessage', =>
|
||||||
@getMessages()
|
@getMessages()
|
||||||
|
|
||||||
|
be.bastelstu.wcf.nodePush.onMessage 'tick60', =>
|
||||||
|
@getMessages()
|
||||||
|
|
||||||
|
|
||||||
**insertText(text, options)**
|
**insertText(text, options)**
|
||||||
Inserts the given `text` into the input. If `options.append` is truthy the given `text` will be appended and replaces the existing text otherwise. If `options.submit` is truthy the message will be submitted afterwards.
|
Inserts the given `text` into the input. If `options.append` is truthy the given `text` will be appended and replaces the existing text otherwise. If `options.submit` is truthy the message will be submitted afterwards.
|
||||||
|
|
||||||
|
@ -20,13 +20,7 @@ class MessageEditor extends \wcf\data\DatabaseObjectEditor {
|
|||||||
* Notify the Push-Server.
|
* Notify the Push-Server.
|
||||||
*/
|
*/
|
||||||
public static function create(array $parameters = array()) {
|
public static function create(array $parameters = array()) {
|
||||||
try {
|
\wcf\system\nodePush\NodePushHandler::getInstance()->sendMessage('be.bastelstu.chat.newMessage');
|
||||||
if (\chat\util\ChatUtil::nodePushRunning()) {
|
|
||||||
$sock = stream_socket_client('unix://'.CHAT_DIR.'acp/be.bastelstu.chat.nodePush/data.sock', $errno, $errstr, 1);
|
|
||||||
fclose($sock);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (\Exception $e) { }
|
|
||||||
|
|
||||||
return parent::create($parameters);
|
return parent::create($parameters);
|
||||||
}
|
}
|
||||||
|
@ -167,7 +167,7 @@ public function getUsers() {
|
|||||||
* @return \wcf\data\user\UserList
|
* @return \wcf\data\user\UserList
|
||||||
*/
|
*/
|
||||||
public static function getDeadUsers() {
|
public static function getDeadUsers() {
|
||||||
if (\chat\util\ChatUtil::nodePushRunning()) {
|
if (\wcf\system\nodePush\NodePushHandler::getInstance()->isRunning()) {
|
||||||
$time = TIME_NOW - 120;
|
$time = TIME_NOW - 120;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -95,19 +95,6 @@ public static function gradient($string, $start, $end) {
|
|||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks whether nodePush is running.
|
|
||||||
*
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public static function nodePushRunning() {
|
|
||||||
if (!CHAT_SOCKET_IO_PATH) return false;
|
|
||||||
if (!file_exists(CHAT_DIR.'acp/be.bastelstu.chat.nodePush/data.sock')) return false;
|
|
||||||
if (!is_writable(CHAT_DIR.'acp/be.bastelstu.chat.nodePush/data.sock')) return false;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads user data.
|
* Reads user data.
|
||||||
*
|
*
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
<requiredpackages>
|
<requiredpackages>
|
||||||
<requiredpackage minversion="2.0.0 Alpha 1">com.woltlab.wcf</requiredpackage>
|
<requiredpackage minversion="2.0.0 Alpha 1">com.woltlab.wcf</requiredpackage>
|
||||||
<requiredpackage file="requirements/be.bastelstu.max.wcf.jCounter.tar">be.bastelstu.max.wcf.jCounter</requiredpackage>
|
<requiredpackage file="requirements/be.bastelstu.max.wcf.jCounter.tar">be.bastelstu.max.wcf.jCounter</requiredpackage>
|
||||||
|
<requiredpackage file="requirements/be.bastelstu.wcf.nodePush.tar">be.bastelstu.wcf.nodePush</requiredpackage>
|
||||||
<requiredpackage file="requirements/com.woltlab.wcf.bbcode.tar">com.woltlab.wcf.bbcode</requiredpackage>
|
<requiredpackage file="requirements/com.woltlab.wcf.bbcode.tar">com.woltlab.wcf.bbcode</requiredpackage>
|
||||||
<requiredpackage file="requirements/com.woltlab.wcf.message.tar">com.woltlab.wcf.message</requiredpackage>
|
<requiredpackage file="requirements/com.woltlab.wcf.message.tar">com.woltlab.wcf.message</requiredpackage>
|
||||||
<requiredpackage file="requirements/com.woltlab.wcf.user.tar">com.woltlab.wcf.user</requiredpackage>
|
<requiredpackage file="requirements/com.woltlab.wcf.user.tar">com.woltlab.wcf.user</requiredpackage>
|
||||||
|
@ -29,9 +29,7 @@
|
|||||||
window.chat = new be.bastelstu.Chat(
|
window.chat = new be.bastelstu.Chat(
|
||||||
{
|
{
|
||||||
reloadTime: {@CHAT_RELOADTIME},
|
reloadTime: {@CHAT_RELOADTIME},
|
||||||
unloadURL: '{link application="chat" controller="Leave"}{/link}',
|
messageURL: '{link application="chat" controller="NewMessages"}{/link}'
|
||||||
messageURL: '{link application="chat" controller="NewMessages"}{/link}',
|
|
||||||
socketIOPath: '{@CHAT_SOCKET_IO_PATH|encodeJS}'
|
|
||||||
},
|
},
|
||||||
new WCF.Template('{ldelim}$title} - {"chat.general.title"|language|encodeJS} - {PAGE_TITLE|language|encodeJS}'),
|
new WCF.Template('{ldelim}$title} - {"chat.general.title"|language|encodeJS} - {PAGE_TITLE|language|encodeJS}'),
|
||||||
new WCF.Template('{@$messageTemplate|encodeJS}'),
|
new WCF.Template('{@$messageTemplate|encodeJS}'),
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
<script type="text/javascript" src="{$__wcf->getPath('chat')}js/be.bastelstu.Chat.js?version={PACKAGE_VERSION|rawurlencode}"></script>
|
<script type="text/javascript" src="{$__wcf->getPath('chat')}js/be.bastelstu.Chat.js?version={PACKAGE_VERSION|rawurlencode}"></script>
|
||||||
{if CHAT_SOCKET_IO_PATH}<script type="text/javascript" src="{CHAT_SOCKET_IO_PATH}/socket.io/socket.io.js"></script>{/if}
|
|
||||||
<script type="text/javascript" src="{$__wcf->getPath('chat')}js/be.bastelstu.Chat.Log.js?version={PACKAGE_VERSION|rawurlencode}"></script>
|
<script type="text/javascript" src="{$__wcf->getPath('chat')}js/be.bastelstu.Chat.Log.js?version={PACKAGE_VERSION|rawurlencode}"></script>
|
||||||
{event name='javascript'}
|
{event name='javascript'}
|
Loading…
Reference in New Issue
Block a user