藍(lán)牙連接以及協(xié)議數(shù)據(jù)解析

1.聲明屬性以及引入相關(guān)庫

NSMutableArray *pers;//這個必須有,用于記錄搜索到的設(shè)備徐块,沒有導(dǎo)致連接不上

manager = [[CBCentralManager alloc]initWithDelegate:self queue:dispatch_get_main_queue()];


2.代理方法

-(void)centralManagerDidUpdateState:(CBCentralManager *)central{

switch (central.state) {

case CBCentralManagerStateUnknown:

NSLog(@">>>CBCentralManagerStateUnknown");

break;

case CBCentralManagerStateResetting:

NSLog(@">>>CBCentralManagerStateResetting");

break;

case CBCentralManagerStateUnsupported:

NSLog(@">>>CBCentralManagerStateUnsupported");

break;

case CBCentralManagerStateUnauthorized:

NSLog(@">>>CBCentralManagerStateUnauthorized");

break;

case CBCentralManagerStatePoweredOff:

NSLog(@">>>CBCentralManagerStatePoweredOff");

break;

case CBCentralManagerStatePoweredOn:{

NSLog(@">>>CBCentralManagerStatePoweredOn");

//開始掃描周圍的外設(shè)

/*

第一個參數(shù)nil就是掃描周圍所有的外設(shè)捞蛋,掃描到外設(shè)后會進(jìn)入

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI;

*/

//? ? ? ? ? ? NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber? numberWithBool:YES], CBCentralManagerScanOptionAllowDuplicatesKey, nil];

[manager scanForPeripheralsWithServices:nil options:nil];

hudView.hidden=NO;

hudView.contentLab.text=@"開始掃描設(shè)備";

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

hudView.hidden=YES;

});

[manager scanForPeripheralsWithServices:nil options:nil];

break;

}

default:

break;

}

}

//掃描到設(shè)備會進(jìn)入方法

-(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI{

NSLog(@"當(dāng)掃描到設(shè)備:%@",peripheral.name);

//? ? [peripherals addObject:peripheral];

//? ? [tableview reloadData];

//接下來可以連接設(shè)備

// 這個是我的設(shè)備名著榴,根據(jù)實(shí)際情況啤挎,修改

if ([peripheral.name hasPrefix:@"ABG"]){

/*

一個主設(shè)備最多能連7個外設(shè)饲嗽,每個外設(shè)最多只能給一個主設(shè)備連接,連接成功炭玫,失敗,斷開會進(jìn)入各自的委托

- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral;//連接外設(shè)成功的委托

- (void)centralManager:(CBCentralManager *)central didFailToConnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error;//外設(shè)連接失敗的委托

- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error;//斷開外設(shè)的委托

*/

//找到的設(shè)備必須持有它貌虾,否則CBCentralManager中也不會保存peripheral吞加,那么CBPeripheralDelegate中的方法也不會被調(diào)用!尽狠!

manager.delegate=self;

[pers addObject:peripheral];

self.per=peripheral;

//連接設(shè)備

[manager connectPeripheral:peripheral options:nil];

hudView.hidden=NO;

hudView.contentLab.text=[NSString stringWithFormat:@"掃描到設(shè)備%@,并開始連接",peripheral.name];

}

}

//連接到Peripherals-成功

- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral

{

NSLog(@">>>連接到名稱為(%@)的設(shè)備-成功",peripheral.name);

//設(shè)置的peripheral委托CBPeripheralDelegate

//@interface ViewController : UIViewController

[peripheral setDelegate:self];

//掃描外設(shè)Services衔憨,成功后會進(jìn)入方法:-(void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error{

[peripheral discoverServices:nil];

//? ? self.nameLab.text=peripheral.name;

//? ? self.contactStateLab.text=@"鏈接中";

hudView.hidden=NO;

hudView.contentLab.text=[NSString stringWithFormat:@"鏈接設(shè)備%@成功,",peripheral.name];

}

//連接到Peripherals-失敗

-(void)centralManager:(CBCentralManager *)central didFailToConnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error

{

NSLog(@">>>連接到名稱為(%@)的設(shè)備-失敗,原因:%@",[peripheral name],[error localizedDescription]);

//自定義的mbprogress

hudView.hidden=NO;

hudView.contentLab.text=[NSString stringWithFormat:@"鏈接設(shè)備%@失敗,",peripheral.name];

}

//Peripherals斷開連接

- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error{

NSLog(@">>>外設(shè)連接斷開連接 %@: %@\n", [peripheral name], [error localizedDescription]);

//? ? self.contactStateLab.text=@"鏈接斷開";

//這句話確保了能保持連接,斷了重新連接

[manager connectPeripheral:peripheral options:nil];

hudView.contentLab.text=[NSString stringWithFormat:@"設(shè)備%@鏈接斷開",peripheral.name];

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

hudView.hidden=YES;

});

}

//掃描到Services

-(void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error{

//? NSLog(@">>>掃描到服務(wù):%@",peripheral.services);

if (error)

{

NSLog(@">>>Discovered services for %@ with error: %@", peripheral.name, [error localizedDescription]);

return;

}

for (CBService *service in peripheral.services) {

NSLog(@"%@",service.UUID);

//掃描每個service的Characteristics袄膏,掃描到后會進(jìn)入方法: -(void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error

/這個1808是我的設(shè)備的入口践图,需根據(jù)實(shí)際改變

if ([service.UUID.UUIDString isEqualToString:@"1808"]) {

[peripheral discoverCharacteristics:nil forService:service];

}

//? ? ? ? if ([service.UUID.UUIDString isEqualToString:@"180A"]) {

//? ? ? ? ? ? [peripheral discoverCharacteristics:nil forService:service];

//? ? ? ? }

//? ? ? ? if ([service.UUID.UUIDString isEqualToString:@"180F"]) {

//? ? ? ? ? ? [peripheral discoverCharacteristics:nil forService:service];

//? ? ? ? }

}

}

//掃描到Characteristics

-(void) peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error{

NSString *name=[NSString stringWithFormat:@"發(fā)現(xiàn)特征的服務(wù):%@ (%@)",service.UUID.data ,service.UUID];

NSLog(@"%@",name);

for (CBCharacteristic *c in service.characteristics) {

//? ? ? ? [self updateLog:[NSString stringWithFormat:@"特征 UUID: %@ (%@)",c.UUID.data,c.UUID]];

NSLog(@"%@",c.UUID);

//? ? ? ? if ([c.UUID isEqual:[CBUUID UUIDWithString:@"FF01"]]) {

////? ? ? ? ? ? _writeCharacteristic = c;

//? ? ? ? }

//

if ([c.UUID isEqual:[CBUUID UUIDWithString:@"FFF4"]]) {

chara=c;

[peripheral readValueForCharacteristic:c];

[peripheral setNotifyValue:YES forCharacteristic:c];

}

//? ? ? ? if ([c.UUID isEqual:[CBUUID UUIDWithString:@"FF04"]]) {

//? ? ? ? ? ? [peripheral readValueForCharacteristic:c];

//? ? ? ? }

//

//? ? ? ? if ([c.UUID isEqual:[CBUUID UUIDWithString:@"FF05"]]) {

//? ? ? ? ? ? [peripheral readValueForCharacteristic:c];

//? ? ? ? ? ? [peripheral setNotifyValue:YES forCharacteristic:c];

//? ? ? ? }

//

//? ? ? ? if ([c.UUID isEqual:[CBUUID UUIDWithString:@"FFA1"]]) {

//? ? ? ? ? ? [peripheral readRSSI];

//? ? ? ? }

//? ? ? ? [_nCharacteristics addObject:c];

}

}

-(void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error{

//打印出characteristic的UUID和值

//!注意,value的類型是NSData沉馆,具體開發(fā)時码党,會根據(jù)外設(shè)協(xié)議制定的方式去解析數(shù)據(jù)

//該藍(lán)牙協(xié)議是返回?cái)?shù)值是ascii碼

//? ? NSLog(@"characteristic uuid:%@? value:%@",characteristic.UUID,characteristic.value);

//? ? NSData * data = characteristic.value;

//? ? //將接收到的十六進(jìn)制數(shù)據(jù) 轉(zhuǎn)成 十六進(jìn)制字符串

//? ? Byte *byte? ? = (Byte *)[data bytes];

//? ? // 取出其中用用的兩位

//? ? Byte b[]? ? ? = {byte[1],byte[2]};

//? ? // 在轉(zhuǎn)化成NSData

//? ? NSData *adata = [[NSData alloc] initWithBytes:b length:sizeof(b)];

//? ? NSLog(@"adata = %@", adata);

//? ? // 轉(zhuǎn)化成字符串

//? ? NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

//? ? NSLog(@"%@",str);

NSData * data = characteristic.value;

Byte * resultByte = (Byte *)[data bytes];

//

for(int i=0;i<[data length];i++){

printf("testByteFF02[%d] = %d\n",i,resultByte[i]);

//? ? ? ? NSString *string = [NSString stringWithFormat:@"%c",resultByte[i]];

//? ? ? ? printf("testByteFF02[%d] = %@\n",i,string);

if (resultByte[3]==0x00&&resultByte[4]==0x00&&resultByte[5]==0x00&&resultByte[6]==0x01) {

NSLog(@"停止測試");

hudView.hidden=NO;

hudView.contentLab.text=@"停止測量";

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

hudView.hidden=YES;

});

}

if (resultByte[7]==0xcf) {

NSLog(@"停止測試");

hudView.hidden=NO;

hudView.contentLab.text=@"停止測量";

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

hudView.hidden=YES;

});

}

int asc=resultByte[i];

if (asc==0xfe) {

int num;

if (resultByte[2]==0) {

num=resultByte[1];

}else{

num=resultByte[2];

}

NSString *aString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

NSLog(@"測量中,當(dāng)前值:%d",num);

if(num!=254){

hudView.hidden=NO;

hudView.contentLab.text=[NSString stringWithFormat:@"當(dāng)前測量值%d",num];

}

//? ? ? ? ? ? self.textview.text=[NSString stringWithFormat:@"測量中,當(dāng)前值:%d",num];

}

if (asc==0xfd) {

//? ? ? ? ? ? Byte? byte1=resultByte[2];

//? ? ? ? ? ? int num1=[self hBytesToInt:];

[manager cancelPeripheralConnection:peripheral];

UInt16 asc1=resultByte[3];

UInt16 asc2=resultByte[4];

NSString *str= [NSString stringWithFormat:@"%c%c",asc2,asc1];

NSString *num= [NSString stringWithFormat:@"%ld",strtoul([str UTF8String],0,16)];

//? ? ? ? ? ? NSLog(@"測量結(jié)束,收縮壓%@",str);

NSLog(@"測量結(jié)束,收縮壓%@",num);

UInt16 asc3=resultByte[5];

UInt16 asc4=resultByte[6];

NSString *str2= [NSString stringWithFormat:@"%c%c",asc4,asc3];

NSString *num2= [NSString stringWithFormat:@"%ld",strtoul([str2 UTF8String],0,16)];

//? ? ? ? ? ? NSLog(@"測量結(jié)束,收縮壓%@",str);

NSLog(@"測量結(jié)束,舒張壓%@",num2);

UInt16 asc5=resultByte[7];

UInt16 asc6=resultByte[8];

NSString *str3= [NSString stringWithFormat:@"%c%c",asc6,asc5];

NSString *num3= [NSString stringWithFormat:@"%ld",strtoul([str3 UTF8String],0,16)];

//? ? ? ? ? ? NSLog(@"測量結(jié)束,收縮壓%@",str);

if ([num isEqualToString:@"0"]||[num2 isEqualToString:@"0"]||[num3 isEqualToString:@"0"]) {

hudView.hidden=NO;

hudView.contentLab.text=@"測量異常";

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

hudView.hidden=YES;

});

return;

}

if ([num isEqualToString:hasGaoya]&&[num2 isEqualToString:hasDiya]&&[num3 isEqualToString:hasXinglu]) {

return;

}else{

hasGaoya=num;

hasDiya=num2;

hasXinglu=num3;

hudView.hidden=NO;

hudView.contentLab.text=[NSString stringWithFormat:@"測量結(jié)束,高壓:%@;低壓:%@,心率:%@",num,num2,num3];

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

hudView.hidden=YES;

});

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];

HomeBloodSCell *bloodScell=[mytab cellForRowAtIndexPath:indexPath];

bloodScell.gaoyaLab.text=num;

bloodScell.diyaLab.text=num2;

bloodScell.xingluLab.text=num3;

NSLog(@"測量結(jié)束,心率%@",num3);

SelfDataModel *selfdata=[SelfDataModel returnModelBySelectFMDB];

NSDate *date=[NSDate date];

NSDateFormatter *form=[[NSDateFormatter alloc]init];

[form setDateFormat:@"YYYY-MM-dd HH:mm:ss"];

NSString *datestr=[form stringFromDate:date ];

NSString *url=[[HJInterfaceManager sharedInstance]uploadXueya];

NSMutableDictionary *mdic=[[NSMutableDictionary alloc]init];

mdic[@"userId"]=selfdata.idNum;

mdic[@"dbp"]=num2;

mdic[@"sbp"]=num;

mdic[@"pulse"]=num3;

mdic[@"measureTime"]=datestr;

[HJHttpManager PostRequestWithUrl:url param:mdic finish:^(NSData *data) {

NSDictionary *dic=(NSDictionary *)data;

if([dic[@"status"] isEqualToString:@"S"]){

[MBProgressHUD showSuccess:@"數(shù)據(jù)上傳成功"];

HomeBloodSCell *cell=[mytab cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];

NSString *str=dic[@"value"][@"measurements"];

cell.statusLab.text=str;

if ([str isEqualToString:@"偏低"]) {

cell.statusLab.textColor=[UIColor colorWithHexString:@"2aa764"];

//? ? ? ? self.pointImage.transform=CGAffineTransformMakeRotation(M_PI/6);

}

if ([str isEqualToString:@"理想"]) {

cell.statusLab.textColor=[UIColor colorWithHexString:@"62c342"];

cell.statusImage.transform=CGAffineTransformMakeRotation(M_PI/2-M_PI/6);

}

if ([str isEqualToString:@"正常"]) {

cell.statusLab.textColor=[UIColor colorWithHexString:@"c9e93c"];

cell.statusImage.transform=CGAffineTransformMakeRotation(M_PI/6*5-M_PI/6);

}

if ([str isEqualToString:@"輕度"]) {

cell.statusLab.textColor=[UIColor colorWithHexString:@"ffc102"];

cell.statusImage.transform=CGAffineTransformMakeRotation(M_PI/6*7-M_PI/6);

}

if ([str isEqualToString:@"中度"]) {

cell.statusLab.textColor=[UIColor colorWithHexString:@"f78758"];

cell.statusImage.transform=CGAffineTransformMakeRotation(M_PI/2*3-M_PI/6);

}

if ([str isEqualToString:@"偏高"]) {

cell.statusLab.textColor=[UIColor colorWithHexString:@"e74c3c"];

cell.statusImage.transform=CGAffineTransformMakeRotation(M_PI/6*11-M_PI/6);

}

}else{

[MBProgressHUD showError:dic[@"message"]];

}

CDLog(@"請求成功");

} failed:^(NSError *error) {

[MBProgressHUD showError:@"請求失敗"];

}];

}

//? ? ? ? ? ? self.textview.text=[NSString stringWithFormat:@"測量結(jié)束,收縮壓%@\n\n測量結(jié)束,舒張壓%@\n\n測量結(jié)束,心率%@",num,num2,num3];

}

}

//? ? NSString *productNumber = [reciveString substringWithRange:NSMakeRange(7, 17)];

//? ? [productDefault setObject:productNumber forKey:@"productNumber"];

//? ? [productDefault synchronize];

}

//中心讀取外設(shè)實(shí)時數(shù)據(jù)

- (void)peripheral:(CBPeripheral *)peripheral didUpdateNotificationStateForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error {

if (error) {

NSLog(@"Error changing notification state: %@", error.localizedDescription);

}

// Notification has started

if (characteristic.isNotifying) {

NSString *reciveString = [NSString stringWithFormat:@"%@", [self hexadecimalString:characteristic.value]];

NSUserDefaults *productDefault = [NSUserDefaults standardUserDefaults];

//? ? NSString *productNumber = [reciveString substringWithRange:NSMakeRange(7, 17)];

[peripheral readValueForCharacteristic:characteristic];

} else { // Notification has stopped

// so disconnect from the peripheral

NSLog(@"Notification stopped on %@.? Disconnecting", characteristic);

//? ? ? ? [self updateLog:[NSString stringWithFormat:@"Notification stopped on %@.? Disconnecting", characteristic]];

[manager cancelPeripheralConnection:peripheral];

}

}

//搜索到Characteristic的Descriptors

-(void)peripheral:(CBPeripheral *)peripheral didDiscoverDescriptorsForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error{

//打印出Characteristic和他的Descriptors

NSLog(@"characteristic uuid:%@",characteristic.UUID);

for (CBDescriptor *d in characteristic.descriptors) {

NSLog(@"Descriptor uuid:%@",d.UUID);

}

}

//獲取到Descriptors的值

-(void)peripheral:(CBPeripheral *)peripheral didUpdateValueForDescriptor:(CBDescriptor *)descriptor error:(NSError *)error{

//打印出DescriptorsUUID 和value

//這個descriptor都是對于characteristic的描述德崭,一般都是字符串,所以這里我們轉(zhuǎn)換成字符串去解析

NSLog(@"characteristic uuid:%@? value:%@",[NSString stringWithFormat:@"%@",descriptor.UUID],descriptor.value);

}

#pragma mark 寫數(shù)據(jù)后回調(diào)

- (void)peripheral:(CBPeripheral *)peripheral

didWriteValueForCharacteristic:(CBCharacteristic *)characteristic

error:(NSError *)error {

if (error) {

NSLog(@"Error writing characteristic value: %@",

[error localizedDescription]);

return;

}

NSLog(@"寫入%@成功",characteristic);

[peripheral readValueForCharacteristic:characteristic];

}

//向設(shè)備寫入數(shù)據(jù)讓其停止

-(IBAction)stopBtnDown:(id)sender{

//? ? char byte[] = {0xFD,0xFD,0xFB,0xFB,0x05,0x0C,0x0D,0x0A};

Byte byte[] = {0XFD,0XFD,0XFB,0XFB,0X05,0X0C,0X0D,0X0A};

NSData * data = [NSData dataWithBytes:byte length:8];

[self.per writeValue:data forCharacteristic:chara type:CBCharacteristicWriteWithResponse];

//? ? NSString *str=@"[0xFD,0xFD,0xFB,0xFB,0x05,0x0C,0x0D,0x0A]";

//? ? NSData *data=[str dataUsingEncoding:NSUTF8StringEncoding];

//? ? [self.per writeValue:data forCharacteristic:chara type:CBCharacteristicWriteWithResponse];

}

-(IBAction)showList:(id)sender{

Byte byte[] = {0xFD,0xFD,0x07,0x07,0x07,0x07,0x0D,0x0A};

NSData * data = [NSData dataWithBytes:byte length:8];

[self.per writeValue:data forCharacteristic:chara type:CBCharacteristicWriteWithResponse];

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末揖盘,一起剝皮案震驚了整個濱河市眉厨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌兽狭,老刑警劉巖憾股,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異箕慧,居然都是意外死亡服球,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門销钝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來有咨,“玉大人,你說我怎么就攤上這事蒸健∽恚” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵似忧,是天一觀的道長渣叛。 經(jīng)常有香客問我,道長盯捌,這世上最難降的妖魔是什么淳衙? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮饺著,結(jié)果婚禮上箫攀,老公的妹妹穿的比我還像新娘。我一直安慰自己幼衰,他們只是感情好靴跛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著渡嚣,像睡著了一般梢睛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上识椰,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天绝葡,我揣著相機(jī)與錄音,去河邊找鬼腹鹉。 笑死藏畅,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的种蘸。 我是一名探鬼主播墓赴,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼竞膳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了诫硕?” 一聲冷哼從身側(cè)響起坦辟,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎章办,沒想到半個月后锉走,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡藕届,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年挪蹭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片休偶。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡梁厉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出踏兜,到底是詐尸還是另有隱情词顾,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布碱妆,位于F島的核電站肉盹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏疹尾。R本人自食惡果不足惜上忍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望纳本。 院中可真熱鬧窍蓝,春花似錦、人聲如沸繁成。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽朴艰。三九已至,卻和暖如春混移,著一層夾襖步出監(jiān)牢的瞬間祠墅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工歌径, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留毁嗦,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓回铛,卻偏偏與公主長得像狗准,于是被迫代替她去往敵國和親克锣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容