SignalrTools.js
//需要按顺序引入的文件jquery-1.6.4.min.js,jquery.signalR-2.3.0.js,signalr/hubs,SignalrTools.js
//SRTools.oFn = { welcome: function () { alert("欢迎连接到技术员") },sorry: function () { alert("技术员正忙") }};////配置需要客户端调用的方法
//SRTools.oQs = { "name": "zzz", "uid": "ddd" };////向服务器传字符串数据
//SRTools.logging=true//启用客户端日志
//==========上面配置是可选===
//SRTools.proxy = chat;//分配代理
//SRTools.start();////打开连接
//SRTools.server.send(msg)//调用服务器方法
//$("#closeBtn").click(function(){SRTools.stop()});//关闭连接
//
var SRTools = {
//=====================以下配置信息,需要在start()前配置好====================
proxy: null, //配置代理
oFn: null, //需要在服务器端调用的客户端方法,json对象{方法名:方法体}可选,会自动调用setClientFn(oFn),也可以直接调用这个方法设置
logging: false, // bool:是否开启控制台日志,可选
oQs: null, //json对象,querystring 字符串数据,在服务器,context.querystring[name]获取,可选,会自动调用setQs(oQs),也可以直接调用这个方法设置
transport: {transport: ['webSockets', 'longPolling'] },//指定传输方法
//====================以下是内部方法,不用管==============================
url:null,
config: config,//设置参数,内部调用,只调用一次
init: init, //初始化,内部自动调用,可将会手动调用的初始放这里
//====================以下是可调用的方法==============================
setClientFn: setClientFn, //start方法之前设置setClientFn(oFn)
setQs: setQs, //start方法之前设置setQs(oQs, bool)bool:true,不覆盖原来信息,默认覆盖
start: start,//开启连接
stop: stop,//断开连接,只是断开了服务器连接
state: null, //传递状态,属性SRTools。state.username="zs",服务器clients.caller.username访问
joinGroup: joinGroup,//调用服务器添加组,需要服务器添加同名方法
leaveGroup: leaveGroup,//调用服务器删除组,需要服务器添加同名方法
server: null,//获得服务器对象,调用服务器方法
startDone:function(){},
//======================事件======================
starting: function (fn) { $.connection.hub.starting(fn) },//连接发送数据之前触发
received: function (fn) { $.connection.hub.received(fn) },//连接上接到任何数据时触发
connectionSlow: function (fn) { $.connection.hub.connectionSlow(fn) },//客户端有延迟时,或频繁删除触发
reconnecting: function (fn) { $.connection.hub.reconnecting(fn) },//当底层传输开始重新连接时引发。
reconnected: function (fn) { $.connection.hub.reconnected(fn) },//当底层传输重新连接时引发。
stateChanged: function (fn) { $.connection.hub.stateChanged(fn) },//连接状态更改时引发。提供旧状态和新状态(连接,连接,重新连接或断开连接)。
disconnected: function (fn) { $.connection.hub.disconnected(fn) },//连接断开时引发
};
//=================================具体方法实现==================================
function init() {this.config();}
function setClientFn(ofn) { $.extend(this.proxy.client, this.oFn); }
function stop() { $.connection.hub.stop();console.error("连接已关闭") }
function joinGroup(groupname) { this.server.joinGroup(groupname); }
function leaveGroup(groupname) { this.server.leaveGroup(groupname); }
function config() {
if (!this.initOnOff) {
if (!this.proxy) {
alert("必须设置连接代理");
return;
}
if (this.logging) $.connection.hub.logging = true;
if (this.oQs) this.setQs(this.oQs)
if (this.oFn) this.setClientFn(this.oFn);
this.state = this.proxy.state;
this.server = this.proxy.server;
this.initOnOff = true;
}
}
function setQs(oQs, bool) {
if (bool) {
$.extend(this.oQs, oQs);
oQs = this.oQs;
}
$.connection.hub.qs = oQs;
}
function start() {
if (!this.initOnOff) {
this.init();
}
return $.connection.hub.start(this.transport);
}
使用示例
//可选配置===============
$.connection.hub.url = url + "/signalr";//如果是跨域需设置服务器地址
SRTools.logging = true;//开启控制台日志---可选
SRTools.oFn ={stopCon:SRTools.stop}//设置服务器可调用的客户端方法---可选
SRTools.oQs = { "userID": user.userID, "password": user.password };//传输数据导服务器---可选
//必须==================
SRTools.proxy = $.connection.serviceHub;//分配代理
SRTools.start().done(function () {//启动连接
SRTools.startDone();//加载面板
});
可选事件
SRTools.starting(function (){})//监听成功事件
SRTools.reconnecting(function (){})//监听重新连接
SRTools.reconnected(function (){})//监听重新连接成功
SRTools.disconnected(function (){})//监听断开连接