Skip to content

Commit 1655bb5

Browse files
hypernoobmattqs
authored andcommitted
Support binary data in Emit with Ack (#117)
* Support binary data in Emit with Ack * Support Action<T1, T2, T3, T4> in AckImpl
1 parent 5877cc4 commit 1655bb5

2 files changed

Lines changed: 55 additions & 21 deletions

File tree

Src/SocketIoClientDotNet.net45/Client/AckImpl.cs

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,54 +4,68 @@ namespace Quobject.SocketIoClientDotNet.Client
44
{
55
public class AckImpl : IAck
66
{
7-
private readonly Action fn;
7+
private readonly Action fn0;
88
private readonly Action<object> fn1;
99
private readonly Action<object, object> fn2;
1010
private readonly Action<object, object, object> fn3;
11+
private readonly Action<object, object, object, object> fn4;
1112

1213
public AckImpl(Action fn)
1314
{
14-
this.fn = fn;
15+
fn0 = fn;
1516
}
1617

1718
public AckImpl(Action<object> fn)
1819
{
19-
this.fn1 = fn;
20+
fn1 = fn;
2021
}
21-
public AckImpl(Action<object,object> fn)
22+
23+
public AckImpl(Action<object, object> fn)
2224
{
23-
this.fn2 = fn;
25+
fn2 = fn;
2426
}
2527

2628
public AckImpl(Action<object, object, object> fn)
2729
{
28-
this.fn3 = fn;
30+
fn3 = fn;
2931
}
3032

33+
public AckImpl(Action<object, object, object, object> fn)
34+
{
35+
fn4 = fn;
36+
}
3137

3238
public void Call(params object[] args)
3339
{
34-
if (fn != null)
40+
if (fn0 != null)
3541
{
36-
fn();
42+
fn0();
3743
}
3844
else if (fn1 != null)
3945
{
40-
var arg = args.Length > 0 ? args[0] : null;
41-
fn1(arg);
46+
var arg0 = args.Length > 0 ? args[0] : null;
47+
fn1(arg0);
4248
}
4349
else if (fn2 != null)
4450
{
45-
var arg = args.Length > 0 ? args[0] : null;
51+
var arg0 = args.Length > 0 ? args[0] : null;
4652
var arg1 = args.Length > 1 ? args[1] : null;
47-
fn2(arg, arg1);
53+
fn2(arg0, arg1);
4854
}
4955
else if (fn3 != null)
5056
{
51-
var arg = args.Length > 0 ? args[0] : null;
57+
var arg0 = args.Length > 0 ? args[0] : null;
58+
var arg1 = args.Length > 1 ? args[1] : null;
59+
var arg2 = args.Length > 2 ? args[2] : null;
60+
fn3(arg0, arg1, arg2);
61+
}
62+
else if (fn4 != null)
63+
{
64+
var arg0 = args.Length > 0 ? args[0] : null;
5265
var arg1 = args.Length > 1 ? args[1] : null;
5366
var arg2 = args.Length > 2 ? args[2] : null;
54-
fn3(arg, arg1, arg2);
67+
var arg3 = args.Length > 3 ? args[3] : null;
68+
fn4(arg0, arg1, arg2, arg3);
5569
}
5670
}
5771
}

Src/SocketIoClientDotNet.net45/Client/Socket.cs

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ public override Emitter Emit(string eventString, params object[] args)
104104
return this;
105105
}
106106

107-
var _args = new List<object> {eventString};
107+
var _args = new List<object> { eventString };
108108
_args.AddRange(args);
109109

110110
var jsonArgs = Parser.Packet.Args2JArray(_args);
@@ -138,40 +138,60 @@ public Emitter Emit(string eventString, IAck ack, params object[] args)
138138
{
139139
var log = LogManager.GetLogger(Global.CallerName());
140140

141-
var _args = new List<object> { eventString };
142-
if (args != null)
141+
if (Events.Contains(eventString))
143142
{
144-
_args.AddRange(args);
143+
base.Emit(eventString, args);
144+
return this;
145145
}
146146

147-
var jarray = new JArray(_args);
148-
var packet = new Packet(Parser.Parser.EVENT, jarray);
147+
var _args = new List<object> { eventString };
148+
_args.AddRange(args);
149+
150+
var jsonArgs = Parser.Packet.Args2JArray(_args);
151+
152+
var parserType = HasBinaryData.HasBinary(jsonArgs) ? Parser.Parser.BINARY_EVENT : Parser.Parser.EVENT;
153+
var packet = new Packet(parserType, jsonArgs);
149154

150155
log.Info(string.Format("emitting packet with ack id {0}", Ids));
151156
Acks = Acks.Add(Ids, ack);
152157
packet.Id = Ids++;
153158

154-
Packet(packet);
159+
if (Connected)
160+
{
161+
Packet(packet);
162+
}
163+
else
164+
{
165+
SendBuffer = SendBuffer.Enqueue(packet);
166+
}
155167
return this;
156168
}
157169

158170
public Emitter Emit(string eventString, Action ack, params object[] args)
159171
{
160172
return Emit(eventString, new AckImpl(ack), args);
161173
}
174+
162175
public Emitter Emit(string eventString, Action<object> ack, params object[] args)
163176
{
164177
return Emit(eventString, new AckImpl(ack), args);
165178
}
179+
166180
public Emitter Emit(string eventString, Action<object, object> ack, params object[] args)
167181
{
168182
return Emit(eventString, new AckImpl(ack), args);
169183
}
184+
170185
public Emitter Emit(string eventString, Action<object, object, object> ack, params object[] args)
171186
{
172187
return Emit(eventString, new AckImpl(ack), args);
173188
}
174189

190+
public Emitter Emit(string eventString, Action<object, object, object, object> ack, params object[] args)
191+
{
192+
return Emit(eventString, new AckImpl(ack), args);
193+
}
194+
175195
public void Packet(Packet packet)
176196
{
177197
packet.Nsp = Nsp;

0 commit comments

Comments
 (0)