This repository was archived by the owner on Aug 15, 2022. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 306
Expand file tree
/
Copy pathProgram.cs
More file actions
319 lines (273 loc) · 9.89 KB
/
Program.cs
File metadata and controls
319 lines (273 loc) · 9.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
using BeardedManStudios;
using BeardedManStudios.Forge.Logging;
using BeardedManStudios.Forge.Networking;
using BeardedManStudios.Forge.Networking.Frame;
using BeardedManStudios.SimpleJSON;
using System;
using System.Collections.Generic;
namespace ConsoleTestProgram
{
class MainClass
{
private static NetWorker networkHandle = null;
public static void Main(string[] args)
{
BeardedManStudios.Templating.TemplateSystem template = new BeardedManStudios.Templating.TemplateSystem(tmp);
template.AddVariable("className", "NetworkCameraNetworkObject");
template.AddVariable("identity", "1");
template.AddVariable("bitwiseSize", "1");
List<object[]> variables = new List<object[]>();
template.AddVariable("variables", variables.ToArray());
string end = template.Parse();
Program1();
}
#region Program1
private static void Program1()
{
ConsoleBehavior obj = null;
string serverIP = "127.0.0.1";
//string hostIP = "0.0.0.0";
//ushort port = NetWorker.DEFAULT_PORT;
//ushort masterServerPort = 15940;
//string natHost = "0.0.0.0";
BMSLog.Instance.RegisterLoggerService(new ConsoleLogger());
Console.Write("server or client: ");
string serverOrClient = Console.ReadLine().ToLower();
if (serverOrClient == "client" || serverOrClient == "c")
{
networkHandle = new TCPClient();
((TCPClient)networkHandle).Connect(serverIP/*, port*/);
}
else if (serverOrClient == "server" || serverOrClient == "s")
{
networkHandle = new TCPServer(32);
((TCPServer)networkHandle).Connect();
//RegisterOnMasterServer(networkHandle, 32, serverIP, masterServerPort);
}
//if (serverOrClient == "client" || serverOrClient == "c")
//{
// networkHandle = new UDPClient();
// ((UDPClient)networkHandle).Connect(serverIP/*, port, natHost*/);
//}
//else if (serverOrClient == "server" || serverOrClient == "s")
//{
// networkHandle = new UDPServer(32);
// ((UDPServer)networkHandle).Connect(/*hostIP, port, natHost*/);
//}
else
{
Console.WriteLine("Invalid");
return;
}
networkHandle.textMessageReceived += ReadTextMessage;
networkHandle.binaryMessageReceived += ReadBinaryMessage;
NetworkObject.Factory = new NetworkObjectFactory();
networkHandle.objectCreated += (NetworkObject target) =>
{
if (target is ConsoleNetworkObject)
{
obj = new ConsoleDerivedNetworkObject();
obj.Initialize(target);
}
};
networkHandle.serverAccepted += (sender) =>
{
if (networkHandle is IClient)
new ConsoleNetworkObject(networkHandle);
};
while (true)
{
Console.Write("Enter a message: ");
string message = Console.ReadLine();
if (message == "disconnect")
networkHandle.Disconnect(false);
else if (message == "exit")
break;
else if (message == "file")
{
BMSByte data = new BMSByte();
data.Clone(System.IO.File.ReadAllBytes("testSend.txt"));
data.InsertRange(0, new byte[1] { 212 });
if (networkHandle is TCPServer)
((TCPServer)networkHandle).SendAll(new Binary(networkHandle.Time.Timestep, false, data, Receivers.All, 55, true));
else if (networkHandle is TCPClient)
((TCPClient)networkHandle).Send(new Binary(networkHandle.Time.Timestep, true, data, Receivers.All, 55, true));
else if (networkHandle is BaseUDP)
((BaseUDP)networkHandle).Send(new Binary(networkHandle.Time.Timestep, false, data, Receivers.All, 55, false), false);
}
else if (message == "rpc")
obj.networkObject.SendRpc(ConsoleBehavior.RPC_HELLO_WORLD, Receivers.AllBuffered, null, "World!");
else if (message.StartsWith("set num to "))
obj.networkObject.Num = int.Parse(message.Substring("set name to ".Length));
else if (message == "num")
Console.WriteLine("Number is currently " + obj.networkObject.Num);
else
{
if (networkHandle is TCPServer)
obj.networkObject.SendRpc(ConsoleBehavior.RPC_HELLO_WORLD, Receivers.Others, message);
// ((TCPServer)networkHandle).SendAll(Text.CreateFromString(networkHandle.Time.Timestep, message, false, Receivers.All, 55, true));
else if (networkHandle is TCPClient)
((TCPClient)networkHandle).Send(Text.CreateFromString(networkHandle.Time.Timestep, message, true, Receivers.All, 55, true));
else if (networkHandle is BaseUDP)
((BaseUDP)networkHandle).Send(Text.CreateFromString(networkHandle.Time.Timestep, message, false, Receivers.All, 55, false), true);
}
}
}
private static void ReadTextMessage(NetworkingPlayer player, Text frame, NetWorker sender)
{
Console.WriteLine("");
Console.WriteLine("Read: " + frame.ToString());
Console.Write("Enter a message: ");
}
private static void RegisterOnMasterServer(NetWorker networker, int maxPlayers, string masterServerHost, ushort masterServerPort)
{
// The Master Server communicates over TCP
TCPClient client = new TCPClient();
// Once this client has been accepted by the master server it should send it's get request
client.serverAccepted += (sender) =>
{
try
{
Console.WriteLine("\nAccepted On Master Server");
// Create the get request with the desired filters
JSONNode sendData = JSONNode.Parse("{}");
JSONClass registerData = new JSONClass();
registerData.Add("id", "myGame");
registerData.Add("name", "Forge Game");
registerData.Add("port", new JSONData(networker.Port));
registerData.Add("playerCount", new JSONData(0));
registerData.Add("maxPlayers", new JSONData(maxPlayers));
registerData.Add("comment", "Demo comment...");
registerData.Add("type", "Deathmatch");
registerData.Add("mode", "Teams");
registerData.Add("protocol", networker is BaseUDP ? "udp" : "tcp");
sendData.Add("register", registerData);
BeardedManStudios.Forge.Networking.Frame.Text temp = BeardedManStudios.Forge.Networking.Frame.Text.CreateFromString(client.Time.Timestep, sendData.ToString(), true, Receivers.Server, MessageGroupIds.MASTER_SERVER_REGISTER, true);
// Send the request to the server
client.Send(temp);
}
catch
{
// If anything fails, then this client needs to be disconnected
client.Disconnect(true);
client = null;
}
};
client.Connect(masterServerHost, masterServerPort);
client.disconnected += (sender) =>
{
client.Disconnect(false);
Console.WriteLine("Master server disconnected");
};
//Networker.disconnected += () =>
//{
// client.Disconnect(false);
// MasterServerNetworker = null;
//};
}
private static void ReadBinaryMessage(NetworkingPlayer player, Binary frame, NetWorker sender)
{
BMSByte data = new BMSByte();
data.Clone(frame.GetData());
if (data[0] == 212)
{
data.MoveStartIndex(1);
System.IO.File.WriteAllBytes("testRead.txt", data.CompressBytes());
Console.WriteLine("Wrote file from network");
}
}
private static void TestRpc(object[] args)
{
Console.WriteLine("Hello {0}!", args[0]);
}
#endregion
private static string tmp = @"using System;
using UnityEngine;
using BeardedManStudios;
using BeardedManStudios.Forge.Networking;
using BeardedManStudios.Forge.Networking.Frame;
using BeardedManStudios.Forge.Networking.Unity;
namespace BeardedManStudios.Forge.Networking.Generated
{
public class >:className:< : NetworkObject
{
public const int IDENTITY = >:identity:<;
private byte[] _dirtyFields = new byte[>:bitwiseSize:<];
>:FOREVERY variables:<
private >:[0]:< _>:[1]:<;
public event FieldEvent<>:[0]:<> >:[1]:<Changed;
private Interpolate>:[0]:< >:[1]:<Interpolation = new Interpolate>:[0]:<() { lerpT = >:[3]:<, enabled = >:[2]:< };
public >:[0]:< >:[1]:<
{
get { return _>:[1]:<; }
set
{
// Don't do anything if the value is the same
if (_>:[1]:< == value)
return;
// Mark the field as dirty for the network to transmit
_dirtyFields[>:[5]:<] |= >:[4]:<;
_>:[1]:< = value;
hasDirtyFields = true;
}
}
>:ENDFOREVERY:<
public override int UniqueIdentity { get { return IDENTITY; } }
protected override BMSByte WritePayload(BMSByte data)
{
>:FOREVERY variables:<
UnityObjectMapper.Instance.MapBytes(data, _>:[1]:<);
>:ENDFOREVERY:<
return data;
}
protected override void ReadPayload(BMSByte payload)
{
>:FOREVERY variables:<
_>:[1]:< = UnityObjectMapper.Instance.Map<>:[0]:<>(payload);
>:[1]:<Interpolation.current = _>:[1]:<;
>:[1]:<Interpolation.target = _>:[1]:<;
if (>:[1]:<Changed != null) >:[1]:<Changed(_>:[1]:<);
>:ENDFOREVERY:<
}
protected override BMSByte SerializeDirtyFields()
{
BMSByte data = new BMSByte();
data.Append(_dirtyFields);
>:FOREVERY variables:<
if ((>:[4]:< & _dirtyFields[>:[5]:<]) != 0)
UnityObjectMapper.Instance.MapBytes(data, _>:[1]:<);
>:ENDFOREVERY:<
return data;
}
protected override void ReadDirtyFields(BMSByte data)
{
byte[] readFlags = new byte[_dirtyFields.Length];
Buffer.BlockCopy(data.byteArr, data.StartIndex(), readFlags, 0, readFlags.Length);
data.MoveStartIndex(readFlags.Length);
>:FOREVERY variables:<
if ((>:[4]:< & readFlags[>:[5]:<]) != 0)
{
>:[1]:<Interpolation.target = UnityObjectMapper.Instance.Map<>:[0]:<>(data);
if (>:[1]:<Changed != null) >:[1]:<Changed(_>:[1]:<);
}
>:ENDFOREVERY:<
}
public override void InterpolateUpdate()
{
if (IsOwner)
return;
>:FOREVERY variables:<
if (>:[1]:<Interpolation.enabled && >:[1]:<Interpolation.current != >:[1]:<Interpolation.target)
{
_>:[1]:< = >:[1]:<Interpolation.Interpolate();
if (>:[1]:<Changed != null) >:[1]:<Changed(>:[1]:<);
}
>:ENDFOREVERY:<
}
public >:className:<(NetWorker networker, INetworkBehavior networkBehavior = null) : base(networker, networkBehavior) { }
public >:className:<(NetWorker networker, uint serverId, FrameStream frame) : base(networker, serverId, frame) { }
// DO NOT TOUCH, THIS GETS GENERATED PLEASE EXTEND THIS CLASS IF YOU WISH TO HAVE CUSTOM CODE ADDITIONS
}
}";
}
}