Skip to content

Commit 7d74a9a

Browse files
authored
Merge pull request #30 from pubnub/develop
Message Actions
2 parents 4340ad3 + 58d9517 commit 7d74a9a

File tree

65 files changed

+2147
-638
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+2147
-638
lines changed

.pubnub.yml

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
---
22
changelog:
3+
-
4+
changes:
5+
-
6+
text: "Message Actions"
7+
type: improvement
8+
-
9+
text: "Fetch with Message Actions"
10+
type: improvement
11+
date: Nov 21, 19
12+
version: v4.5.0
313
-
414
changes:
515
-
@@ -371,6 +381,7 @@ features:
371381
- STORAGE-MESSAGE-COUNT
372382
- STORAGE-HISTORY-WITH-META
373383
- STORAGE-FETCH-WITH-META
384+
- STORAGE-FETCH-WITH-MESSAGE-ACTIONS
374385
subscribe:
375386
- SUBSCRIBE-CHANNELS
376387
- SUBSCRIBE-CHANNEL-GROUPS
@@ -382,6 +393,29 @@ features:
382393
- SUBSCRIBE-PUBSUB-V2
383394
- SUBSCRIBE-PUBLISHER-UUID
384395
- SUBSCRIBE-SIGNAL-LISTENER
396+
- SUBSCRIBE-MEMBERSHIP-LISTENER
397+
- SUBSCRIBE-SPACE-LISTENER
398+
- SUBSCRIBE-USER-LISTENER
399+
- SUBSCRIBE-MESSAGE-ACTIONS-LISTENER
400+
objects:
401+
- OBJECTS-GET-USERS
402+
- OBJECTS-GET-USER
403+
- OBJECTS-CREATE-USER
404+
- OBJECTS-UPDATE-USER
405+
- OBJECTS-DELETE-USER
406+
- OBJECTS-GET-SPACES
407+
- OBJECTS-CREATE-SPACE
408+
- OBJECTS-GET-SPACE
409+
- OBJECTS-UPDATE-SPACE
410+
- OBJECTS-DELETE-SPACE
411+
- OBJECTS-GET-MEMBERSHIPS
412+
- OBJECTS-MANAGE-MEMBERSHIPS
413+
- OBJECTS-GET-MEMBERS
414+
- OBJECTS-MANAGE-MEMBERS
415+
message-actions:
416+
- MESSAGE-ACTIONS-GET
417+
- MESSAGE-ACTIONS-ADD
418+
- MESSAGE-ACTIONS-REMOVE
385419
time:
386420
- TIME-TIME
387421
signal:
@@ -408,4 +442,4 @@ supported-platforms:
408442
- "Ubuntu 12.04+, with Graphics card DX9 (shader model 3.0) or DX11 with feature level 9.3 capabilities; and CPU SSE2 instruction set support."
409443
- "Mac OS X 10.8+, with Graphics card DX9 (shader model 3.0) or DX11 with feature level 9.3 capabilities; and CPU SSE2 instruction set support."
410444
version: "PubNub Unity SDK"
411-
version: v4.4.0
445+
version: v4.5.0

PubNubUnity/Assets/PubNub/Builders/History/FetchMessagesRequestBuilder.cs

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ private ushort HistoryCount {
3131
}
3232

3333
private bool IncludeMetaInHistory;
34+
private bool IncludeMessageActionsInHistory;
3435

3536
private bool ReverseHistory;
3637
private bool IncludeTimetokenInHistory;
@@ -39,6 +40,11 @@ public FetchMessagesRequestBuilder IncludeTimetoken(bool include){
3940
return this;
4041
}
4142

43+
public FetchMessagesRequestBuilder IncludeMessageActions(bool includeMessageActions){
44+
IncludeMessageActionsInHistory = includeMessageActions;
45+
return this;
46+
}
47+
4248
public FetchMessagesRequestBuilder Reverse(bool reverseHistory){
4349
ReverseHistory = reverseHistory;
4450
return this;
@@ -81,6 +87,12 @@ public void Async(Action<PNFetchMessagesResult, PNStatus> callback)
8187
return;
8288
}
8389

90+
if ((this.IncludeMessageActionsInHistory) && (this.ChannelsToUse.Count > 1)) {
91+
PNStatus pnStatus = base.CreateErrorResponseFromMessage("Only one channel is supported when WithMessageActions is true", null, PNStatusCategory.PNBadRequestCategory);
92+
Callback(null, pnStatus);
93+
94+
return;
95+
}
8496
base.Async(this);
8597
}
8698
#endregion
@@ -92,20 +104,20 @@ protected override void RunWebRequest(QueueManager qm){
92104
#if (ENABLE_PUBNUB_LOGGING)
93105
this.PubNubInstance.PNLog.WriteToLog(string.Format ("FetchMessagesRequestBuilder: \nChannel {0} \nStartTime: {1} \nthis.EndTime:{2} \nthis.HistoryCount:{3} \nthis.ReverseHistory:{4}", string.Join(",", this.ChannelsToUse.ToArray()), this.StartTime, this.EndTime, this.HistoryCount, this.ReverseHistory), PNLoggingMethod.LevelInfo);
94106
#endif
107+
108+
Uri request = BuildRequests.BuildFetchRequest(
109+
ChannelsToUse.ToArray(),
110+
this.StartTime,
111+
this.EndTime,
112+
this.HistoryCount,
113+
this.ReverseHistory,
114+
this.IncludeTimetokenInHistory,
115+
this.PubNubInstance,
116+
this.QueryParams,
117+
this.IncludeMetaInHistory,
118+
this.IncludeMessageActionsInHistory
119+
);
95120

96-
//TODO: start=0&end=0
97-
98-
Uri request = BuildRequests.BuildFetchRequest(
99-
ChannelsToUse.ToArray(),
100-
this.StartTime,
101-
this.EndTime,
102-
this.HistoryCount,
103-
this.ReverseHistory,
104-
this.IncludeTimetokenInHistory,
105-
this.PubNubInstance,
106-
this.QueryParams,
107-
this.IncludeMetaInHistory
108-
);
109121
base.RunWebRequest(qm, request, requestState, this.PubNubInstance.PNConfig.NonSubscribeTimeout, 0, this);
110122

111123
}
@@ -189,6 +201,7 @@ protected bool CreateFetchMessagesResult(object objChannelsDict, out Dictionary<
189201
this.PubNubInstance.PNLog.WriteToLog(string.Format ("CreateFetchMessagesResult: timetoken {0}.", timetoken.ToString()), PNLoggingMethod.LevelInfo);
190202
#endif
191203
}
204+
192205
if(!string.IsNullOrEmpty(this.PubNubInstance.PNConfig.CipherKey) && (this.PubNubInstance.PNConfig.CipherKey.Length > 0)){
193206
//TODO: handle exception
194207
objPayload = Helpers.DecodeMessage(this.PubNubInstance.PNConfig.CipherKey, objPayload, OperationType, this.PubNubInstance);
@@ -203,6 +216,8 @@ protected bool CreateFetchMessagesResult(object objChannelsDict, out Dictionary<
203216
meta,
204217
""
205218
);
219+
220+
pnMessageResult.MessageActions = MessageActionsHelpers.ExtractMessageActions(messageDataDict);
206221
lstMessageResult.Add(pnMessageResult);
207222
#if (ENABLE_PUBNUB_LOGGING)
208223
this.PubNubInstance.PNLog.WriteToLog(string.Format ("CreateFetchMessagesResult: pnMessageResult {0}.", pnMessageResult.ToString()), PNLoggingMethod.LevelInfo);

PubNubUnity/Assets/PubNub/Builders/MessageActions.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
using System;
2+
using System.Linq;
3+
using System.Collections.Generic;
4+
using UnityEngine;
5+
6+
namespace PubNubAPI
7+
{
8+
public class MessageActionAdd
9+
{
10+
public string ActionType {get; set;}
11+
public string ActionValue {get; set;}
12+
}
13+
14+
public class AddMessageActionsRequestBuilder: PubNubNonSubBuilder<AddMessageActionsRequestBuilder, PNMessageActionsResult>, IPubNubNonSubscribeBuilder<AddMessageActionsRequestBuilder, PNMessageActionsResult>
15+
{
16+
private string AddMessageActionsChannel { get; set;}
17+
private long AddMessageActionsMessageTimetoken { get; set;}
18+
private MessageActionAdd MessageActionAdd { get; set;}
19+
public AddMessageActionsRequestBuilder(PubNubUnity pn): base(pn, PNOperationType.PNAddMessageActionsOperation){
20+
}
21+
22+
#region IPubNubBuilder implementation
23+
public void Async(Action<PNMessageActionsResult, PNStatus> callback)
24+
{
25+
this.Callback = callback;
26+
if(MessageActionAdd == null){
27+
PNStatus pnStatus = base.CreateErrorResponseFromMessage("Message Action null", null, PNStatusCategory.PNBadRequestCategory);
28+
Callback(null, pnStatus);
29+
return;
30+
}
31+
base.Async(this);
32+
}
33+
#endregion
34+
35+
public AddMessageActionsRequestBuilder Channel(string channel){
36+
AddMessageActionsChannel = channel;
37+
return this;
38+
}
39+
40+
public AddMessageActionsRequestBuilder MessageTimetoken(long messageTimetoken){
41+
AddMessageActionsMessageTimetoken = messageTimetoken;
42+
return this;
43+
}
44+
45+
public AddMessageActionsRequestBuilder MessageAction(MessageActionAdd action){
46+
MessageActionAdd = action;
47+
return this;
48+
}
49+
50+
protected override void RunWebRequest(QueueManager qm){
51+
RequestState requestState = new RequestState ();
52+
requestState.OperationType = OperationType;
53+
requestState.httpMethod = HTTPMethod.Post;
54+
55+
var cub = new {
56+
type = MessageActionAdd.ActionType,
57+
value = MessageActionAdd.ActionValue,
58+
};
59+
60+
string jsonUserBody = Helpers.JsonEncodePublishMsg (cub, "", this.PubNubInstance.JsonLibrary, this.PubNubInstance.PNLog);
61+
#if (ENABLE_PUBNUB_LOGGING)
62+
this.PubNubInstance.PNLog.WriteToLog (string.Format ("jsonUserBody: {0}", jsonUserBody), PNLoggingMethod.LevelInfo);
63+
#endif
64+
requestState.POSTData = jsonUserBody;
65+
66+
Uri request = BuildRequests.BuildAddMessageActionsRequest(
67+
AddMessageActionsChannel,
68+
AddMessageActionsMessageTimetoken.ToString(),
69+
this.PubNubInstance,
70+
this.QueryParams
71+
);
72+
base.RunWebRequest(qm, request, requestState, this.PubNubInstance.PNConfig.NonSubscribeTimeout, 0, this);
73+
}
74+
75+
protected override void CreatePubNubResponse(object deSerializedResult, RequestState requestState){
76+
PNMessageActionsResult pnMessageActionsResult = new PNMessageActionsResult();
77+
PNStatus pnStatus = new PNStatus();
78+
79+
try{
80+
Dictionary<string, object> dictionary = deSerializedResult as Dictionary<string, object>;
81+
82+
if(dictionary != null) {
83+
object objData;
84+
dictionary.TryGetValue("data", out objData);
85+
if(objData!=null){
86+
Dictionary<string, object> objDataDict = objData as Dictionary<string, object>;
87+
if(objDataDict != null){
88+
pnMessageActionsResult = MessageActionsHelpers.ExtractMessageAction(objDataDict);
89+
} else {
90+
pnMessageActionsResult = null;
91+
pnStatus = base.CreateErrorResponseFromException(new PubNubException("objDataDict null"), requestState, PNStatusCategory.PNUnknownCategory);
92+
}
93+
} else {
94+
pnMessageActionsResult = null;
95+
pnStatus = base.CreateErrorResponseFromException(new PubNubException("objData null"), requestState, PNStatusCategory.PNUnknownCategory);
96+
}
97+
}
98+
#if (ENABLE_PUBNUB_LOGGING)
99+
else {
100+
this.PubNubInstance.PNLog.WriteToLog ("dictionary null", PNLoggingMethod.LevelInfo);
101+
}
102+
#endif
103+
104+
} catch (Exception ex){
105+
pnMessageActionsResult = null;
106+
pnStatus = base.CreateErrorResponseFromException(ex, requestState, PNStatusCategory.PNUnknownCategory);
107+
}
108+
Callback(pnMessageActionsResult, pnStatus);
109+
110+
}
111+
112+
}
113+
}

PubNubUnity/Assets/PubNub/Builders/MessageActions/AddMessageActionsRequestBuilder.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
using System;
2+
using System.Linq;
3+
using System.Collections.Generic;
4+
using UnityEngine;
5+
6+
namespace PubNubAPI
7+
{
8+
public class GetMessageActionsRequestBuilder: PubNubNonSubBuilder<GetMessageActionsRequestBuilder, PNGetMessageActionsResult>, IPubNubNonSubscribeBuilder<GetMessageActionsRequestBuilder, PNGetMessageActionsResult>
9+
{
10+
private string GetMessageActionsChannel { get; set;}
11+
private int GetMessageActionsLimit { get; set;}
12+
private long GetMessageActionsEnd { get; set;}
13+
private long GetMessageActionsStart { get; set;}
14+
public GetMessageActionsRequestBuilder(PubNubUnity pn): base(pn, PNOperationType.PNGetMessageActionsOperation){
15+
}
16+
17+
#region IPubNubBuilder implementation
18+
public void Async(Action<PNGetMessageActionsResult, PNStatus> callback)
19+
{
20+
this.Callback = callback;
21+
base.Async(this);
22+
}
23+
#endregion
24+
25+
public GetMessageActionsRequestBuilder Channel(string channel){
26+
GetMessageActionsChannel = channel;
27+
return this;
28+
}
29+
public GetMessageActionsRequestBuilder Limit(int limit){
30+
GetMessageActionsLimit = limit;
31+
return this;
32+
}
33+
34+
public GetMessageActionsRequestBuilder Start(long start){
35+
GetMessageActionsStart = start;
36+
return this;
37+
}
38+
public GetMessageActionsRequestBuilder End(long end){
39+
GetMessageActionsEnd = end;
40+
return this;
41+
}
42+
protected override void RunWebRequest(QueueManager qm){
43+
RequestState requestState = new RequestState ();
44+
requestState.OperationType = OperationType;
45+
46+
Uri request = BuildRequests.BuildGetMessageActionsRequest(
47+
GetMessageActionsChannel,
48+
GetMessageActionsStart,
49+
GetMessageActionsEnd,
50+
GetMessageActionsLimit,
51+
this.PubNubInstance,
52+
this.QueryParams
53+
);
54+
base.RunWebRequest(qm, request, requestState, this.PubNubInstance.PNConfig.NonSubscribeTimeout, 0, this);
55+
}
56+
57+
protected override void CreatePubNubResponse(object deSerializedResult, RequestState requestState){
58+
PNGetMessageActionsResult pnGetMessageActionsResult = new PNGetMessageActionsResult();
59+
pnGetMessageActionsResult.Data = new List<PNMessageActionsResult>();
60+
pnGetMessageActionsResult.More = new PNGetMessageActionsMore();
61+
PNStatus pnStatus = new PNStatus();
62+
63+
try{
64+
Dictionary<string, object> dictionary = deSerializedResult as Dictionary<string, object>;
65+
66+
if(dictionary != null) {
67+
object objData;
68+
dictionary.TryGetValue("data", out objData);
69+
if(objData!=null){
70+
object[] objArr = objData as object[];
71+
foreach (object data in objArr){
72+
Dictionary<string, object> objDataDict = data as Dictionary<string, object>;
73+
if(objDataDict!=null){
74+
PNMessageActionsResult pnMessageActionsResult = MessageActionsHelpers.ExtractMessageAction(objDataDict);
75+
pnGetMessageActionsResult.Data.Add(pnMessageActionsResult);
76+
} else {
77+
pnStatus = base.CreateErrorResponseFromException(new PubNubException("objDataDict null"), requestState, PNStatusCategory.PNUnknownCategory);
78+
}
79+
}
80+
} else {
81+
pnStatus = base.CreateErrorResponseFromException(new PubNubException("objData null"), requestState, PNStatusCategory.PNUnknownCategory);
82+
}
83+
object objMore;
84+
dictionary.TryGetValue("more", out objMore);
85+
if(objMore!=null){
86+
Dictionary<string, object> objMoreDict = objMore as Dictionary<string, object>;
87+
pnGetMessageActionsResult.More.Start = Utility.ReadMessageFromResponseDictionary(objMoreDict, "start");
88+
int limit;
89+
string log;
90+
Utility.TryCheckKeyAndParseInt(objMoreDict, "limit", "limit", out log, out limit);
91+
pnGetMessageActionsResult.More.Limit = limit;
92+
pnGetMessageActionsResult.More.End = Utility.ReadMessageFromResponseDictionary(objMoreDict, "end");
93+
pnGetMessageActionsResult.More.URL = Utility.ReadMessageFromResponseDictionary(objMoreDict, "url");
94+
}
95+
}
96+
} catch (Exception ex){
97+
pnGetMessageActionsResult = null;
98+
pnStatus = base.CreateErrorResponseFromException(ex, requestState, PNStatusCategory.PNUnknownCategory);
99+
}
100+
Callback(pnGetMessageActionsResult, pnStatus);
101+
102+
}
103+
104+
}
105+
}

PubNubUnity/Assets/PubNub/Builders/MessageActions/GetMessageActionsRequestBuilder.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)