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;
        }
    }
时间: 2024-11-10 18:08:12

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

APICloud平台的融云2.0集成

融云2.0的官方文档地址:http://docs.apicloud.com/端API/开放SDK/rongCloud2 项目需要IM模块,最后还是选择了融云.在iOS原生开发中,融云sdk集成了聊天界面,给开发者提供了很大的便利,但是在apicloud平台上,由于开发者应用IM的场景各异,需求不统一,所以官方没有将聊天界面集成到模块中. 因此我选择了AUI这套专门为apicloud提供的前端开发框架进行IM界面的搭建.AUI官方地址:http://www.auicss.com. 这套框架集成了很

ios开发之 -- 5分钟集成融云的客服功能

最近项目中遇到了客服的功能,首先想到的就是使用融云的功能,因为以前做的即时通讯的项目,用的都是融云的sdk,花了点时间研究了下,希望能帮到大家! 废话不多说,步骤如下: 一.申请融云账号 二.创建应用 三.开通客服服务,融云的客服集成的是智齿客服服务系统,完全能够满足使用! 四.开通客服服务后,会生成客服id,target id就是这个,进入聊天页面之前用的 五.进入应用管理界面,点击API调试,id和username,还有头像url可以随便输,测试用的,下面会有打印,生成一个token 六.准

thinkphp整合系列之融云即时通讯在线聊天

随着技术的发展:现代的网站:越来越趋于应用形式了: 不再是像以前那样需要用户刷新页面:获取数据了: 服务器端可以主动向用户推送数据:更加及时性了: 比较突出的就是即时通讯在线聊天: 今个:我们要打造的就是类似于网页版微信的功能: 示例项目:http://git.oschina.net/shuaibai123/thinkphp-bjyadmin 一:注册融云账号 如果我们不是以即时通讯为主营业务:那么建议使用第三方的服务:这里以融云为例: 官网:http://www.rongcloud.cn/ 注

融云IM 基础服务开发指南WebIMLib API 示例 【干货】

Web SDK API 示例 简介 融云 Web SDK API 用法及常见异常总结,为了方便刚接触融云 Web SDK 开发者朋友们写下此文档,希望可以帮到你们. 说明: 1.函数参数中使用 [] 为可选参数(数组除外). 2.**** => **** 在本文档中表示为示例代码和结果,例:1+2 => 3. 初始化 初始化 SDK 执行初始化需要在开发者后台新建应用得到 AppKey 和 token,初始化代码: RongIMLib.RongIMClient.init(appkey,[dat

融云 Android SDK 拍照,图片选择器方案分析

一  拍照 目前拍照融云提供两种方案 1 SDK kit 包中自带的拍照 关键类 : CameraInputProvider 此类点击是唤起 TakingPicturesActivity 特点是拍照后 勾选完成 会有一个预览界面  此方案如果在某些机型上 点击勾选后无响应 是因为 一些机型唤起 系统相机后 把下面的栈资源回收了 已经做了 onSaveInstanceState 的生命周期保存瞬间状态 但是还是偶现此情况 下面贴出实现代码 如果有知道此问题终极解决方案的开发者 欢迎留言 或者 联系

iOS融云使用原理篇

App Key / Secret App Key / Secret 相当于您的 App 在融云的账号和密码.是融云 SDK 连接服务器所必需的标识,每一个 App 对应一套 App Key / Secret. 融云提供了两套环境,开发环境和生产环境,前者是方便您集成开发和测试的,后者是 App 上线之后真正运营的商业环境.两者间数据隔离,避免开发环境数据和线上生产环境数据互相冲突.针对开发者的生产环境和开发环境,我们提供两套 App Key / Secret ,在正式上线前,请务必切换到生产环境

【APICloud平台融云模块教程第一弹】聊天会话的实现及UI

闲来无事写个教程给大家.实现功能:融云会话聊天及UI,发送表情消息使用模块:rongCloud   chatBox融云的各种申请我就不说了.教程开始:因为融云为第三方模块,每次调试都得需要云编译,建议大家先把UI和基本代码做好.JS插件使用:zepto.min.js一.UI的制作效果图: CSS代码:/*会话消息容器*/#messageList { padding: 15px 0; overflow: hidden;}/*接收消息类,左侧*/.receiver{ clear:both;}.rec

融云CEO韩迎:如何基于云通讯构建企业竞争力

近日,"第四届互联网+高峰论坛暨大数据应用峰会 CIO 时代中国行苏州站"活动成功举行.本次论坛由中国新一代 IT 产业推进联盟.江苏省企业信息化协会指导,CIO 时代学院.苏州工业园区人工智能产业协会.江苏省企业信息化协会苏州代表处联合主办,吸引了来自全国各地的近150名行业翘楚.知名 CIO 及专家学者参会,与会者围绕"新 IT 助力制造业再增长"的主题进行深入沟通与探讨. 活动现场 融云 CEO 韩迎受邀参会,并就"如何基于云通讯构建企业移动信息化竞

apicloud+融云实现即时通讯

请尊重作者的辛勤劳动!!! 使用apicloud开发已经快2个月了,起初的目的就是为了实现安卓和苹果的兼容,属于一个试验项目,究竟apicloud是否能够满足公司的要求?最 终看来还是不错的,使用apicloud+融云实现了类似微信即时通讯的功能.看到有很多后来的人依然在这块挣扎,我就把自己的实现思路和成果分享出来和 大家一起交流一下,我也是第一次做手机开发,有很多经验不足的地方,希望大家能够直接指出来,我也不断完善自己的产品.     这次没有使用本地数据库,所有数据都是从融云和服务器获取,会