// 模板引擎app.set("views", path.join(__dirname, "/views/"));app.set("view engine", "ejs");// 静态服务app.use(express.static(path.join(__dirname, "/public/")));app.use("/upload", express.static(path.join(__dirname, "/upload/")));
var http = require('http').Server(app);
var io = require('socket.io')(http);
io.on('connection', function (socket) {
console.log('one client connected');
// 连接成功,自己给自己发个空的信息,回调下
socket.emit('connection', null);
// path
socket.on('path', function (msg) {
socket.broadcast.emit('path', msg);
});
// img
socket.on('img', function (msg) {
socket.broadcast.emit('img', msg);
});
// text
socket.on('text', function (msg) {
// 给出自己外的其他所有的 socket 广播
socket.broadcast.emit('text', msg);
// 给所有的 socket 的广播,包括自己
// io.emit('text', msg);
});
});
// canvas 绘图// 拿到 canvas htmlElement// var canvas = document.getElementById("canvas");var canvas = $("#canvas").get(0);// 创建上下文 var ctx = canvas.getContext("2d");var colorArray = ["black", "red", "blue", "green"];// 鼠标画图canvas.onmousedown = function (e) { // 开始画 ctx.beginPath(); // ctx 属性设置 ctx.lineWidth = 3; ctx.lineCap = "round"; ctx.lineJoin = "round"; let randomNum = parseInt(Math.random() * colorArray.length); var mycolor = colorArray[randomNum]; ctx.strokeStyle = mycolor; // tmp 为装所有坐标点的数组 var tmp = ; var e = e || window.event; // 第一个坐标点 var point = { x: e.clientX - canvas.offsetLeft, y: e.clientY - canvas.offsetTop } ctx.moveTo(point.x, point.y); tmp.push(point); document.onmousemove = function (e) { var e = e || window.event; var point = { x: e.clientX - canvas.offsetLeft, y: e.clientY - canvas.offsetTop } ctx.lineTo(point.x, point.y); tmp.push(point); ctx.stroke(); }; document.onmouseup = function () { document.onmousemove = null; document.onmouseup = null; // socket 发送path var pathDataDict = { path: tmp, width: 3, color: randomNum, screenW: 400 } socket.emit("path", pathDataDict); };};
$("#selImg").click(function () {
// form 提交
$("#form").ajaxSubmit({
url: "http://127.0.0.1:5000",
type: "post",
dataType: 'json',
success: function (data) {
if (data.status == -1) {
alert("请选择图片发送!");
return;
}
if (data.status == 1) {
alert("图片上传失败!");
return;
}
// html Dom Element
let image = new Image();
image.src = "http://127.0.0.1:5000/upload/" + data.status;
image.onload = function () {
ctx.drawImage(image, 0, 0, 400, 400);
var base64Url = canvas.toDataURL("image/png");
let base64 = base64Url.toString()
console.log(base64.substring(22));
socket.emit("img", base64.substring(22));
};
},
error: function (data) {
}
});
});
[b][self.clientSocket emit:@"text" with:@[self.chatTextField.text]];[/b],但在前端接收的数据就直接是 iOS 端数组里的对象,不用取数组第一个,但反过来,在 iOS 端就需要去数组里的第一个了,这里简单说下图片的接收吧,由于对 canvas 不熟,只能采取先创建一个临时的 img 标签展示 base64Url 的图片,然后在 canvas 接收 img 这个 HTMLElement,画出图片,最后删掉这个临时的 img 标签,如果有更好的方法可以留言
socket.on("img", function (msg) {[/*]
console.log("img");
// base64 可以直接用<img>展示出来 ,获取 img 标签对象,可画出来
$(".caozuo").append("<img id='tmpImg' width='0' height='0' src='data:image/png;base64," + msg + "'></img>");
ctx.drawImage($("#tmpImg").get(0), 0, 0, 400, 400);
$("#tmpImg").remove();
});
import "项目名称-swift.h"就行,不需要桥接文件什么的,但在 xcode8 下,貌似感觉还是需要桥接文件。具体做法如下[list][*]然后把剩余的 socket.io-client-swift 框架 Source 文件夹里的剩余文件全部拖进 oc 工程
import "项目名称-swift.h"
本文为 @ 21CTO 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。