object GetObjectT(string json, MsgOperation msgOperation, out string errmsg) { object t = null; try { errmsg = ""; switch (msgOperation) { case MsgOperation.登录校验: t = JsonConvert.DeserializeObject <AccessObject>(json); break; case MsgOperation.发布广播: t = JsonConvert.DeserializeObject <PublishObject>(json); break; case MsgOperation.订阅消息Http方式: SubscribeObject subscribe = JsonConvert.DeserializeObject <SubscribeObject>(json); if (string.IsNullOrEmpty(subscribe.notifyUrl)) { errmsg = "订阅消息Http方式,请传入异步通知地址notifyUrl"; } t = subscribe; break; } } catch (Exception ex) { errmsg = $"JSON解析失败,json:[{json}]"; } return(t); }
public ValueTask InvokeAsync(MsgOperation msg) { if (subscriptions.TryGetValue(msg.Sid, out var handler)) { return(handler.HandleAsync(msg)); } return(default);
public ValueTask InvokeAsync(MsgOperation msg) { if (subscriptions.TryGetValue(msg.Sid, out var handler)) { return(handler.HandleAsync(msg)); } //var text = Encoding.UTF8.GetString(data); //Console.WriteLine($"OnMsg: sid:{sid} replyto:{replyto} text:{text}"); return(default);
/// <summary> /// 从Http 中获取JSON 请求方式是POST FromBody /// </summary> /// <typeparam name="T"></typeparam> /// <param name="request"></param> /// <param name="errmsg"></param> /// <returns></returns> object LoadJsonFormBody(string request, out MsgOperation msgOperation, out string errmsg) { msgOperation = MsgOperation.未知; string[] strs = request.Split(new string[] { "\r\n" }, StringSplitOptions.None); //以“换行”作为切分标志 StringBuilder sb = new StringBuilder(); if (strs.Length > 0) { string[] line1 = strs[0].Split(' '); try { string ope = line1[1].Split('?')[1].Split('=')[1]; if (!Enum.TryParse(ope, out msgOperation)) { errmsg = "ope操作类型不存在"; } } catch (Exception ex) { errmsg = "请在url地址上传入操作类型ope"; return(null); } bool isStart = false; foreach (var item in strs) { if (item.Trim() == string.Empty && !isStart) { isStart = true; continue; } if (isStart) { sb.Append(item); } } } if (sb.ToString().Trim() == string.Empty) { errmsg = "请传入请求的JSON"; } if (msgOperation == MsgOperation.未知) { errmsg = "请传入正确的操作类型"; } object t = GetObjectT(sb.ToString(), msgOperation, out errmsg); return(t); }
/// <summary> /// 组装将要发送的数据包 含包头 /// </summary> /// <param name="data">消息体</param> /// <param name="msgId">消息ID</param> /// <param name="msgOperation">操作类型</param> /// <returns></returns> public static byte[] GetPackage(object data, uint msgId, MsgOperation msgOperation) { byte[] byteData = ByteConvert.ObjToByte(data); byte[] sendData = new byte[12 + byteData.Length]; uint totalLength = (uint)(12 + byteData.Length); Array.Copy(ByteConvert.UInt2Bytes(totalLength), 0, sendData, 0, 4); Array.Copy(ByteConvert.UInt2Bytes((uint)msgOperation), 0, sendData, 4, 4); Array.Copy(ByteConvert.UInt2Bytes(msgId), 0, sendData, 8, 4); Array.Copy(byteData, 0, sendData, 12, byteData.Length); return(sendData); }
public void Send(object data, MsgOperation msgOperation) { try { if (_msgId >= uint.MaxValue) { _msgId = uint.MinValue; } _msgId++; } catch (Exception ex) { _msgId = uint.MinValue; } uint msgId = _msgId; byte[] sendData = MQPackageHelper.GetPackage(data, msgId, msgOperation); client.BeginSend(sendData, 0, sendData.Length, 0, new AsyncCallback(SendCallback), client); sendDone.WaitOne(); }
private void Send(Socket handler, object data, MsgOperation msgOperation) { try { if (_msgId >= uint.MaxValue) { _msgId = uint.MinValue; } _msgId++; } catch (Exception ex) { _msgId = uint.MinValue; } uint msgId = _msgId; byte[] sendData = MQPackageHelper.GetPackage(data, msgId, msgOperation); // Begin sending the data to the remote device. Console.WriteLine($"向[{handler.RemoteEndPoint.ToString()}]发送了一条消息:[{JsonConvert.SerializeObject(data)}]"); handler.BeginSend(sendData, 0, sendData.Length, 0, new AsyncCallback(SendCallback), handler); }