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 OnlineUsers = new List(); // 在线用户列表 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>("onConnected", (connnectId, username, allUsers) => { OnlineUsers = allUsers; }); msgProxy.On, 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>("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("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); } } } }