web_socket_chat_server 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHAT_CLIENT_EXAMPLE/chatapp.html +58 -0
- data/CHAT_CLIENT_EXAMPLE/css/style.css +41 -0
- data/CHAT_CLIENT_EXAMPLE/js/script.js +143 -0
- data/README.md +4 -0
- data/lib/web_socket_chat_server/version.rb +1 -1
- data/web_socket_chat_server.gemspec +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 59e8e56c2b0f2b5b3562909b1d5a52c4dcf93f14
|
4
|
+
data.tar.gz: 533733dbc57ffd91c685b43a129ac82eb3ddbe0b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8eb29dd2561bd88efa27fae20c8a3fea5b549be21d212125e26b9242ad9a9f250972a1f39c0ec1a2025ed2280a09b3f5cf19ee0e690f09c0ad06fa825e5c1721
|
7
|
+
data.tar.gz: e7e29c0a64056d62c124d3fdd1bfd79c5c5219d3fe313d2dac51d87c026d7c349907e86d9d7bf696cf54fbda867c6f4d85b408dca7306414b2fe87d7e3794f02
|
@@ -0,0 +1,58 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Chatapp example</title>
|
5
|
+
<link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/css/bootstrap.min.css">
|
6
|
+
<link rel="stylesheet" type="text/css" href="css/style.css">
|
7
|
+
</head>
|
8
|
+
<body>
|
9
|
+
|
10
|
+
<div id="main-container" class="container">
|
11
|
+
<div class="row">
|
12
|
+
<div id="login-div" class="col-sm-12 text-center">
|
13
|
+
<p class="lead">This is an example of a working Chat application based on WebSocketChatServer</p>
|
14
|
+
<p>Please enter your credentials to start testing it.</p>
|
15
|
+
<form id="login-form" class="form-inline">
|
16
|
+
<div class="form-group">
|
17
|
+
<label for="username">Name</label>
|
18
|
+
<input type="text" class="form-control" id="username" placeholder="username">
|
19
|
+
</div>
|
20
|
+
<div class="form-group">
|
21
|
+
<label for="password">Email</label>
|
22
|
+
<input type="password" class="form-control" id="password" placeholder="********">
|
23
|
+
</div>
|
24
|
+
<button type="submit" class="btn btn-primary">Login</button>
|
25
|
+
</form>
|
26
|
+
</div>
|
27
|
+
|
28
|
+
|
29
|
+
<div id="chat-components" class="col-sm-12">
|
30
|
+
|
31
|
+
<div class="row">
|
32
|
+
<div id="chat-log-wrapper" class="col-sm-10 lead">
|
33
|
+
<div id="chat-log">
|
34
|
+
|
35
|
+
</div>
|
36
|
+
</div>
|
37
|
+
|
38
|
+
<div id ="users-list" class="col-sm-2 text-right">
|
39
|
+
|
40
|
+
</div>
|
41
|
+
</div>
|
42
|
+
|
43
|
+
<div class="row">
|
44
|
+
<div id="chat-text-wrapper" class="col-sm-12">
|
45
|
+
<input type="text" class="form-control" id="chat-text" placeholder="Type to chat...">
|
46
|
+
</div>
|
47
|
+
</div>
|
48
|
+
|
49
|
+
</div>
|
50
|
+
|
51
|
+
|
52
|
+
</div>
|
53
|
+
</div>
|
54
|
+
|
55
|
+
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0-alpha1/jquery.min.js" type="text/javascript"></script>
|
56
|
+
<script src="js/script.js" type="text/javascript"></script>
|
57
|
+
</body>
|
58
|
+
</html>
|
@@ -0,0 +1,41 @@
|
|
1
|
+
html, body{
|
2
|
+
height: 100%;
|
3
|
+
padding-top: 30px;
|
4
|
+
overflow: hidden;
|
5
|
+
}
|
6
|
+
|
7
|
+
#chat-log-wrapper {
|
8
|
+
background-color: #DCDFEE;
|
9
|
+
overflow: scroll;
|
10
|
+
height: 400px;
|
11
|
+
}
|
12
|
+
#chat-log{
|
13
|
+
height: 100%;
|
14
|
+
overflow: auto;
|
15
|
+
}
|
16
|
+
|
17
|
+
#users-list{
|
18
|
+
background-color: #BBDFEE;
|
19
|
+
height: 400px;
|
20
|
+
font-weight: bold;
|
21
|
+
}
|
22
|
+
|
23
|
+
#chat-components {
|
24
|
+
margin-top: 20px;
|
25
|
+
}
|
26
|
+
|
27
|
+
#login-div{
|
28
|
+
margin-top: 200px;
|
29
|
+
}
|
30
|
+
|
31
|
+
#chat-log{
|
32
|
+
overflow: scroll;
|
33
|
+
}
|
34
|
+
|
35
|
+
#users-list {
|
36
|
+
overflow: scroll;
|
37
|
+
}
|
38
|
+
|
39
|
+
#chat-text-wrapper{
|
40
|
+
padding: 0px;
|
41
|
+
}
|
@@ -0,0 +1,143 @@
|
|
1
|
+
$(function(){
|
2
|
+
var ws = null;
|
3
|
+
showLoginForm();
|
4
|
+
hideChatComponents();
|
5
|
+
$("#login-form").on("submit", function(e){
|
6
|
+
e.preventDefault();
|
7
|
+
|
8
|
+
var username = $("#username").val();
|
9
|
+
var password = $("#password").val();
|
10
|
+
|
11
|
+
if(/^[a-zA-Z0-9]{3,}/i.test(username) === false){
|
12
|
+
alert("The username must be at least 3 alphnumeric characters.");
|
13
|
+
return;
|
14
|
+
}
|
15
|
+
|
16
|
+
if(/^[a-zA-Z0-9]{6,}/i.test(password) === false){
|
17
|
+
alert("The password must be at least 3 alphnumeric characters.");
|
18
|
+
return;
|
19
|
+
}
|
20
|
+
|
21
|
+
startChatting(username, password);
|
22
|
+
});
|
23
|
+
|
24
|
+
|
25
|
+
});
|
26
|
+
|
27
|
+
|
28
|
+
function startChatting(username, password){
|
29
|
+
|
30
|
+
var Socket = "MozWebSocket" in window ? MozWebSocket : WebSocket;
|
31
|
+
var socket = new Socket("ws://localhost:8080?username=" + username + "&password=" + password );
|
32
|
+
|
33
|
+
socket.onmessage = function(event)
|
34
|
+
{
|
35
|
+
|
36
|
+
var data = JSON.parse(event.data);
|
37
|
+
switch(data.command){
|
38
|
+
case "failed_connection":
|
39
|
+
alert(data.information);
|
40
|
+
location.reload();
|
41
|
+
break;
|
42
|
+
|
43
|
+
case "successful_connection":
|
44
|
+
if(data.data !== null){
|
45
|
+
for(i = 0; i < data.data.length; i++){
|
46
|
+
$("#users-list").append("<span class='label label-primary' id="+data.data[i]+">"+ data.data[i]+"<br></span>");
|
47
|
+
}
|
48
|
+
}
|
49
|
+
break;
|
50
|
+
|
51
|
+
case "new_connection":
|
52
|
+
$("#users-list").append("<span class='label label-primary' id="+data.data+">"+data.data+"<br></span>");
|
53
|
+
break;
|
54
|
+
|
55
|
+
case "user_disconnected":
|
56
|
+
displayChatText("<span class='label label-info'>" + data.data + " has disconnected</span><br>");
|
57
|
+
$('#'+data.data).remove();
|
58
|
+
break;
|
59
|
+
|
60
|
+
case "private_message":
|
61
|
+
displayChatText("<span class='label label-primary'>Private message from " + data.data.from_user + "</span>: " + data.data.message + "<br>");
|
62
|
+
break;
|
63
|
+
|
64
|
+
case "chat_message":
|
65
|
+
displayChatText("<span class='label label-primary'>" + data.data.from_user + "</span>: " + data.data.message + "<br>");
|
66
|
+
break;
|
67
|
+
|
68
|
+
case "ban_user":
|
69
|
+
displayChatText("<span class='label label-info'>" + data.information + "<br>");
|
70
|
+
break;
|
71
|
+
|
72
|
+
case "system_information":
|
73
|
+
displayChatText("<span class='label label-danger'>" + data.data.data + "<br>");
|
74
|
+
break;
|
75
|
+
|
76
|
+
default:
|
77
|
+
break;
|
78
|
+
}
|
79
|
+
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
};
|
84
|
+
socket.onclose = function(event) {
|
85
|
+
location.reload();
|
86
|
+
};
|
87
|
+
socket.onopen = function() {
|
88
|
+
hideLoginForm();
|
89
|
+
showChatComponents();
|
90
|
+
|
91
|
+
$(document).on("keyup", "#chat-text", function(event){
|
92
|
+
if(event.keyCode == 13){
|
93
|
+
var message = $("#chat-text").val();
|
94
|
+
if(message === "") return;
|
95
|
+
$("#chat-text").val("");
|
96
|
+
|
97
|
+
var words = message.split(" ");
|
98
|
+
if((words.length > 1) && (words[0] === "ban_user")){
|
99
|
+
socket.send(JSON.stringify({command: "ban_user", data: words[1]}));
|
100
|
+
return;
|
101
|
+
}
|
102
|
+
|
103
|
+
if((words.length > 2) && (words[0] === "private_message")){
|
104
|
+
var str = "";
|
105
|
+
for(i = 2; i < words.length; i++){
|
106
|
+
str = str + words[i] + " ";
|
107
|
+
}
|
108
|
+
socket.send(JSON.stringify({command: "private_message", data: {to_user: words[1], message: str}}));
|
109
|
+
return;
|
110
|
+
}
|
111
|
+
sendChatMessage(socket, message);
|
112
|
+
}
|
113
|
+
});
|
114
|
+
displayChatText("<h5><span class='alert-success'>Connected. to send a private message type (private_message USERNAME MESSAGE). To ban a user when you are logged in as admin, type (ban_user USERNAME)</span><br></h5>");
|
115
|
+
};
|
116
|
+
}
|
117
|
+
|
118
|
+
|
119
|
+
function sendChatMessage(socket, message){
|
120
|
+
socket.send(JSON.stringify({command: "chat_message", data: message}));
|
121
|
+
}
|
122
|
+
|
123
|
+
function hideChatComponents(){
|
124
|
+
$("#chat-components").hide();
|
125
|
+
}
|
126
|
+
|
127
|
+
function showChatComponents(){
|
128
|
+
$("#chat-components").show();
|
129
|
+
$("#chat-text").focus();
|
130
|
+
}
|
131
|
+
|
132
|
+
function hideLoginForm(){
|
133
|
+
$("#login-div").hide();
|
134
|
+
}
|
135
|
+
|
136
|
+
function showLoginForm(){
|
137
|
+
$("#login-div").show();
|
138
|
+
}
|
139
|
+
|
140
|
+
function displayChatText(text){
|
141
|
+
$("#chat-log").append(text);
|
142
|
+
$("#chat-log").animate({ scrollTop: $("#chat-log")[0].scrollHeight}, 1000);
|
143
|
+
}
|
data/README.md
CHANGED
@@ -16,8 +16,12 @@ $ bundle
|
|
16
16
|
|
17
17
|
Or install it yourself as:
|
18
18
|
|
19
|
+
```
|
19
20
|
$ gem install web_socket_chat_server
|
21
|
+
```
|
20
22
|
|
23
|
+
## Documentation
|
24
|
+
For better understanding, check the docs at http://abulewis.com/ws/doc/WebSocketChatServer/ChatServer.html
|
21
25
|
## Usage
|
22
26
|
|
23
27
|
An example on how to run the server:
|
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ["jonemob@gmail.com"]
|
11
11
|
spec.summary = %q{A wrapper class for em-websocket (https://github.com/igrigorik/em-websocket) implementing a custom chat server protocol.}
|
12
12
|
spec.description = %q{For more details, please read the documentation at http://abulewis.com/doc/WebSocketChatServer.html}
|
13
|
-
spec.homepage = ""
|
13
|
+
spec.homepage = "https://github.com/phenomen2277/web_socket_chat_server"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0")
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: web_socket_chat_server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jone Samra
|
@@ -60,6 +60,9 @@ extensions: []
|
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
62
|
- ".gitignore"
|
63
|
+
- CHAT_CLIENT_EXAMPLE/chatapp.html
|
64
|
+
- CHAT_CLIENT_EXAMPLE/css/style.css
|
65
|
+
- CHAT_CLIENT_EXAMPLE/js/script.js
|
63
66
|
- Gemfile
|
64
67
|
- LICENSE.txt
|
65
68
|
- README.md
|
@@ -67,7 +70,7 @@ files:
|
|
67
70
|
- lib/web_socket_chat_server.rb
|
68
71
|
- lib/web_socket_chat_server/version.rb
|
69
72
|
- web_socket_chat_server.gemspec
|
70
|
-
homepage:
|
73
|
+
homepage: https://github.com/phenomen2277/web_socket_chat_server
|
71
74
|
licenses:
|
72
75
|
- MIT
|
73
76
|
metadata: {}
|