`
shirlly
  • 浏览: 1652079 次
  • 性别: Icon_minigender_2
  • 来自: 福州
社区版块
存档分类
最新评论

实现发送手机短讯息的类

    博客分类:
  • .NET
阅读更多
using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections;
using System.Runtime.InteropServices;

namespace UDS.Components
{
	/// <summary>
	/// SMS 
	/// </summary>
	public class SMS
	{
		int CommIndex = 1;
		/*
		#region 引用组件
		[DllImport("../bin/AscendSMS.dll")]
		public static extern int OpenComm(int CommIndex);
		[DllImport("../bin/AscendSMS.dll")]
		public static extern int CloseComm(int CommIndex);
		[DllImport("../bin/AscendSMS.dll")]
		public static extern int ForceCloseComm(int CommIndex);
		[DllImport("../bin/AscendSMS.dll")]
		public static extern int SendMsg(int CommIndex,string Msg,string MobileNo,int Msg_Index,bool Chinese);
		[DllImport("../bin/AscendSMS.dll")]
		public static extern int GetUnSendCount(int CommIndex);
		[DllImport("../bin/AscendSMS.dll")]
		public static extern bool GetNextSendMsg(int CommIndex, string Msg,bool DeleteAfterRead);
		[DllImport("../bin/AscendSMS.dll")]
		public static extern bool GetNewMsg(int CommIndex,  string Msg);
		#endregion
		
		/// <summary>
		/// 发送短消息
		/// 返回操作码 0 成功 -2 消息超过长度 -3 手机号码不正确 -4 发送阵列已满 -8 模块未打开 -1 串口未打开
		/// </summary>
		/// <param name="Msg">短消息内容</param>
		/// <param name="MobileNo">目标端手机号码,包括一般号码及特殊号码</param>
		/// <param name="MsgIndex">短消息标志位</param>
		/// <param name="IsZh">是否中文(中文为True,否则为False)</param>
		/// <returns>操作码</returns>
		public int SendMobileMsg(string Msg, string MobileNo, int MsgIndex,bool IsZh) 
		{
			CloseComm(CommIndex);
			OpenComm(CommIndex); 
			String[] MoA = MobileNo.Split(',');
			String[] RtnCodeA = MoA;
			for(int i=0;i<MoA.Length;i++)
			{
				int RtnCode = SendMsg(CommIndex,Msg,MoA[i],MsgIndex,IsZh);
				RtnCodeA[i] = RtnCode.ToString();
			}
			CloseComm(CommIndex);
			if(RtnCodeA[0]=="0")
				return 0;
			else
				return -1;
		}		
	    */

		public SMS()
		{
			//
			// TODO: 
			//
		}

		/// <summary>
		/// 得到在线人数
		/// </summary>
		/// <returns>返回int</returns>
        public int GetOnlineCount()
        {
            Database data = new Database();
            SqlDataReader dataReader = null;
            try
            {
                data.RunProc("SP_SMS_GetOnlineCount", out dataReader);
                if (dataReader.Read()) return Int32.Parse(dataReader[0].ToString());
                else return 0;
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                throw new Exception("读取在线人数出错!", ex);
            }
            finally
            {
                data = null;
                dataReader = null;
            }
        }

		/// <summary>
		/// 得到新消息总数
		/// </summary>
		/// <returns>返回int</returns>
        public int GetNewMsgCount(string Username)
        {
            Database data = new Database();
            SqlDataReader dataReader = null;
            SqlParameter[] prams = {
									   data.MakeInParam("@username",    SqlDbType.VarChar, 50, Username)
								   };
            try
            {
                data.RunProc("SP_SMS_GetNewMsgCount", prams, out dataReader);
                if (dataReader.Read()) return Int32.Parse(dataReader[0].ToString());
                else return 0;
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                throw new Exception("得到新消息总数出错!", ex);
            }
            finally
            {
                data = null;
                dataReader = null;
            }
        }

		/// <summary>
		/// 读消息
		/// </summary>
        public bool ReadMsg(string MsgIDS, string Username)
        {
            Database data = new Database();
            SqlParameter[] prams = {
									   data.MakeInParam("@MsgIDS",    SqlDbType.VarChar, 2000, MsgIDS),
									   data.MakeInParam("@Username",    SqlDbType.VarChar, 20, Username),
								   };
            try
            {
                data.RunProc("SP_SMS_ReadMsg", prams);
                return true;
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                //	throw new Exception("读消息出错!",ex);
                return false;
            }
            finally
            {
                data = null;
            }
        }


		/// <summary>
		/// 更新在线记录表.添加新的在线人员
		/// </summary>
        public void UpdateOnlineInfo(string Username, string HostAddr, string SessionID)
        {
            Database data = new Database();
            SqlParameter[] prams = {
									   data.MakeInParam("@username",    SqlDbType.VarChar, 50, Username),
									   data.MakeInParam("@hostaddr",    SqlDbType.VarChar, 50, HostAddr),
									   data.MakeInParam("@sessionid",   SqlDbType.VarChar, 50, SessionID)
								   };
            try
            {
                data.RunProc("SP_SMS_UpdateOnlineInfo", prams);
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                throw new Exception("更新在线记录表出错!", ex);
            }
            finally
            {
                data = null;
            }
        }

		/// <summary>
		/// 更新活动记录及检测未活动人员
		/// </summary>
        public string CheckUpdate(string Username, string SessionID, int ActiveNodeID)
        {
            string ReturnStr = "";
            int ReturnID = 0;
            int NewMsgFlag = 0;
            Database data = new Database();
            SqlParameter[] prams = {
									   data.MakeInParam("@username",    SqlDbType.VarChar, 100, Username),
									   data.MakeInParam("@sessionid",   SqlDbType.VarChar, 100, SessionID),
									   data.MakeInParam("@ActiveNodeID",   SqlDbType.Int, 4, ActiveNodeID),
									   data.MakeOutParam("@ReturnID", SqlDbType.Int, 4),
									   data.MakeOutParam("@NewMsgFlag", SqlDbType.Int, 4)
			};
            try
            {
                data.RunProc("SP_SMS_CheckUpdate", prams);
                ReturnID = Int32.Parse(prams[3].Value.ToString());
                if (ReturnID == -1)
                    NewMsgFlag = 0;
                else
                    NewMsgFlag = Int32.Parse(prams[4].Value.ToString());
                ReturnStr = ReturnID.ToString() + "|" + NewMsgFlag.ToString();
                data = null;
                return ReturnStr;
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                throw new Exception("更新活动记录及检测未活动人员出错!", ex);
            }
            finally
            {
                data = null;
            }
        }

		/// <summary>
		/// 得到所有在线人员
		/// </summary>
		/// <returns></returns>
        public SqlDataReader GetOnlinePerson()
        {
            Database data = new Database();
            SqlDataReader dr = null;
            try
            {
                data.RunProc("sp_SMS_GetOnlinePerson", out dr);
                return dr;
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                throw new Exception("读取在线人员数据出错!", ex);
            }
            finally
            {
                data = null;
                dr = null;
            }
        }

		/// <summary>
		/// 得到聊天记录
		/// </summary>
		/// <returns></returns>
        public SqlDataReader GetHistory(string Receiver, string Sender)
        {
            Database data = new Database();
            SqlDataReader dr = null;
            SqlParameter[] prams = {
									   data.MakeInParam("@Sender",    SqlDbType.VarChar, 50, Sender),
									   data.MakeInParam("@Receiver",   SqlDbType.VarChar, 50, Receiver)
			};
            try
            {
                data.RunProc("SP_SMS_GetHistory", prams, out dr);
                return dr;
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                throw new Exception("得到聊天记录出错!", ex);
            }
            finally
            {
                data = null;
                dr = null;
            }
        }

		/// <summary>
		/// 得到我所接收的所有短讯
		/// </summary>
		/// <returns></returns>
        public SqlDataReader GetMyReceive(string Username)
        {
            Database data = new Database();
            SqlDataReader dr = null;
            SqlParameter[] prams = {
									   data.MakeInParam("@Username",    SqlDbType.VarChar, 50, Username)
								    };
            try
            {
                data.RunProc("SP_SMS_GetMyAllMsg", prams, out dr);
                return dr;
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                throw new Exception("得到我所接收的所有短讯出错!", ex);
            }
            finally
            {
                data = null;
                dr = null;
            }
        }

		/// <summary>
		/// 得到我所发送的所有短讯
		/// </summary>
		/// <returns></returns>
        public SqlDataReader GetMySent(string Username)
        {
            Database data = new Database();
            SqlDataReader dr = null;
            SqlParameter[] prams = {
									   data.MakeInParam("@Username",    SqlDbType.VarChar, 50, Username)
								   };
            try
            {
                data.RunProc("SP_SMS_GetMySent", prams, out dr);
                return dr;
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                throw new Exception("得到我所接收的所有短讯出错!", ex);
            }
            finally
            {
                data = null;
                dr = null;
            }
        }

		/// <summary>
		/// 得到某个人的最新一条消息
		/// </summary>
		/// <returns></returns>
        public SqlDataReader GetNewLocalMsg(string Username)
        {
            Database data = new Database();
            SqlDataReader dr = null;
            SqlParameter[] prams = {
									   data.MakeInParam("@username",    SqlDbType.VarChar, 50, Username)
									};
            try
            {
                data.RunProc("sp_SMS_GetNewMsg", prams, out dr);
                return dr;
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                throw new Exception("得到某个人的最新一条消息出错!", ex);
            }
            finally
            {
                data = null;
                dr = null;
            }
        }

		/// <summary>
		/// 发送站内短消息
		/// </summary>
		/// <param name="sender">发送者用户名</param>
		/// <param name="receivers">接受者用户名,可用逗号相隔多人</param>
		/// <param name="msg">短消息内容</param>
		/// <param name="sendtime">短消息发送时间</param>
		/// <returns>无返回值</returns>
        public void SendLocalMsg(string sender, string receivers, string msg, DateTime sendtime)
        {
            string newmsgid = "0";
            Database data = new Database();

            #region 存消息至数据库,返回MsgID
            SqlParameter[] prams1 = {
									   data.MakeInParam("@sender",    SqlDbType.VarChar, 50, sender),
									   data.MakeInParam("@content",   SqlDbType.VarChar, 255, msg),
									   data.MakeInParam("@type",   SqlDbType.Int, 1, 1),	
									   data.MakeInParam("@sendtime",   SqlDbType.DateTime, 30, sendtime),
									   data.MakeOutParam("@newmsgid", SqlDbType.Int, 4)									
								   };
            try
            {
                data.RunProc("SP_SMS_SendLocalMsg", prams1);
                newmsgid = prams1[4].Value.ToString();
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                throw new Exception("存消息至数据库出错!", ex);
            }
            #endregion

            #region 将消息与接收者关联
            SqlParameter[] prams2 = {
									   data.MakeInParam("@MsgID",    SqlDbType.Int, 4, Int32.Parse(newmsgid)),
									   data.MakeInParam("@Receivers",SqlDbType.VarChar, 5000, receivers),
									   data.MakeInParam("@MobileNo",   SqlDbType.VarChar, 4, ""),	
									  data.MakeInParam("@type",   SqlDbType.Int, 1, 1)
								   };
            try
            {
                data.RunProc("SP_SMS_SetMsgReceiver", prams2);
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                throw new Exception("将消息与接收者关联出错!", ex);
            }
            #endregion
        }

		/// <summary>
		///  发站用户站内手机短消息
		/// </summary>
		/// <param name="Sender">发送者用户名</param>
		/// <param name="RecipientMobileNo">接受者手机号码,可用逗号相隔多人</param>
		/// <param name="Content">短消息内容</param>
		/// <param name="Sendtime">短消息发送时间</param>
		/// <param name="RepeatTimes">短消息重复发送次数</param>
		/// <param name="RepeatPeriod">重复发送周期,以分钟为单位</param>
		/// <returns>返回执行代码 1 正常 2 错误</returns>
        public static int SaveMobileMsgToBuffer(string Sender, string RecipientMobileNo, string Content, DateTime Sendtime, int RepeatTimes, int RepeatPeriod)
        {
            Database data = new Database();

            #region 存消息至数据库,返回MsgID
            SqlParameter[] prams1 = {
										data.MakeInParam("@Sender",    SqlDbType.VarChar, 50, Sender),
										data.MakeInParam("@RecipientMobileNo",   SqlDbType.VarChar, 255, RecipientMobileNo),
										data.MakeInParam("@Content",   SqlDbType.VarChar, 255, Content),	
										data.MakeInParam("@Sendtime",   SqlDbType.DateTime, 30, Sendtime),
										data.MakeInParam("@RepeatTimes", SqlDbType.Int, 4,RepeatTimes),
										data.MakeInParam("@RepeatPeriod", SqlDbType.Int, 4,RepeatPeriod)						
									};
            try
            {
                data.RunProc("SP_SMS_SaveMobileMsgToBuffer", prams1);
                return 1;
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                throw new Exception("存消息至数据库出错!", ex);
            }
            #endregion
        }
		
        /// <summary>
		/// 发送短消息
		/// </summary>
		/// <param name="sender">发送者用户名</param>
		/// <param name="receivers">接受者用户名,可用逗号相隔多人</param>
		/// <param name="msg">短消息内容</param>
		/// <param name="type">短消息类型 1为站内消息 2为手机短讯 3为站外手机(取mobileno)</param>
		/// <param name="sendtime">短消息发送时间</param>
		/// <param name="mobileno">如果是站外用户时用。表示站外用户的手机号</param>
		/// <param name="repeattimes">如果是手机短讯时用。表示此条讯息的重复发送次数</param>
		/// <param name="repeattimes">如果是手机短讯时用。表示此条讯息的重复发送时间间隔(以分钟为单位)</param>
		/// <returns>返回操作结束代码</returns>
        public int SendMsg(string sender, string recipients, string msg, int type, DateTime sendtime, string mobileno, int repeattimes, int repeatperiod)
        {
            int RtnCode = 1;
            //去除最后一位的逗号,并替换全角至半角
            if (recipients.EndsWith(",")) recipients = recipients.Substring(0, recipients.Length - 1);
            {
                recipients = recipients.Replace(",", ",");
            }
            switch (type)
            {
                case 1://站内用户的站内短讯
                    SendLocalMsg(sender, recipients, msg, sendtime);
                    return RtnCode;

                case 2: //站内用户的手机短讯
                    string MobileNoStr = GetMobileNoByUsername(recipients);
                    RtnCode = SaveMobileMsgToBuffer(sender, MobileNoStr, msg, sendtime, repeattimes, repeatperiod);
                    return RtnCode;

                case 3: //站外用户的手机短讯
                    RtnCode = SaveMobileMsgToBuffer(sender, mobileno, msg, sendtime, repeattimes, repeatperiod);
                    return RtnCode;

                default:
                    return RtnCode;
            }
        }

		#region 根据用户名字符串获取手机号码字符串
		/// <summary>
		/// 根据用户名字符串获取手机号码字符串
		/// <param name="Username">用户名字符串,用逗号相隔</param>
		/// <returns>返回手机字符串</returns>
		/// </summary>
        public string GetMobileNoByUsername(string Username)
        {
            string MobileNoStr = "";
            Database data = new Database();
            SqlParameter[] prams = {
									   data.MakeInParam("@UserNameStr",    SqlDbType.VarChar, 3000, Username),
									   data.MakeOutParam("@MobileNoStr", SqlDbType.VarChar, 3000)
			                      };
            try
            {
                data.RunProc("SP_SMS_GetMobileNoByUsername", prams);
                MobileNoStr = prams[1].Value.ToString();
                return MobileNoStr;
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                throw new Exception("根据用户名字符串获取手机号码字符串出错!", ex);
            }
            finally
            {
                data = null;
            }
        }
		#endregion

		/// <summary>
		/// 删除一组短讯
		/// </summary>
		/// <param name="MsgIDS">消息ID的连接字符串,用逗号相隔开</param>
        public bool MsgDelete(string MsgIDS)
        {
            Database data = new Database();
            SqlParameter[] prams = {
									   data.MakeInParam("@MsgIDS",   SqlDbType.VarChar,4000, MsgIDS)
								   };
            try
            {
                data.RunProc("SP_SMS_DelMsg", prams);
                data = null;
                return true;
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                return false;
            }
        }
	}
}

分享到:
评论

相关推荐

    电信设备-具有自动发出讯息功能的移动通讯装置以及自动发出讯息的方法.zip

    "电信设备-具有自动发出讯息功能的移动通讯装置以及自动发出讯息的方法"这个主题聚焦于移动设备的一项高级特性——自动发送消息功能。这项技术对于日常生活和商业运营具有广泛的应用价值,例如紧急通知、定时提醒、...

    人工智能时代“媒介即讯息”再审视.pdf

    标题“人工智能时代‘媒介即讯息’再审视”与描述“人工智能时代‘媒介即讯息’再审视”表明了本文的主旨是针对传播学经典理论“媒介即讯息”在当前人工智能时代背景下的重新审视。该理论由加拿大传播学家麦克卢汉...

    电子功用-可收发来电讯息的通讯装置及其方法

    这里提到的“可收发来电讯息”指的是装置具备双向通信能力,不仅能接收到外部的信息(如电话、短信),还能主动发送信息出去。在现代通信技术中,这一功能广泛应用于手机、智能手表、个人电脑以及其他物联网设备。 ...

    电信设备-半导体设备通信标准的讯息交换装置与讯息交换方法.zip

    2. **讯息交换装置**:这类装置通常包含接口电路、控制器和物理层组件。接口电路负责将设备内部的数据转化为适合通信协议的信号;控制器管理通信过程,包括数据传输的启动、停止、错误检测和校正;物理层组件则负责...

    电子功用-应用电子表手势之讯息交换系统

    【电子功用-应用电子表手势之讯息交换系统】是一个专题,主要探讨的是如何利用电子设备,特别是电子表,通过特定的手势交互实现信息的高效、便捷交换。在这个系统中,电子表不再仅仅是一个时间显示工具,而是演变成...

    华泰项目短号码传播方案v3_0.ppt

    手机短信作为最直接的宣传方式,将向全国华泰用户发送短号码开通的信息。同时,配合一线城市的交通台广播宣传,确保信息能够触及到尽可能广泛的受众。此外,平面媒体和网络媒体的新闻稿发布,也为短号码的宣传...

    手机通讯录安卓课程设计.docx

    在本课程设计中,我们将设计一款能够使用的手机通讯录软件,实现简洁、实用的操作界面,显示所有联系人的列表,增加联系人、删除联系人、修改联系人、呼叫联系人、发送短信、邮件至联系人等功能。 系统设计中,我们...

    科技学院OA系统的设计与实现论文.doc

    该系统采用结构化与原型法结合的系统开发方法,实现了用户登录、用户注册、工作日志、系统管理、会议管理、个人通讯录、短消息发送、公告管理等功能。 知识点1:办公自动化(Office Automation) 办公自动化...

    C++Builder处理Windows讯息

    Windows操作系统是一个基于消息驱动的系统,这意味着应用程序通过处理系统发送的消息来响应用户交互和系统事件。消息是系统中不同对象间通信的手段,例如鼠标移动、按键按下或窗口大小变化,都会触发相应的消息。...

    类似MSN Messages的POP讯息框

    标题中的“类似MSN Messages的POP讯息框”指的是在计算机通信和网络应用中,一种模拟微软MSN Messenger(现已被Skype取代)消息提示效果的POP(Point of Presence)消息框。这种消息框通常用于实现即时通讯软件或者...

    用Winsock 来做到点对点的Client Server 讯息互换的程式

    "用Winsock 来做到点对点的Client Server 讯息互换的程式"这个标题揭示了我们要探讨的核心技术——使用Winsock API来实现P2P(点对点)通信。Winsock是Windows操作系统提供的一个接口,允许程序员编写TCP/IP协议的...

    讯息发布–子网站发布讯息Step1.pdf

    【标题】"讯息发布–子网站发布讯息Step1.pdf"主要介绍的是一个关于在子网站上发布信息的步骤,特别关注了消息发布的初步流程。这个文档可能是一份操作指南,旨在帮助用户或者管理员有效地在子网站上分享和传播信息...

    C#简易微信,socket编程(Visual Studio)

    在C#中,可以使用`System.Net.Sockets.TcpClient`类创建客户端Socket连接到服务器,然后将登录信息封装成数据包并通过`NetworkStream`发送。服务器端接收到数据后解包验证,如果验证成功则返回确认信息。 5. **消息...

    MT6227驱动及软件

    · 讯息 : 你可以通过此功能直接在电网阅读,编辑和发送SMS及EMS.另外, 你亦可在在电网上设立个人档案并把所有讯息分类. · 设定 : 此功能包含了系统的设定及原厂讯息设定.用户也可自行设定从其他软件提取联络...

    常见的HTTP错误讯息中文解读

    这类错误通常表明请求存在问题,可能是由于客户端发送的请求格式不正确、未授权或被拒绝等原因导致。 - **400 BadRequest**: 请求无效或无法被服务器理解。这可能是因为请求中包含语法错误,或者请求的资源格式无法...

    学习电子商务的讯息战网路行销.ppt

    "学习电子商务的讯息战网路行销.ppt" 电子商务的讯息战网路行销可以被定义为在互联网上进行的营销活动,通过互联网平台来达到营销目标。该领域涵盖了多个方面,包括网络营销、电子商务、传统营销与网络营销的比较、...

    海洋cms影视管理系统v11.3 快速架设海量视频讯息网站+模板众多插件齐全

    海洋影视管理系统(seacms,海洋cms)是一套专为不同需求的站长而设计的视频点播系统,灵活,方便,人性化设计简单易用是最大的特色,是快速架设视频网站首选,只需5分钟即可建立一个海量的视频讯息的行业网站。...

Global site tag (gtag.js) - Google Analytics