Example #1
0
        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);
Example #4
0
        /// <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);
        }
Example #5
0
        /// <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);
        }
Example #6
0
        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();
        }
Example #7
0
        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);
        }