Monday 15 August 2011

javascript - SignalR - Show msg if hub is online -



javascript - SignalR - Show msg if hub is online -

i'm building chat, clients can chat back upwards team.

all clients websites have chat. , back upwards team have 1 site. when back upwards team log in there site. hub-connection gets available, , chat open.

but on clients websites, how can show message when supportteam start hub: like:

alert('cht online');

my try:

chathub.cs

public void adminjoin() { var adminuser = "chat open" clients.all.adminisonline(adminuser); }

code on clients website:

chat.on('adminisonline', function (adminuser) { adminhasjoined(adminuser); }); function adminhasjoined(adminuser) { alert(adminuser); };

code above runs when refresh clients website page, , when suppertteam-site online. want alert show everytime suppoertteam logs in. not on pagerefresh

in short: 1. inherit onconnect method. 2. add together users group. 3. create method inform members of grouping new grouping member. 4. utilize js inform event on client side. hub example:

public class chathub : hub { prepp2entities db = new prepp2entities(); //send message chat room public void sendchatmessage(string gn, string name, string message) { clients.group(gn).addchatmessage(name, message); userstatus(); } //public method available on client side , used update user status on user actions (e.g.connect, disconnect public void userstatus() { clients.all.updatestatus(); } public override task onconnected() { //get user info var x = (from in db.users a.login.contains(context.user.identity.name) select a.role).firstordefault(); //add list of online users if (alreadyonline(context.connectionid) == false) { seek { usersonline uo = new usersonline(); uo.connectionid = context.connectionid; uo.username = context.user.identity.name; uo.userrole = x; uo.created = datetime.now; db.usersonline.add(uo); db.savechanges(); } grab (dbentityvalidationexception ex) { var errormessages = ex.entityvalidationerrors .selectmany(y => y.validationerrors) .select(y => y.errormessage); var fullerrormessage = string.join("; ", errormessages); var exceptionmessage = string.concat(ex.message, " validation errors are: ", fullerrormessage); throw new dbentityvalidationexception(exceptionmessage, ex.entityvalidationerrors); } //user role "user" if (x == 1) { //add user grouping joingroup(context.connectionid, context.user.identity.name, true); var operatorname = getoperator(); //find connection id var cid = (from in db.usersonline a.username.contains(operatorname) & a.userrole == 2 select a.connectionid).firstordefault(); if (cid != null & !string.isnullorempty(cid)) { //add user grouping joingroup(cid, context.user.identity.name, false); } else { //message nobody's here stringbuilder sb = new stringbuilder(200); sb.appendformat("Здравствуйте {0}! ", context.user.identity.name); sb.append("К сожалению сейчас наших стилистов нет в сети.<br />"); sb.append("Вы можете оставить сообщение, которое будет прочитано позже."); string message = sb.tostring(); sendchatmessage(context.user.identity.name, "prepp", message); } } //else user role belong back upwards team else { //find users has back upwards team talk var oid = (from in db.users a.login.contains(context.user.identity.name) select a.id).firstordefault(); var u = (from in db.usersonline bring together b in db.users on a.username equals b.login a.userrole == 1 & b.operatorid == oid select a.username).toarray(); foreach (string n in u) { joingroup(context.connectionid, n, false); } } } userstatus(); homecoming base.onconnected(); } public void joingroup(string connectionid, string groupname, bool send) { seek { groupinfo gi = new groupinfo(); gi.userconnection = connectionid; gi.groupname = groupname; gi.created = datetime.now; db.groupinfo.add(gi); db.savechanges(); groups.add(connectionid, groupname); } grab (dbentityvalidationexception ex) { var errormessages = ex.entityvalidationerrors .selectmany(x => x.validationerrors) .select(x => x.errormessage); var fullerrormessage = string.join("; ", errormessages); var exceptionmessage = string.concat(ex.message, " validation errors are: ", fullerrormessage); throw new dbentityvalidationexception(exceptionmessage, ex.entityvalidationerrors); } if (send == true) { var on = getoperator(); stringbuilder sb = new stringbuilder(200); sb.appendformat("Здравствуйте {0}! ", context.user.identity.name); sb.appendformat("Я Ваш личный стилист - {0}. ", on); sb.append("Чем сегодня я могу помочь Вам?"); string message = sb.tostring(); sendchatmessage(groupname, on, message); } userstatus(); } public bool alreadyonline(string connectionid) { bool exist; var x = db.usersonline.where(p => p.connectionid.contains(connectionid)).count(); if (x > 0) { exist = true; } else { exist = false; } homecoming exist; } public override task ondisconnected() { stringbuilder sb = new stringbuilder(100); sb.appendformat("Пользователь {0} не в сети!", context.user.identity.name); string message = sb.tostring(); sendchatmessage(context.user.identity.name, "prepp", message); userstatus(); db.groupinfo.removerange(db.groupinfo.where(x => x.userconnection.contains(context.connectionid))); db.usersonline.removerange(db.usersonline.where(x => x.username.contains(context.user.identity.name))); db.savechangesasync(); userstatus(); homecoming base.ondisconnected(); } public override task onreconnected() { stringbuilder sb = new stringbuilder(100); sb.appendformat("Пользователь {0} вернулся к нам!", context.user.identity.name); string message = sb.tostring(); sendchatmessage(context.user.identity.name, "prepp", message); userstatus(); homecoming base.onreconnected(); } public string getoperator() { //Возвращаем имя оператора если он был назначен ранее var oid = (from in db.users a.login.contains(context.user.identity.name) select a.operatorid).firstordefault(); if (oid.hasvalue) { homecoming db.users.where(x => x.id == oid).select(x => x.login).singleordefault(); } //Выбираем и добавляем пользователю случайного оператора else { //выбираем всех пользователей с ролью оператора var opname = (from in db.usersonline a.userrole == 2 orderby (guid.newguid()) select a.username).firstordefault(); //Назначем пользователю оператора var opid = (from in db.users a.login.contains(opname) select a.id).singleordefault(); if (opid > 0) { writeoperator(context.user.identity.name, opid); homecoming opname; } else { var op = (from in db.users a.role == 2 orderby (guid.newguid()) select a.id).firstordefault(); writeoperator(context.user.identity.name, op); homecoming db.users.where(x => x.id == op).select(x => x.login).singleordefault(); } } } void writeoperator(string username, int operatorid) { var uid = db.users.where(p => p.login == username).select(x => x.id).firstordefault(); var = db.users.find(uid); if (a != null) { a.operatorid = operatorid; db.savechanges(); } else throw new exception();

} }

javascript jquery signalr

No comments:

Post a Comment