找回密码
 立即注册

扫一扫,访问微社区

查看: 30634|回复: 72

微信小程序demo:基于websocket的微信聊天室小程序

 火... [复制链接]
发表于 2017-3-23 11:33:32 | 显示全部楼层 |阅读模式




[mw_shl_code=html,true]// room.js
// var util = require('../../utils/util.js')
var WxParse = require('../../wxParse/wxParse.js');
var roomConfig = {
  wsurl: 'wss://yourdomain.com/ws',
  nickname: Math.random().toString(36).substr(2, 4),
  channel: 'wx',
}
var mynickname = roomConfig.nickname;
var online = [];
var initMsg = '<i class="msg info">☼ Welcome ~ </i>\n';
var extraMsgs = [];
var socketOpen = false;
var socketMsgQueue = [{cmd: 'join', channel: roomConfig.channel, nick: roomConfig.nickname }];
var parseHtml = function (text) {
  //html = html.replace(/<a.+?href="(.+?)".*?>(.+?)<\/a>/ig,'$2');
  text = text.replace(/(https?:\/\/[^\s]+)/g, function (link) {
    return '<a href="' + link + '">网址</a> \n';
  });
  return text;
};

Page({
  data: {
    scrollTop: 1000000000000,
    boxHeihgt: 400,
    inputValue: '',
    messages: ''
  },
  bindKeyInput: function(e) {
    this.setData({
      inputValue: e.detail.value
    })
  },
  sendBtn: function () {
    this.sendMsg(this.data.inputValue)
    this.setData({
      inputValue: ''
    });
  },
  sendMsg: function (msg) {
    wx.sendSocketMessage({
      data: JSON.stringify({cmd: 'chat', text: msg})
    });
  },
  getMsg: function(data) {

    var args = JSON.parse(data);
    //Chat
    if (args.cmd === 'chat') {
      if (args.trip == undefined) {
        args.trip = "(No trip)";
      }
      var isMe = '';
      if (args.nick == mynickname.split("#")[0]) {
        isMe = ' me';
      }
      // extraMsgs.push("\n" + "\033[F" + args.trip + " " + args.nick + ": " + args.text);
      extraMsgs.push('<div class="msg chat'+isMe+'">◦<em class="nick">'  + args.nick + ":</em> " + args.text +'</div>');
      console.log(args);
    }

    //Messages Process
    switch (args.cmd) {
      case 'warn':
        if (args.text === "Nickname taken") {
          extraMsgs.push('<div class="msg info">'+ args.text + '</div>');
          return false;
        }
        console.log("Your IP is being rate-limited or blocked.");
        break;
      case 'onlineSet':
        for (var i = 0; i < args.nicks.length; i++) {
            online.push(args.nicks);
        }
        extraMsgs.push("\n" + '<div class="msg info">当前在线('+online.length+'): ' + online + '</div>');
        break;
      case 'onlineAdd':
        online.push(args.nick);
        extraMsgs.push('<div class="msg info"><em class="nick">'+ args.nick +  '</em> 进入了大厅</div>');
        break;
      case 'onlineRemove':
        var x = online.indexOf(args.nick);
        if (x != -1) {
            online.splice(x, 1);
            extraMsgs.push('<div class="msg info"><em class="nick">'+ args.nick + '</em> 离开了大厅</div>');
        }
        break
      default:
    }

    this.setData({
      messages: initMsg + extraMsgs.join('\n')
    });

    this.setData({scrollTop:this.data.scrollTop+100});

    WxParse.wxParse('messages', 'html', parseHtml(this.data.messages), this, 5);

  },
  onLoad: function () {
    var that = this;

    wx.getSystemInfo({
      success: function(res) {
        that.setData({
          boxHeihgt: res.windowHeight-90
        })
      }
    });
    wx.connectSocket({
      url: roomConfig.wsurl
    });

    wx.onSocketOpen(function(res) {
      console.log('WebSocket连接已打开!')
      socketOpen = true
      for (var i = 0; i < socketMsgQueue.length; i++){
         sendSocketMessage(socketMsgQueue)
      }
      socketMsgQueue = []
    });

    function sendSocketMessage(msg) {
      if (socketOpen) {
        wx.sendSocketMessage({
          data: JSON.stringify(msg)
        })
      } else {
         socketMsgQueue.push(msg)
      }
    };

    wx.onSocketMessage(function(res) {
      // console.log('收到服务器内容:' + res.data)
      that.getMsg(res.data)
    });

    setTimeout(function() {
      wx.sendSocketMessage({
        data: JSON.stringify({cmd: 'ping'})
      });
      console.log(101);
    }, 50000);

  }
})[/mw_shl_code]


游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

0

主题

17

回帖

115

金钱

新人求带

积分
0
发表于 2017-3-23 21:16:28 | 显示全部楼层
这个有点意思哦,可以看看再回复

0

主题

14

回帖

50

金钱

新人求带

积分
0
发表于 2017-3-27 23:18:45 | 显示全部楼层
学习666666

0

主题

2

回帖

24

金钱

新人求带

积分
0
发表于 2017-3-28 10:28:27 | 显示全部楼层
哈哈!66
回复

使用道具 举报

0

主题

3

回帖

32

金钱

新人求带

积分
0
发表于 2017-3-28 12:58:29 | 显示全部楼层
确实是难得好帖啊,顶先

0

主题

1

回帖

21

金钱

新人求带

积分
0
发表于 2017-4-1 23:26:34 | 显示全部楼层
啥也不说了,感谢楼主分享哇!

0

主题

3

回帖

39

金钱

新人求带

积分
0
发表于 2017-4-5 09:39:10 | 显示全部楼层
如果我想做个能跳转到指定账号的小程序,是不是很难啊

0

主题

3

回帖

21

金钱

新人求带

积分
0
发表于 2017-4-7 09:43:31 | 显示全部楼层
确实是难得好帖啊,顶先

0

主题

12

回帖

68

金钱

新人求带

积分
0
发表于 2017-4-25 00:33:47 | 显示全部楼层
正需要,支持楼主大人了!

0

主题

9

回帖

298

金钱

新人求带

积分
0
发表于 2017-4-25 03:43:04 | 显示全部楼层
正需要,支持楼主大人了!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|微信小程序开发|教程|文档|资源汇总_即速论坛 ( 粤ICP备14097199号-1  

GMT+8, 2024-4-26 11:00 , Processed in 0.120492 second(s), 31 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表