zoukankan      html  css  js  c++  java
  • 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;
            }
        }
  • 相关阅读:
    Disruptor-架构思维的转变
    高性能队列——Disruptor
    flink Standalone Cluster
    Kafka 0.11.0.0 实现 producer的Exactly-once 语义(官方DEMO)
    Kafka 0.11.0.0 实现 producer的Exactly-once 语义(中文)
    Kafka 0.11.0.0 实现 producer的Exactly-once 语义(英文)
    flink window的early计算
    Flink 的Window 操作(基于flink 1.3描述)
    Flink Pre-defined Timestamp Extractors / Watermark Emitters(预定义的时间戳提取/水位线发射器)
    Flink Event Time Processing and Watermarks(文末有翻译)
  • 原文地址:https://www.cnblogs.com/xuhang/p/5204968.html
Copyright © 2011-2022 走看看