Node.js服务器进行 unity聊天
来源:互联网 发布:无网络上不了网的图片 编辑:程序博客网 时间:2024/06/15 13:15
25016.6.9 孙广东 node.js 的之前的文章
Node.js服务器进行 Unity Multiplayer游戏开发
http://blog.csdn.net/u010019717/article/details/51312196
服务器端 使用socket.io 的github上的例子。
界面很简单 先输入用户名然后 跳转到聊天界面
ChatServer.js
/** * Created by asgardgame on 2016/6/1 0001. */// require()异步加载socket.io, 然后执行回调函数构造一个IOvar io = require('socket.io')(process.env.PORT || 3000);// 输出一个Logconsole.log('server started');// Chatroomvar numUsers = 0;// 请求链接的 系统事件io.on('connection', function (socket) { console.log('客户端被连接'); var addedUser = false; // 监听'new message' 客户端的 发聊天的请求 并执行 socket.on('new message', function (data, callBack) { callBack(); // 清空输入框 console.log('分发消息 所有人'); // 通知包括自己在内 io.emit('new message', { username: socket.username, message: data.message }); }); // 客户端的测试 socket.on('open', function () { sociket.emit() }); // 监听 'add user',客户端的起完名字加入聊天的请求 并执行 socket.on('add user', function (data, callBack) { if (addedUser) return;callBack(); // 执行回调, 客户端执行界面跳转 // 存储用户名到这个socket对象上(关联) socket.username = data.username; ++numUsers; addedUser = true; socket.emit('login', { numUsers: numUsers }); // 通知除自己以外的其他客户端 有新用户加入聊天 socket.broadcast.emit('user joined', { username: socket.username, numUsers: numUsers }); }); // 断开链接的 系统事件 socket.on('disconnect', function () { if (addedUser) { --numUsers; // 通知除自己以外的 其他所有人 客户端离开了 socket.broadcast.emit('user left', { username: socket.username, numUsers: numUsers }); } });});// 1 客户端首先建立链接// 2 客户端起名字, 并发送 add user, 得到响应后跳转界面// 3 客户端可以在新界面 发送 new message , 群发处理// 4 客户端离开的显示// 注意: a 用户的加入、离开 只是要让除自己以外的 其他人知道。 login消息 只是a自己知道而已// 需要说明一下 new massage ,a 发送后需要通知除了自己以外的其他所有人。 后,两种都可以// 1)自己发消息, 然后直接显示到上方(不好,因为可能没有发送成功)// 2) 自己发送 消息中添加回调,回调中添加自己的显示(这样要求 服务器 调用 callback())// 2) 自己跟其他人 一样 等待服务器端的 new massage 消息 (这样要求 服务器使用 io.broadcast.emit('new message',.... )
using UnityEngine;using System.Collections;using SocketIO;using UnityEngine.UI;public class NetManager : MonoBehaviour{ // 视图UI相关 public GameObject AddRemoveTipPrefab, ChatContentPrefab, GiveANamePanel, ChatPanel; public Button NameingEnterButton, ChatSendButton; public InputField NameingInput, ChatInput; public Transform parent; ///////////////////// static SocketIOComponent socket; void Awake() { GiveANamePanel.SetActive(true); ChatPanel.SetActive(false); } void Start() { socket = GetComponent<SocketIOComponent>(); // On 是 消息\事件监听 socket.On("open", OnConnected); // 我要验证自己 链接状态 socket.On("login", OnLogin); // 登陆 socket.On("new message", OnNewMessage); // 新消息 socket.On("user joined", OnUserJoined); // 用户加入 socket.On("user left", OnUserLeft); // 用户离开 NameingEnterButton.onClick.AddListener(NameingEnterButtonClick); ChatSendButton.onClick.AddListener(ChatSendButtonClick); } private void NameingEnterButtonClick() { if (NameingInput.text.Trim().Length == 0) { Debug.Log("名字不能为空"); return; } // 请求发送消息 和 回调响应, 参数 username // username: username, var jobj = JSONObject.Create(); jobj.AddField("username", NameingInput.text); socket.Emit("add user", jobj, (jObj) => // 注意 需要服务器调用这个 回调参数 { GiveANamePanel.SetActive(false); ChatPanel.SetActive(true); }); } private void ChatSendButtonClick() { if (ChatInput.text.Trim().Length == 0) { Debug.Log("聊天内容不能为空"); return; } // 请求发送消息 和 回调响应 参数 内容 var jobj = JSONObject.Create(); jobj.AddField("message", ChatInput.text); socket.Emit("new message", jobj, (data) => { ChatInput.text = ""; // 发送完要清空 输入框 }); } // open 响应 void OnConnected(SocketIOEvent e) { Debug.Log("connected"); } void OnLogin(SocketIOEvent e) { var message = "Welcome to Socket.IO Chat – "; // 解析成 numUsers: numUsers // 当前的用户数量 Debug.Log(message); TipsMessage(message); UpdataParticipantNumMessage(e.data); } void OnNewMessage(SocketIOEvent e) { Debug.Log(e.data); /* 解析成 : username: socket.username, message: data */ AddChatMessage(e.data); } void OnUserJoined(SocketIOEvent e) { Debug.Log(e.data.str + " joined"); /* 解析成 : username: socket.username, numUsers: numUsers */ TipsMessage(string.Format("{0} joined", e.data["username"].str)); UpdataParticipantNumMessage(e.data); } void OnUserLeft(SocketIOEvent e) { Debug.Log(e.data.str + " left"); /* 解析成 : username: socket.username, numUsers: numUsers */ TipsMessage(string.Format("{0} left", e.data["username"].str)); UpdataParticipantNumMessage(e.data); } /// <summary> /// 显示当前剩余人数 /// 对话框中间的 提示 显示 /// </summary> /// <param name="data"></param> void UpdataParticipantNumMessage(JSONObject data) { var message = ""; var mumbers = int.Parse(data["numUsers"].str); if (mumbers == 1) { message += "只有一个参与者"; } else { message += "有 " + mumbers + " 个参与者"; } //var obj = Instantiate(AddRemoveTipPrefab); //obj.transform.SetParent(parent, false); //obj.GetComponent<Text>().text = message; //Debug.Log(message); TipsMessage(message); } /// <summary> /// 提示 加入、离开的 人等等吧 /// 对话框中间的 提示 显示 /// </summary> /// <param name="data"></param> void TipsMessage(string tip) { var obj = Instantiate(AddRemoveTipPrefab); obj.transform.SetParent(parent, false); obj.GetComponent<Text>().text = tip; Debug.Log(tip); } // 对话框 左侧显示的 void AddChatMessage(JSONObject data) { var message = string.Format("<color=blue><size=30>{0} :</size></color>\n{1}", data["username"].str, data["message"].str); var obj = Instantiate(ChatContentPrefab); obj.transform.SetParent(parent, false); obj.GetComponent<Text>().text = message; }}
0 0
- Node.js服务器进行 unity聊天
- Node.js服务器进行 Unity Multiplayer游戏开发
- 基于Node.js搭建TCP聊天服务器
- 深入浅出Node.js游戏服务器开发--分布式聊天服务器搭建
- 深入浅出Node.js游戏服务器开发--分布式聊天服务器搭建
- 深入浅出Node.js游戏服务器开发--分布式聊天服务器搭建
- WebSocket+node.js创建即时通信的Web聊天服务器
- html5websocket+node.js在线聊天
- 深入浅出Node.js游戏服务器开发--分布式聊天服务器搭建2
- (pomelo系列入门教程)深入浅出Node.js游戏服务器开发--分布式聊天服务器搭建
- node.js实战学习笔记01--异步开发简单的聊天服务器
- node初探(1)--创建聊天服务器
- Node.js HTTP服务器
- Node.js搭建服务器
- Node.js服务器
- node.js搭建服务器
- Node.js创建服务器
- node.js搭建服务器
- 【bzoj3123】【sdoi2013】【森林】【启发式合并+主席树】
- Android之GLES2.0显示图片测试代码
- MFC中启动EXE
- php数据类型转换
- Centos下安装GitLab
- Node.js服务器进行 unity聊天
- LaTeX输入单个点、横向多个点、竖向多个点、斜向多个点
- L1-020. 帅到没朋友
- 安装apacheZeppelin
- 必须了解的RAID知识
- leetcode 5. Longest Palindromic Substring
- sql 简单约束
- sql 排序
- table if not exists