プロジェクト
C#プロジェクト名 | CS_Scoket | Windows用管理者アプリケーション |
サーバー側 | server.js | socket通信管理用サーバー |
クライアント側 | client.js | クライアント側制御アプリケーション |
サーバー構成ファイルの概要
anonymous-chat/
│ └server.js
├─public/
│ ├─images/
│ │ └.jpeg
│ ├─js/
│ └─css/
├─views/
└index.ejs
接続処理
ブロック図
接続確認処理
client.js
接続確認情報の送信
socket.on('connect', function() {
var date = new Date();
var rtn_str = getStringFromDate(date);
// 接続
var simpleData = {
fromAddress: myid,
toAddress: serverID,
event:"",
message:"Conect Anonymous client",
timeStamp: rtn_str
};
var messages_ = [];
socket.emit('client_to_server_conect', JSON.stringify(messages_));
});
接続許可受信処理
socket.on('admin_to_client_enable', function (message) {
//ここに接続時の処理を記述
});
接続不許可受信処理
socket.on('admin_to_client_disable', function (message) {
//ここに接続不許可時の処理を記述
});
server.js
socket.on('client_to_server_conect', function (receive_message) {
var getJsonData = JSON.parse(receive_message);
AddSocketID(getJsonData[0].fromAddress, socket.id);
var simpleData = {
fromAddress: getJsonData[0].fromAddress,
toAddress:getJsonData[0].toAddress,
event:"",
message:"ID="+getJsonData[0].fromAddress+"さんの接続を許可しますか?",
timeStamp: getDateTime()
};
var adminID_=FindSocketID(adminID);
messages_ = [];
messages_.push(simpleData);
if(adminID_!=null)
{
io.to(adminID_).emit('server_to_admin_conect', JSON.stringify(messages_));
}
})
2行目 | JSON.parse() メソッドは文字列を JSON として解析し、文字列によって記述されている JavaScript の値やオブジェクトを構築します。 |
3行目 | 接続要求を送信したユーザーのsocked.idを保存します。 |
5行目 | 送信情報を定義します。 |
12行目 | room管理者のsocke.idを検索します。 |
17行目 | 特定のユーザーのみ(socket.idで送信元のみに送信) |
C#
this.socket.On("server_to_admin_conect", (jo) =>
{
if (jo != null)
{
var booksByJson = JsonConvert.DeserializeObject<List<NewMessage>>(jo.ToString());
this.RecvNewMessage(booksByJson[0]);
//自動認証
var message = new NewMessage()
{
FromAddress = booksByJson[0].ToAddress+ "admin",
ToAddress = booksByJson[0].FromAddress,
TimeStamp = DateTime.Now.ToString(),
Event = "",
Message = booksByJson[0].FromAddress + "さんに入室依頼を送りました。"
};
var src = new List<NewMessage> { message };
string jsonString = JsonConvert.SerializeObject(src);
this.socket.Emit("admin_to_client_enable", jsonString);
}
});
入室処理
ブロック図
client.js
var simpleData = {
fromAddress: myid,
toAddress: serverID,
event:"",
message:roomid,
timeStamp: rtn_str
};
var messages_ = []; //メッmessages_.push(simpleData);
socket.emit('client_to_server_join', JSON.stringify(messages_));
messages_.length = 0;
simpleData = {fromAddress: myid,toAddress: serverID,event:"",message:"",timeStamp: rtn_str };
messages_.push(simpleData);
socket.emit('client_to_server_getall', JSON.stringify(messages_));
messages_.length = 0;
simpleData = {fromAddress: myid,toAddress: serverID,event:"",message:myid+"さんが入室しました。",timeStamp: rtn_str };
messages_.push(simpleData);
socket.emit('client_to_server_broadcast', JSON.stringify(messages_));
server.js
socket.on('client_to_server_join', function (receive_message) {
var getJsonData = JSON.parse(receive_message);
room=getJsonData[0].message;
socket.join(room);
}
socket.on('client_to_server_getall', function (receive_message) {
Chats.find()
.then((messages) => {
io.to(socket.id).emit('server_to_client', JSON.stringify(messages))
})
.catch((err) => {
//エラー処理
})
})
socket.on('client_to_server_broadcast', function (receive_message) {
var getJsonData = JSON.parse(receive_message);
socket.broadcast.to(room).emit('server_to_client', receive_message);
Chats.create(getJsonData[0]);
})
c#
this.socket.On("server_to_client", (jo) =>
{
if (jo != null)
{
var list = JsonConvert.DeserializeObject<List<NewMessage>>(jo.ToString());
foreach (var booksByJson in list)
{
this.RecvNewMessage(booksByJson);
}
}
});
動作画面
ユーザー側(ブラウザ表示画面)
管理者側(windows C# アプリケーション)
参考サイト
コメント