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 = ; 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(, 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;
}
}

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

  1. iOS:融云即时通讯快速集成

    一.介绍 即时通讯在众多社交软件.生活软件以及教育软件中已经是必备的功能了,在当前国内,即时通讯SDK做的比较不错的有那么几家,例如环信SDK.融云SDK...,这两家做的都很不错,各有千秋吧,要是真 ...

  2. APICloud平台的融云2.0集成

    融云2.0的官方文档地址:http://docs.apicloud.com/端API/开放SDK/rongCloud2 项目须要IM模块,最后还是选择了融云.在iOS原生开发中,融云sdk集成了聊天界 ...

  3. web 直播&即时聊天------阿里云、融云(二)

    上一篇简要主要介绍了融云制作聊天室的基本方法,这次基本属于对上一篇的补充以及进阶...^_^... (ps:吐槽一下,加了三个融云的线下qq群,全部没人解决问题,也不知道建此群的意义,若是民间的话就当 ...

  4. 融云官方cordova示例使用指南

    最近公司要在App里加IM功能,用融云IM.于是下载其cordova版示例:https://github.com/rongcloud/cordova-plugin-rongcloud-im-demo ...

  5. apicloud+融云实现即时通讯

    请尊重作者的辛勤劳动!!! 使用apicloud开发已经快2个月了,起初的目的就是为了实现安卓和苹果的兼容,属于一个试验项目,究竟apicloud是否能够满足公司的要求?最 终看来还是不错的,使用ap ...

  6. 融云(找到“每个App都有沟通的需求”的细分市场)

    近日,国内著名App驾考宝典和融云达成合作,为应用增加IM功能,实现亿级用户之间聊天.消息一出,IM(即时通讯)领域的大佬,同时也是个上线不到两岁的新生力量,再次引发了行业的关注. 对业内人士而言,即 ...

  7. web 直播&即时聊天------阿里云、融云

    随着直播越来越火,所在公司也打算制作自己的直播,所以去了解了这方面,使用后发现还是有些问题需要记录的. 经过分析,制作直播应该是分为两块来做,即直播与实时评论.这里先去制作实时评论,等直播ok后,也会 ...

  8. web 直播&即时聊天------阿里云、融云(三)

    经过前面的知识,基本已经把聊天室的功能搞定了,剩下的就是直播的问题了... 一如既往,阿里云的web demo也是少的可怜,只有一个web播放器(Prismplayer),所以这里主要就此播放器踩的坑 ...

  9. 融云亮相GDG谷歌女性开发者大会 揭秘IMSDK网络优化策略

    4 月 20 日,冷雨阻碍不了天津GDG谷歌女性开发者大会的热烈召开,一众开发者.架构师和科技公司创业者云集一堂,就女性开发者的技术.职场.人生多方面话题展开深入探讨.活动由GDG (谷歌开发者社区) ...

随机推荐

  1. CareerCup它1.8 串移包括问题

    [称号] 原文: 1.8 Assume you have a method isSubstring which checks if one word is a substring of another ...

  2. 移动web:tab选项卡

    平常做移动端会用到tab选项卡,这和PC端有些区别,移动端是触摸滑动切换,PC端是点击.移入切换. 这里滑动切换就是一个移动端事件的应用,这里主要用到的触摸事件:touchstart.touchmov ...

  3. javascript有用小技巧—实现分栏显示

    记得给师哥师姐測试考试系统的时候,看到他们的考试页面能够实现隐藏左边的考生信息部分,当时认为好高大上.好人性化. 如今学了javascript,我也能实现这个功能了,以下来显摆一下. 1.页面设计: ...

  4. 【iOS】文件上传小记

    iOS由该系统提供API可以实现可以实现文件的上传和下载,有两种方法来. NSURLConnection与NSURLSession. 当中NSURLConnection是使用非常久的的一种方式.NSU ...

  5. 数据结构 - AVL木

    在计算机科学,AVL木是一个平衡树最早发明. 于AVL树节点,而不管是什么的两个子树之一的高度之间最大的区别,因此,它也被称为平衡树高.查找.O(log n). 插入和移除可能需要一个或更多次通过旋转 ...

  6. javascript中的三角学

    三角学主要研究三角形和它们的边角关系,包含一个90度角的三角形被称为直角三角形.在这里主要研究直角三角形相关的知识. 1. 角度和弧度 360(角度) = 2*Math.PI(弧度) degrees ...

  7. VS2015企业版本(安装包+key)

    VS2015中文企业版: http://pan.baidu.com/s/1eQtWvNs VS2015英文企业版: http://pan.baidu.com/s/1i3gZaVN —————————— ...

  8. 软体project(两)——软体project

        每本书的第一章,都是在讲宏观的东西.软工也不例外.接下来.我们就要介绍软件project"是什么"的问题. 一.是什么? watermark/2/text/aHR0cDov ...

  9. 系列三VisualSvn Server

    原文:系列三VisualSvn Server VisualSvn Server介绍 1 .VisualSvn Server  VisualSvn Server是免费的,而VisualSvn是收费的.V ...

  10. AspNet MVC4 教育-28:Asp.Net MVC4 Ajax技术部门四舍五入余速Demo

    A.创建一个Basic项目类型. B.于Models创建一个文件夹: DivModel.cs: using System; using System.Collections.Generic; usin ...