|
|
using Microsoft.AspNet.SignalR.Client; using Euro.Transfer.Model; using System; using System.Collections.Generic; using System.Threading.Tasks; using System.Windows.Forms; using Euro.Transfer.Base; using System.Threading;
namespace Euro.Transfer { public class HubTransfer : ServiceBase { private string transferOrgID = Common.ConfigGetValue("", "TransferOrgID"); private string transferUserID = Common.ConfigGetValue("", "TransferUserID");
public delegate void WriteOrLogsHandler(string text, int count);
public event WriteOrLogsHandler writeOrLogs;
public List<UserInfo> OnlineUsers = new List<UserInfo>(); // 在线用户列表
public IHubProxy msgProxy; public HubConnection connection; public string clientOrgId; public string clientId; public string clientName;
public HubTransfer() { clientOrgId = transferOrgID; clientId = transferUserID; clientName = "奕達小助手"; }
public async Task RunAsync(string url) { try { connection = new HubConnection(url); //connection.TraceWriter = _traceWriter;
msgProxy = connection.CreateHubProxy("msgHub");
msgProxy.On<string, string, List<UserInfo>>("onConnected", (connnectId, username, allUsers) => { OnlineUsers = allUsers; });
msgProxy.On<string, List<UserInfo>, string, string, string, bool>("onUserDisconnected", (connnectId, allUsers, orgid, userid, username, islogin) => { //var user = OnlineUsers.FirstOrDefault(u => u.ConnectionId == connnectId);
//// 判断用户是否存在,存在则删除
//if (user != null)
//{
// OnlineUsers.Remove(user);
//}
OnlineUsers = allUsers;
if (!islogin && orgid == clientOrgId && userid == clientId) { Thread.Sleep(10000); //延时10秒
connection.Start().ContinueWith(t => { if (!t.IsFaulted) { //连接成功,调用Register方法
msgProxy.Invoke("Register", clientOrgId, clientId, clientName, true); } else { //MessageBox.Show("通訊連接失敗!! 請檢查Tracking後臺系統是否正常運行");
ServiceTools.WriteLog(ServiceBase.Errorlog_Path, "Euro.Transfer.HubTransfer:通訊連接失敗!! 請檢查Tracking後臺系統是否正常運行", true); } }); } });
msgProxy.On<List<UserInfo>>("onlineusers", (allUsers) => { OnlineUsers = allUsers; });
msgProxy.On("transfertips", () => { msgProxy.Invoke("Register", clientOrgId, clientId, clientName, true); var sIsTest = Common.ConfigGetValue("", "IsTest");//是否為測試
if (sIsTest == "true") { ServiceTools.WriteLog(Debuglog_Path, "HubTransfer.transfertips:" + clientOrgId + "-" + clientId + " " + connection.ConnectionId, true); } });
//客户端接收实现,可以用js,也可以用后端接收
var pushtransfer = msgProxy.On<string, string, string, int>("pushtransfer", (orgid, userid, data, index) => { switch (index) { case 1: TransferService.TransferBill(writeOrLogs, orgid, userid, data); break;
case 2: TransferService.TransferCus(writeOrLogs, orgid, userid, data); break;
case 3: TransferService.TransferPrj(writeOrLogs, orgid, userid, data); break;
default: break; } msgProxy.Invoke("transferBack", data, index); });
await connection.Start().ContinueWith(t => { if (!t.IsFaulted) { //连接成功,调用Register方法
//msgProxy.Invoke("Register", clientOrgId, clientId, clientName,true);
msgProxy.Invoke("GetOnlineUsers"); } else { //MessageBox.Show("通訊連接失敗!! 請檢查Tracking後臺系統是否正常運行");
ServiceTools.WriteLog(ServiceBase.Errorlog_Path, "Euro.Transfer.HubTransfer:通訊連接失敗!! 請檢查Tracking後臺系統是否正常運行", true); } }); //await msgProxy.Invoke("Hello", "Hello World!");
} catch (Exception ex) { ServiceTools.WriteLog(ServiceBase.Errorlog_Path, ex.ToString(), true); } } } }
|