本發(fā)明涉及互聯(lián)網(wǎng)移動(dòng)端應(yīng)用開發(fā)領(lǐng)域,具體是涉及一種發(fā)送彩色彈幕的方法及系統(tǒng)。
背景技術(shù):
在直播app(application,應(yīng)用)中,經(jīng)常需要發(fā)送彩色彈幕,彩色彈幕相對(duì)于普通彈幕讓主播更容易注意到,很多用戶希望自己發(fā)送的彈幕能夠被主播更容易注意到,普通的彈幕都是一種顏色,主播很難集中注意力注意到用戶發(fā)的內(nèi)容。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是為了克服上述背景技術(shù)的不足,提供一種發(fā)送彩色彈幕的方法及系統(tǒng),保證了順序發(fā)送彈幕消息,新開線程,不阻塞主線程,實(shí)現(xiàn)了彩色彈幕的發(fā)送。
本發(fā)明提供一種發(fā)送彩色彈幕的方法,包括以下步驟:
判斷當(dāng)前的彈幕內(nèi)容是否只含文字和/或表情,如果否,不執(zhí)行操作;如果是,則創(chuàng)建一個(gè)串行隊(duì)列;創(chuàng)建一個(gè)異步線程;將發(fā)送彩色彈幕的代碼放在該串行隊(duì)列的異步線程中,執(zhí)行發(fā)送彩色彈幕的操作。
在上述技術(shù)方案的基礎(chǔ)上,所述執(zhí)行發(fā)送彩色彈幕的操作之前,還包括以下步驟:
s1、判斷用戶是否登錄,如果是,則執(zhí)行發(fā)送彩色彈幕的操作;如果否,則不執(zhí)行發(fā)送彩色的彈幕,直接提示用戶登錄;
s2、判斷當(dāng)前點(diǎn)擊發(fā)送按鈕的時(shí)間-上一次點(diǎn)擊發(fā)送按鈕的時(shí)間-指定時(shí)間間隔是否大于零,如果是,則允許發(fā)送彩色彈幕;如果否,則不允許發(fā)送彩色彈幕;
s3、如果步驟s2中允許發(fā)送彩色彈幕,進(jìn)一步判斷用戶當(dāng)前發(fā)送內(nèi)容是否與上一次發(fā)送內(nèi)容一致,如果一致,使用彈框提示用戶不要發(fā)送相同的內(nèi)容;如果不一致,則允許用戶發(fā)送。
在上述技術(shù)方案的基礎(chǔ)上,所述指定時(shí)間間隔設(shè)置為3秒。
本發(fā)明還提供一種發(fā)送彩色彈幕的系統(tǒng),該系統(tǒng)包括判斷單元、彩色彈幕發(fā)送單元,其中:
判斷單元用于:判斷當(dāng)前的彈幕內(nèi)容是否只含文字和/或表情,如果否,不執(zhí)行操作;如果是,則觸發(fā)彩色彈幕發(fā)送單元工作;
彩色彈幕發(fā)送單元用于:創(chuàng)建一個(gè)串行隊(duì)列;創(chuàng)建一個(gè)異步線程;將發(fā)送彩色彈幕的代碼放在該串行隊(duì)列的異步線程中,執(zhí)行發(fā)送彩色彈幕的操作。
在上述技術(shù)方案的基礎(chǔ)上,該系統(tǒng)還包括異常判斷單元,異常判斷單元用于:
判斷用戶是否登錄,如果是,則執(zhí)行發(fā)送彩色彈幕的操作;如果否,則不執(zhí)行發(fā)送彩色的彈幕,直接提示用戶登錄;
判斷當(dāng)前點(diǎn)擊發(fā)送按鈕的時(shí)間-上一次點(diǎn)擊發(fā)送按鈕的時(shí)間-指定時(shí)間間隔是否大于零,如果是,則允許發(fā)送彩色彈幕;如果否,則不允許發(fā)送彩色彈幕;
如果允許發(fā)送彩色彈幕,進(jìn)一步判斷用戶當(dāng)前發(fā)送內(nèi)容是否與上一次發(fā)送內(nèi)容一致,如果一致,使用彈框提示用戶不要發(fā)送相同的內(nèi)容;如果不一致,則允許用戶發(fā)送。
在上述技術(shù)方案的基礎(chǔ)上,所述指定時(shí)間間隔設(shè)置為3秒。
與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)如下:
(1)本發(fā)明判斷當(dāng)前的彈幕內(nèi)容是否只含文字和/或表情,如果否,不執(zhí)行操作;如果是,則創(chuàng)建一個(gè)串行隊(duì)列;創(chuàng)建一個(gè)異步線程;將發(fā)送彩色彈幕的代碼放在該串行隊(duì)列的異步線程中,執(zhí)行發(fā)送彩色彈幕的操作。在設(shè)定的彩色彈幕服務(wù)器上,為了避免有些特殊字符或者文案不能變?yōu)椴噬虼讼薅宋淖趾捅砬榈姆?hào),才能發(fā)送彩色彈幕,判斷彩色彈幕的是否符合規(guī)則,提高了用戶體驗(yàn);使用異步隊(duì)列的過程,異步會(huì)新建線程,保證不足賽主線程的操作,在串行隊(duì)列中操作,保證每個(gè)線程中的彈幕發(fā)送的過程有先后,這樣既有順序,又可以不阻塞主線程,實(shí)現(xiàn)了彩色彈幕的發(fā)送。
(2)本發(fā)明實(shí)現(xiàn)了彩色彈幕的發(fā)送,可以向發(fā)彩色彈幕的權(quán)限收取費(fèi)用,也可以讓某些會(huì)員用戶或者vip用戶,試用一種彩色彈幕方案,讓會(huì)員用戶或者付費(fèi)比較多的用戶擁有這個(gè)權(quán)限,促進(jìn)付費(fèi),增加經(jīng)濟(jì)效益。
(3)本發(fā)明在發(fā)送彩色彈幕前進(jìn)行異常判斷,引入了判斷條件,判斷用戶是否登錄行為,對(duì)于未登錄用戶,讓用戶提示用戶去登錄,增加整個(gè)app的登錄的用戶量,提高用戶粘性。
(4)本發(fā)明在發(fā)送彩色彈幕前進(jìn)行異常判斷,使用了發(fā)言時(shí)間判斷,能夠有效避免某一個(gè)用戶在單位時(shí)間內(nèi)刷屏,減少管理的工作量。
(5)本發(fā)明在發(fā)送彩色彈幕前進(jìn)行異常判斷,判斷是否兩次發(fā)送相同的內(nèi)容,禁止用戶發(fā)送重復(fù)的內(nèi)容,對(duì)于提高app的體驗(yàn)至關(guān)重要。
附圖說明
圖1是本發(fā)明實(shí)施例中發(fā)送彩色彈幕的方法的流程圖。
具體實(shí)施方式
下面結(jié)合附圖及具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步的詳細(xì)描述。
參見圖1所示,本發(fā)明實(shí)施例提供一種發(fā)送彩色彈幕的方法,包括以下步驟:
s1、判斷用戶是否登錄,如果是,則執(zhí)行發(fā)送彩色彈幕的操作;如果否,則不執(zhí)行發(fā)送彩色的彈幕,直接提示用戶登錄;
s2、判斷當(dāng)前點(diǎn)擊發(fā)送按鈕的時(shí)間-上一次點(diǎn)擊發(fā)送按鈕的時(shí)間-指定時(shí)間間隔是否大于零,如果是,則允許發(fā)送彩色彈幕;如果否,則不允許發(fā)送彩色彈幕;指定時(shí)間間隔可以設(shè)置為3秒;
s3、如果步驟s2中允許發(fā)送彩色彈幕,進(jìn)一步判斷用戶當(dāng)前發(fā)送內(nèi)容是否與上一次發(fā)送內(nèi)容一致,如果一致,使用彈框提示用戶不要發(fā)送相同的內(nèi)容;如果不一致,則允許用戶發(fā)送;
s4、判斷當(dāng)前的彈幕內(nèi)容是否只含文字和/或表情,如果否,不執(zhí)行操作;如果是,則創(chuàng)建一個(gè)串行隊(duì)列;創(chuàng)建一個(gè)異步線程;將發(fā)送彩色彈幕的代碼放在該串行隊(duì)列的異步線程中,執(zhí)行發(fā)送彩色彈幕的操作。
本發(fā)明實(shí)施例還提供一種發(fā)送彩色彈幕的系統(tǒng),該系統(tǒng)包括判斷單元、彩色彈幕發(fā)送單元,其中:
判斷單元用于:判斷當(dāng)前的彈幕內(nèi)容是否只含文字和/或表情,如果否,不執(zhí)行操作;如果是,則觸發(fā)彩色彈幕發(fā)送單元工作;
彩色彈幕發(fā)送單元用于:創(chuàng)建一個(gè)串行隊(duì)列;創(chuàng)建一個(gè)異步線程;將發(fā)送彩色彈幕的代碼放在該串行隊(duì)列的異步線程中,執(zhí)行發(fā)送彩色彈幕的操作。
該系統(tǒng)還可以包括異常判斷單元,異常判斷單元用于:
判斷用戶是否登錄,如果是,則執(zhí)行發(fā)送彩色彈幕的操作;如果否,則不執(zhí)行發(fā)送彩色的彈幕,直接提示用戶登錄;
判斷當(dāng)前點(diǎn)擊發(fā)送按鈕的時(shí)間-上一次點(diǎn)擊發(fā)送按鈕的時(shí)間-指定時(shí)間間隔是否大于零,如果是,則允許發(fā)送彩色彈幕;如果否,則不允許發(fā)送彩色彈幕;指定時(shí)間間隔可以設(shè)置為3秒;
如果允許發(fā)送彩色彈幕,進(jìn)一步判斷用戶當(dāng)前發(fā)送內(nèi)容是否與上一次發(fā)送內(nèi)容一致,如果一致,使用彈框提示用戶不要發(fā)送相同的內(nèi)容;如果不一致,則允許用戶發(fā)送。
下面通過一個(gè)具體案例進(jìn)行說明。
步驟一、發(fā)送彩色彈幕前的異常判斷
(1)用戶選擇彩色彈幕按鈕,第一步是判斷用戶是否登錄,判斷用戶是否登錄的語句是[dyusermangershareinstant]islogin],這條語句中的dyusermanger是我們自己創(chuàng)建的一個(gè)用戶管理的類,其中,shareinstant是這個(gè)用戶管理類獲取一個(gè)用戶管理對(duì)象的方法,[dyusermangershareinstant]獲取到一個(gè)用戶管理對(duì)象,這個(gè)獲取的用戶管理對(duì)象就可以使用islogin函數(shù)判斷一個(gè)用戶是否登錄了,如果用戶已經(jīng)登錄,直接返回yes,這個(gè)判斷語句為真,執(zhí)行發(fā)送彩色彈幕的操作;如果返回為no,就不執(zhí)行發(fā)送彩色的彈幕,直接提示用戶登錄;
(2)_messagecd=當(dāng)前點(diǎn)擊發(fā)送按鈕的時(shí)間-上一次點(diǎn)擊發(fā)送按鈕的時(shí)間-指定時(shí)間間隔,判斷if(_messagecd>0),如果判斷成立,messagecd>0,則允許發(fā)送彩色彈幕;如果否,則說明用戶發(fā)言的時(shí)間過短,不允許發(fā)送彩色彈幕;指定時(shí)間間隔可以人為配置,例如:可以設(shè)置為3秒;
如果if(_messagecd>0)判斷不成立,使用函數(shù)[[uialertviewalloc]initwithtitle:創(chuàng)建一個(gè)彈框并且顯示出來,其中函數(shù)[uialertviewalloc]是創(chuàng)建一個(gè)彈框的過程,為彈框分配內(nèi)存,initwithtitle是為這個(gè)彈框設(shè)置提示內(nèi)容,一般的提示內(nèi)容是:你的發(fā)言時(shí)間過短,同時(shí)直接return,終止函數(shù)的執(zhí)行,不讓發(fā)言;
(3)如果步驟(2)中允許發(fā)送彩色彈幕,可以發(fā)言,使用if(thesamecontent),進(jìn)一步判斷用戶當(dāng)前發(fā)送內(nèi)容是否與上一次發(fā)送內(nèi)容一致,如果一致,使用彈框提示用戶不要發(fā)送相同的內(nèi)容;如果不一致,則允許用戶發(fā)送。
thesamecontent是一個(gè)bool值,thesamecontent的獲得過程如下:用戶發(fā)送一條彈幕,記錄發(fā)送彈幕的內(nèi)容為oldsendcontent,用戶再次發(fā)送彈幕的內(nèi)容為willsendcontent,使用oc語言的方法,isequaltostring,比較oldsendcontent和willsendcontent是否相同,如果上一次發(fā)送的彈幕內(nèi)容和這一次的彈幕內(nèi)容相同,說明用戶在發(fā)送相同的內(nèi)容,thesamecontent置為yes,否則thesamecontent置為no。
步驟二、發(fā)送彩色彈幕
(1)判斷彩色彈幕是否真的符合彩色彈幕的要求
在我們?cè)O(shè)定的彩色彈幕服務(wù)器上,為了避免有些特殊字符或者文案不能變?yōu)椴噬虼讼薅宋淖趾捅砬榈姆?hào)才能發(fā)送彩色彈幕,判斷彩色彈幕的是否符合規(guī)則,是使用danmucontainonlyspaceandemoji函數(shù)判斷,這個(gè)函數(shù)的編寫過程是:
1.1)使用oc語言的自帶的系統(tǒng)函數(shù)stringbyreplacingoccurrencesofstring將彈幕內(nèi)容的@””(即oc語言的空格)替換為@””(即oc語言中不包含任何內(nèi)容的字符串);
1.2)使用函數(shù)語句regularexpressionwithpattern:@\\[emot+\\:+[a-za-z0-9]+\\],判斷當(dāng)前的彈幕內(nèi)容是否只含文字和/或表情,其中這個(gè)函數(shù)regularexpressionwithpattern是系統(tǒng)的正則表達(dá)式,@\\[emot+\\:+[a-za-z0-9]+\\]是一個(gè)正則表達(dá)式的判斷條件;
1.3)上述正則表達(dá)式就可以判斷當(dāng)前的彈幕內(nèi)容是否只含文字和/或表情,如果是只含文字和/或表情,返回為yes;否則返回為no。
(2)如果步驟(1)中判定只含文字和/或表情,就可以執(zhí)行發(fā)送彈幕內(nèi)容的操作,發(fā)送彩色彈幕的過程是:-(void)senddanmu:(nsstring*)danmucolor:(int)colorisnobletype:(bool)isnobletype函數(shù)實(shí)現(xiàn)的,這個(gè)函數(shù)的返回值是void,即沒有返回值,其中有4個(gè)參數(shù),參數(shù)danmu的類型是字符串類型的,代表的是彈幕內(nèi)容,參數(shù)color是發(fā)送的彩色彈幕的顏色,color是用戶選擇的彈幕顏色值,再講選擇的顏色值轉(zhuǎn)化為數(shù)字傳給后臺(tái),isnobletype是bool型的,意思是這個(gè)彈幕是不是貴族彈幕,如果當(dāng)前的登錄用戶的身份是貴族,那么isnobletype=y(tǒng)es,否則為no,這個(gè)函數(shù)的編寫過程如下:
2.1)使用函數(shù)dispatch_queue_create(dy_socket_queue,dispatch_queue_serial),創(chuàng)建一個(gè)串行隊(duì)列,dy_socket_queue是創(chuàng)建的隊(duì)列的名字,每個(gè)隊(duì)列都有一個(gè)名字,dispatch_queue_serial是代表蘋果語言的串行隊(duì)列;
2.2)使用函數(shù)dispatch_async,創(chuàng)建一個(gè)異步線程;
2.3)發(fā)送彈幕的代碼放在這個(gè)串行隊(duì)列異步線程中進(jìn)行,發(fā)送彈幕的代碼是sendmsg(danmu,color,0),其中這幾個(gè)函數(shù)是上述步驟中傳入進(jìn)來的,這個(gè)函數(shù)是sendmsg是公司為了提高彈幕發(fā)送的安全性封裝的sdk,供應(yīng)用層調(diào)用的。
綜上所述,本發(fā)明實(shí)施例通過對(duì)彩色彈幕的異常判斷,能夠有效的提高程序的可用性,減少網(wǎng)管的壓力;判斷當(dāng)前的彈幕內(nèi)容是否只含文字和/或表情,如果否,不執(zhí)行操作;如果是,則創(chuàng)建一個(gè)串行隊(duì)列;創(chuàng)建一個(gè)異步線程;將發(fā)送彩色彈幕的代碼放在該串行隊(duì)列的異步線程中,執(zhí)行發(fā)送彩色彈幕的操作。保證了順序發(fā)送彈幕消息,新開線程,不阻塞主線程,實(shí)現(xiàn)了彩色彈幕的發(fā)送。
本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明實(shí)施例進(jìn)行各種修改和變型,倘若這些修改和變型在本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則這些修改和變型也在本發(fā)明的保護(hù)范圍之內(nèi)。
說明書中未詳細(xì)描述的內(nèi)容為本領(lǐng)域技術(shù)人員公知的現(xiàn)有技術(shù)。