60 lines
2.0 KiB
C#
60 lines
2.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using LeanCloud.Storage;
|
|
|
|
namespace LeanCloud.Realtime {
|
|
/// <summary>
|
|
/// 位置消息
|
|
/// </summary>
|
|
public class LCIMLocationMessage : LCIMTextMessage {
|
|
/// <summary>
|
|
/// 位置
|
|
/// </summary>
|
|
public LCGeoPoint Location {
|
|
get; set;
|
|
}
|
|
|
|
internal LCIMLocationMessage() {
|
|
}
|
|
|
|
public LCIMLocationMessage(LCGeoPoint locaction) : base(null) {
|
|
Location = locaction;
|
|
}
|
|
|
|
internal override Dictionary<string, object> Encode() {
|
|
if (Location == null) {
|
|
throw new ArgumentNullException(nameof(Location));
|
|
}
|
|
Dictionary<string, object> data = base.Encode();
|
|
Dictionary<string, object> locationData = new Dictionary<string, object> {
|
|
{ MessageDataLongitudeKey, Location.Longitude },
|
|
{ MessageDataLatitudeKey, Location.Latitude }
|
|
};
|
|
data[MessageLocationKey] = locationData;
|
|
return data;
|
|
}
|
|
|
|
internal override void Decode(Dictionary<string, object> msgData) {
|
|
base.Decode(msgData);
|
|
if (msgData.TryGetValue(MessageLocationKey, out object val)) {
|
|
Dictionary<string, object> locationData = val as Dictionary<string, object>;
|
|
if (locationData == null) {
|
|
return;
|
|
}
|
|
double latitude = 0, longitude = 0;
|
|
if (locationData.TryGetValue(MessageDataLatitudeKey, out object lat) &&
|
|
double.TryParse(lat as string, out double la)) {
|
|
latitude = la;
|
|
}
|
|
if (locationData.TryGetValue(MessageDataLongitudeKey, out object lon) &&
|
|
double.TryParse(lon as string, out double lo)) {
|
|
longitude = lo;
|
|
}
|
|
Location = new LCGeoPoint(latitude, longitude);
|
|
}
|
|
}
|
|
|
|
public override int MessageType => LocationMessageType;
|
|
}
|
|
}
|