/// <summary> /// 本地rpc远程代理 /// </summary> /// <param name="serviceName"></param> /// <param name="method"></param> /// <param name="args"></param> /// <returns></returns> public byte[] RemoteCall(string serviceName, string method, byte[] args) { if (!_isConnected) { throw new RPCSocketException("连接到服务器失败"); } byte[] result = null; var msg = new RSocketMsg(RSocketMsgType.Request, serviceName, method) { SequenceNumber = UniqueKeyHelper.Next() }; msg.Data = args; BaseSend(msg); if (_syncHelper.WaitOne(msg.SequenceNumber, (r) => { result = r; }, 10 * 1000)) { return(result); } return(null); }
/// <summary> /// 发送请求 /// </summary> /// <param name="serviceName"></param> /// <param name="method"></param> /// <param name="args"></param> /// <param name="timeOut"></param> /// <returns></returns> public byte[] Request(string serviceName, string method, byte[] args, int timeOut) { try { byte[] result = null; var msg = new RSocketMsg(RSocketMsgType.Request, serviceName, method) { SequenceNumber = UniqueKeyHelper.Next() }; msg.Data = args; if (_syncHelper.Wait(msg.SequenceNumber, () => { this.BeginSend(msg); }, (r) => { result = r; }, timeOut)) { return(result); } else { ExceptionCollector.Add("Consumer", new RPCSocketException($"serviceName:{serviceName}/method:{method} 调用超时!")); } } catch (Exception ex) { ExceptionCollector.Add("Consumer", new RPCSocketException($"serviceName:{serviceName}/method:{method} 调用出现异常!", ex)); } return(null); }
/// <summary> /// 向注册了接收通知的rpc client 发送通知 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="t"></param> public void Notice <T>(T t) { if (t != null) { var list = _noticeCollection.GetList().GetAwaiter().GetResult(); if (list != null && list.Any()) { var data = SAEASerialize.Serialize(t); var msg = new RSocketMsg(RSocketMsgType.Notice, null, null, data) { SequenceNumber = UniqueKeyHelper.Next() }; foreach (var item in list) { try { _RServer.Reply(item, msg); } catch (Exception ex) { LogHelper.Warn("ServiceProvider.Notice 出现异常", ex); } } } } }
/// <summary> /// 向rpc service provider 注册接收通知 /// </summary> public void RegistReceiveNotice() { var msg = new RSocketMsg(RSocketMsgType.RegistNotice, null, null) { SequenceNumber = UniqueKeyHelper.Next() }; Send(msg); }
public virtual void GenerateProductNumber() { string number = UniqueKeyHelper.GenerateKey(AlgorithmTypes.Random, 15, 25); while (!DictionaryManager.IsValidProductNumber(ProductID, number)) { number = UniqueKeyHelper.GenerateKey(AlgorithmTypes.Random, 15, 25); } ProductNumber = number; }
/// <summary> /// 发送请求 /// </summary> /// <param name="serviceName"></param> /// <param name="method"></param> /// <param name="args"></param> /// <returns></returns> public byte[] Request(string serviceName, string method, byte[] args) { byte[] result = null; try { var msg = new RSocketMsg(RSocketMsgType.Request, serviceName, method) { SequenceNumber = UniqueKeyHelper.Next() }; msg.Data = args; result = _disorderSyncHelper.Wait(msg.SequenceNumber, () => { SendBase(msg); }); } catch (Exception ex) { ExceptionCollector.Add("Consumer.Request.Error", new RPCSocketException($"serviceName:{serviceName}/method:{method} 调用超时!", ex)); } return(result); }
/// <summary> /// 绑定客户-小程序 /// </summary> /// <param name="payload"></param> /// <returns></returns> private Response BindCustomer(WxPayloadVO payload) { HttpClient client = new HttpClient(); string url = "https://api.weixin.qq.com/sns/jscode2session?appid={0}&secret={1}&js_code={2}&grant_type=authorization_code"; url = string.Format(url, AppId, Secret, payload.Code); HttpResponseMessage response = client.GetAsync(url).Result; response.EnsureSuccessStatusCode(); string msg = response.Content.ReadAsStringAsync().Result; dynamic data = JsonConvert.DeserializeObject <dynamic>(msg); if (data.errmsg == null) { var openid = (string)data.openid; var session_key = (string)data.session_key; byte[] encryData = Convert.FromBase64String(payload.EncryptedData); RijndaelManaged rijndaelCipher = new RijndaelManaged { Key = Convert.FromBase64String(session_key), IV = Convert.FromBase64String(payload.Iv), Mode = CipherMode.CBC, Padding = PaddingMode.PKCS7 }; ICryptoTransform transform = rijndaelCipher.CreateDecryptor(); byte[] plainText = transform.TransformFinalBlock(encryData, 0, encryData.Length); string result = Encoding.Default.GetString(plainText); //动态解析result 成对象 dynamic obj = Newtonsoft.Json.Linq.JToken.Parse(result) as dynamic; string phoneNumber = (string)obj.phoneNumber; //查询手机号是否已注册 dynamic staff = StaffService.QueryWxappUserByPhoneNumber(phoneNumber); if (staff == null) { ESSChannelStaff customer = StaffService.QueryCustomerByWxopenid(openid); if (customer == null) { ChannelStaffVO vo = new ChannelStaffVO(); vo.ISNEW = false; vo.FCHANNELID = 27; vo.FMOBILE = phoneNumber; vo.XCXOPENID = openid; vo.FENABLE = '1'; vo.FTELE = string.Empty; vo.FCREATEDATE = System.DateTime.Now; vo.FMODIFYDATE = System.DateTime.Now; vo.FCREATORID = 0; vo.FMODIFIERID = 0; vo.FQQ = string.Empty; vo.ISNEW = false; vo.KHNAME = "用户" + UniqueKeyHelper.GetUniqueKey(8); ChannelStaffLVO staffLVO = new ChannelStaffLVO { FNAME = "微信注册用户", FJOB = "客户", FREMARK = string.Empty, FROLEID = 1001 }; vo.ChannelStaffLVOs = staffLVO; StaffService.Save(vo); if (StaffService.ZXKH_Staff_Customers(openid)) //判断该用户是否有客服关联,微信小程序消息发送进行人员的第一次分配 { StaffService.ZXKH_AddShip(openid); //添加人员关系 } NHSessionProvider.GetCurrentSession().Flush(); customer = StaffService.QueryCustomerByWxopenid(openid); ESSChannelStaffAvatar avatar = new ESSChannelStaffAvatar { //Picture = "Image/head.png", Picture = "https://zxkf.shuziyu.net//Image/newcomer.png", StaffId = customer.FID, UseWxAvatar = false }; StaffService.SaveAvatar(avatar); } else { customer.FMOBILE = phoneNumber; } NHSessionProvider.GetCurrentSession().Flush(); staff = StaffService.QueryWxappUserByPhoneNumber(phoneNumber); } dynamic staffXCXOpenid = StaffService.QueryWxappUserByXCXOpenid(phoneNumber); if (staffXCXOpenid == null) { StaffService.QueryWxappUserEditXCXOpenid(phoneNumber, openid); } var token = JwtHelper.GenerateToken((int)staff["FID"], (string)staff["FJOB"], 2); var user = new { userId = (int)staff["FID"], userName = (string)staff["FNAME"], wxopenid = (string)staff["FWXOPENID"], FJOB = (string)staff["FJOB"], channelName = (string)staff["CHANNELNAME"], channelCode = (string)staff["FCHANNELCODE"], channelId = (int)staff["FCHANNELID"], customerId = (int)staff["FCUSTOMERID"], channelTypeId = (int)staff["FCHANNELTYPEID"], channelTypeName = (string)staff["FCHANNELTYPENAME"], avatarUrl = (string)staff["PICTURE"], nickName = (string)staff["KHNAME"], xcxopenid = (string)staff["XCXOPENID"], phoneNumber = phoneNumber }; return(new Response { Result = new { token, user } }); } else { throw new Exception((string)data.errmsg); } }