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. arch linux设备(请参考官方文档,桌面安装没有找到一个好工作后)

    首先,启动安装系统(一获得通过vmware虚拟机) 1.设置键盘布局 #loadkeys "us" #设置为美国的键盘布局.一般能够默认就可以 2.建立硬盘的分区 我採用的是fdi ...

  2. decimal ? 含义

    例如:   decimal ? je = zfje;   意思是  将 JE赋值为  ZFJE ,  并且允许  JE 为 NULL 值 这时JE为引用类型

  3. 【Nginx】磁盘文件写入飞地发

    文章继续.什么时候Nginx当用户请求一个文件,这将无法读取该文件的内容加载到内存,然后从内存发送,但电话sendfile况下,从内核直接发送出去.这样做显然效率要更高.Nginx也为我们封装好了一系 ...

  4. Apple Watch 1.0 开发介绍 1.1 简介 开发苹果手表

    使用Apple Watch,用户可以使用一种不显眼的方式查看信息.不用把iPhone从口袋里拿出来,就可以通过看一下手表快速获得重要信息. 作为Apple Watch的第三方app开发者,应该通过使用 ...

  5. 安卓培训第五天---上传文件SD卡

    有关如何将文件上传到先说说SD卡: package com.example.lesson05_02; import java.io.File; import java.io.FileNotFoundE ...

  6. linux内核数据包转发流程(三)网卡帧接收分析

    [版权声明:转载请保留出处:blog.csdn.net/gentleliu.邮箱:shallnew*163.com] 每一个cpu都有队列来处理接收到的帧,都有其数据结构来处理入口和出口流量,因此,不 ...

  7. 从&quot;分层二进制输出&quot;至&quot;解决二进制树深度&quot;总结

    本文研究的摘要,欢迎转载,但请注明出处:http://write.blog.csdn.net/postedit/41964669 近期在刷LettCode上的算法题,发现好多题目的解题思路大体是一致的 ...

  8. SDUT 2894-C(最短spfa)

    C Time Limit: 7000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 给出一个带权无向图.包括n个点,m条边.求出s,e的最短路.保证最短路存在 ...

  9. 处理FTP上传成功推理

    #登录FTPserver获取指定文件 #$1:server住址 #$2:帐户 #$3:password #$4:文件路径名 #$5:本地文件路径名 #$6:本地文件名 #比量ftp上传结果: #获取上 ...

  10. hdu 5106 Bits Problem(数位dp)

    题目链接:hdu 5106 Bits Problem 题目大意:给定n和r,要求算出[0,r)之间全部n-onebit数的和. 解题思路:数位dp,一个ct表示个数,dp表示和,然后就剩下普通的数位d ...