C#关于HttpClient的应用(二):融云IM集成

    public class RcHttpClient:BaseHttpClient
    {
        private String appKey;
        private String appSecret;

        public RcHttpClient()
        {
            this.appKey = BaseHelper.GetValue("RongCloudAppKey");
            this.appSecret = BaseHelper.GetValue("RongCloudSecret");
            this.contentType = "application/x-www-form-urlencoded";
        }

        public RcHttpClient(String appKey, String masterSecret)
        {
            this.appKey = appKey;
            this.appSecret = masterSecret;
            this.contentType = "application/x-www-form-urlencoded";
        }

        /// <summary>
        /// HTTP 验证
        /// </summary>
        /// <returns></returns>
        public override Dictionary<string,string> Authorization()
        {
            Random rd = new Random();
            String nonce = Convert.ToString(rd.Next());
            string timestamp = Convert.ToString(BaseHelper.ConvertDateTimeInt(DateTime.Now));
            string signature = Sha1.GetHash(this.appSecret + nonce + timestamp);

            return new Dictionary<string, string>
            {
                {"App-Key", this.appKey},
                {"Nonce", nonce},
                {"Timestamp", timestamp},
                {"Signature", signature}
            };
        }

Server层:

    public class RcClientServer
    {
        #region 请求地址
        private const String HOST_PATH = "http://api.cn.ronghub.com";
        private const String GET_TOKEN_PATH = HOST_PATH + "/user/getToken.json";
        private const String CREATE_GROUP_PATH = HOST_PATH + "/group/create.json";
        private const String JOIN_GROUP_PATH = HOST_PATH + "/group/join.json";
        private const String QUIT_GROUP_PATH = HOST_PATH + "/group/quit.json";
        private const String DISMISS_PATH = HOST_PATH + "/group/dismiss.json";
        private const String SYNC_GROUP_PATH = HOST_PATH + "/group/sync.json";
        private const String SEND_MSG_PATH = HOST_PATH + "/message/publish.json";
        private const String BROADCAST_PATH = HOST_PATH + "/message/broadcast.json";
        private const String CREATE_CHATROOM_PATH = HOST_PATH + "/chatroom/create.json";
        private const String DESTORY_CHATROOM_PATH = HOST_PATH + "/chatroom/destroy.json";
        private const String QUERY_CHATROOM_PATH = HOST_PATH + "/chatroom/query.json";
        #endregion

        /// <summary>
        /// 获取Token
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="name"></param>
        /// <param name="portraitUri"></param>
        /// <returns></returns>
        public static ResultDTO GetToken(String userId, String name, String portraitUri)
        {
            var reqParams = new Dictionary<String, String>
            {
                {"userId", userId},
                {"name", name},
                {"portraitUri", portraitUri}
            };
            RcHttpClient client=new RcHttpClient();
            var result = client.SendRequest(Method.Post, GET_TOKEN_PATH, client.BuildQueryStr(reqParams));
            if (result.status)
            {
                return WebApi.Success(JsonHelper.ToObject(result.info.ToString())["token"].ToString());
            }
            return WebApi.Error(result.info);
        }

        /// <summary>
        /// 创建群组
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="groupId"></param>
        /// <param name="groupName"></param>
        /// <remarks>同一用户最多可加入 3000 个群,每个群最大至 3000 人</remarks>
        /// <returns></returns>
        public static bool CreateGroup(String userId, String groupId, String groupName)
        {
            var reqParams = new Dictionary<String, String>
            {
                {"userId", userId},
                {"groupId", groupId},
                {"groupName", groupName}
            };
            RcHttpClient client = new RcHttpClient();
            var result = client.SendRequest(Method.Post, CREATE_GROUP_PATH, client.BuildQueryStr(reqParams));
            return result.status;
        }

        /// <summary>
        /// 加入群组
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="groupId"></param>
        /// <param name="groupName"></param>
        /// <remarks>同一用户最多可加入 3000 个群,每个群最大至 3000 人</remarks>
        /// <returns></returns>
        public static bool JoinGroup(String userId, String groupId, String groupName)
        {
            var reqParams = new Dictionary<String, String>
            {
                {"userId", userId},
                {"groupId", groupId},
                {"groupName", groupName}
            };
            RcHttpClient client = new RcHttpClient();
            var result = client.SendRequest(Method.Post, JOIN_GROUP_PATH, client.BuildQueryStr(reqParams));
            return result.status;
        }

        /// <summary>
        /// 退出群组
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="groupId"></param>
        /// <returns></returns>
        public static bool QuitGroup(String userId, String groupId)
        {
            var reqParams = new Dictionary<String, String>
            {
                {"userId", userId},
                {"groupId", groupId}
            };

            RcHttpClient client = new RcHttpClient();
            var result = client.SendRequest(Method.Post, QUIT_GROUP_PATH, client.BuildQueryStr(reqParams));
            return result.status;
        }

        /// <summary>
        /// 解散群组
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="groupId"></param>
        /// <returns></returns>
        public static bool DismissGroup(String userId, String groupId)
        {
            var reqParams = new Dictionary<String, String>
            {
                {"userId", userId},
                {"groupId", groupId}
            };

            RcHttpClient client = new RcHttpClient();
            var result = client.SendRequest(Method.Post, DISMISS_PATH, client.BuildQueryStr(reqParams));
            return result.status;
        }

        /// <summary>
        /// 同步群组
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="groupId"></param>
        /// <param name="groupName"></param>
        /// <returns></returns>
        public static bool SyncGroup(String userId, String[] groupId, String[] groupName)
        {
            String postStr = "userId=" + userId + "&";
            for (int i = 0; i < groupId.Length; i++)
            {
                var id=HttpUtility.UrlEncode(groupId[i], Encoding.UTF8);
                var name = HttpUtility.UrlEncode(groupName[i], Encoding.UTF8);
                postStr += "group[" + id + "]=" + name + "&";
            }
            postStr = postStr.Substring(0, postStr.LastIndexOf('&'));

            RcHttpClient client = new RcHttpClient();
            var result = client.SendRequest(Method.Post, SYNC_GROUP_PATH, postStr);
            return result.status;
        }

        /// <summary>
        /// 发送文本消息
        /// </summary>
        /// <param name="fromUserId"></param>
        /// <param name="toUserId"></param>
        /// <param name="content"></param>
        /// <returns></returns>
        public static bool SendTextMessage(string fromUserId,string toUserId,string content)
        {
            var reqParams  = new Dictionary<String, String>
            {
                {"fromUserId", fromUserId},
                {"toUserId", toUserId},
                {"objectName", "RC:TxtMsg"},
                {"content", content}
            };
            RcHttpClient client = new RcHttpClient();
            var result = client.SendRequest(Method.Post, SYNC_GROUP_PATH, client.BuildQueryStr(reqParams));
            return result.status;
        }
    }

 

posted @ 2016-02-21 15:16  徐航  阅读(1867)  评论(0编辑  收藏  举报