static void SetupPacketHandlers() { //The diffrent types of handlers: (all optional) //The type handler. //This handler handles a specific object type. _client.SetHandler((SyncIOClient sender, ChatMessage p) => { //All ChatMessage packages will be passed to this callback Console.WriteLine(p.Message); }); _client.SetHandler((SyncIOClient sender, FilePacket p) => { Console.WriteLine($"Sent file {p.FileName} with size of {(p.Bytes.Sum(x => x.Length) / 1024).ToString("N0")} KB to server..."); }); _client.SetHandler((SyncIOClient sender, DesktopScreenshot p) => { sender.Send(new DesktopScreenshot(ScreenCapture.GetDesktopScreenshot())); }); //This handler handles any IPacket that does not have a handler. _client.SetHandler <IPacket>((SyncIOClient sender, IPacket p) => { //Any packets without a set handler will be passed here }); //This handler handles anything that is not a SINGLE IPacket object _client.SetHandler((SyncIOClient sender, object[] data) => { //Any object array sent will be passed here, even if the array contains //A packet with a handler (e.g. ChatMessage) }); }
public RemoteCode(string _appID, string _username) { AppID = _appID; Username = _username; client = new SyncIOClient(SyncIO.Transport.TransportProtocal.IPv4, RemoteConfig.GetPackager()); client.OnDisconnect += (c, e) => OnDisconnect?.Invoke(); client.SetHandler <HandshakeResponsePacket>((c, p) => OnConnect?.Invoke()); client.OnHandshake += (c, id, succ) => { if (!succ) { OnConnect?.Invoke(); } else { c.Send(new HandshakePacket(Username, AppID)); } }; }
private static void Client() { //When sending custom objects, you must create a new packer and specify them. var packer = new Packager(new Type[] { typeof(SetName), typeof(ChatMessage) }); //Using ipv4 and the packer that has the custom types. var client = new SyncIOClient(TransportProtocal.IPv4, packer); //The diffrent types of handlers: (all optional) //The type handler. //This handler handles a specific object type. client.SetHandler <ChatMessage>((SyncIOClient sender, ChatMessage messagePacket) => { //All ChatMessage packages will be passed to this callback Console.WriteLine(messagePacket.Message); }); //This handler handles any IPacket that does not have a handler. client.SetHandler((SyncIOClient sender, IPacket p) => { //Any packets without a set handler will be passed here }); //This handler handles anything that is not a SINGLE IPacket object client.SetHandler((SyncIOClient sender, object[] data) => { //Any object array sent will be passed here, even if the array contains //A packet with a handler (e.g. ChatMessage) }); if (!client.Connect("127.0.0.1", new Random().Next(9996, 10000)))//Connect to any of the open ports. { ConsoleExtentions.ErrorAndClose("Failed to connect to server."); } //Connecting and handshake are not the same. //Connecting = Establishing a connection with a socket //Handskake = Establishing a connection with a SyncIOServer and getting an ID. Console.WriteLine("Connected on port {0}. Waiting for handshake.", client.EndPoint.Port); bool success = client.WaitForHandshake(); /* * The asynchronous way to get handshake would be subscribing * to the client.OnHandshake event. */ if (!success) { ConsoleExtentions.ErrorAndClose("Handshake failed."); } Console.WriteLine("Handshake success. Got ID: {0}", client.ID); var name = ConsoleExtentions.GetNonEmptyString("Enter a name: "); client.Send(new SetName(name)); Console.WriteLine("Name set. You can now send messages."); bool connected = true; client.OnDisconnect += (s, err) => { connected = false; }; var GetTime = client.GetRemoteFunction <string>("GetTime"); var toggletime = client.GetRemoteFunction <string>("toggletime"); while (connected) { var msg = ConsoleExtentions.GetNonEmptyString(""); if (msg == "time") { //Call a function that requires authentication checking. GetTime.CallWait(); //If call failed, return will be the default value for the type if (GetTime.LastStatus == FunctionResponceStatus.Success) //No issues { Console.WriteLine(GetTime.LastValue); //Write last returned value to console } else { Console.WriteLine("Call failed. reason: {0}. Try the \"toggletime\" command", GetTime.LastStatus); } } else if (msg == "toggletime") { Console.WriteLine(toggletime.CallWait()); //If call fails, nothing (null) will be printed because it is strings default value. } else { if (connected) { client.Send(new ChatMessage(msg)); } } } ConsoleExtentions.ErrorAndClose("Lost connection to server"); }
public void TestPacketSending() { var done = new ManualResetEvent(false); var packer = new Packager(new Type[] { typeof(CustomDataSending) }); var arrPayload = new object[] { 9, "SyncIOTest", "Example", 666.333f }; var cPayload = new CustomDataSending() { Num = 5555, str = "SyncIOTest", fl = 6666.4444f }; var server = new SyncIOServer(TransportProtocol.IPv4, packer); Guid cID = Guid.NewGuid(); server.OnClientConnect += (s, c) => { Console.WriteLine("Connected."); cID = c.ID; c.OnDisconnect += (rtcl, err) => { throw new AssertFailedException(err.Message, err); }; }; server.SetHandler((SyncIOConnectedClient s, object[] dat) => { CollectionAssert.AreEqual(arrPayload, dat); s.Send(cPayload); }); var listenSock = server.ListenTCP(9000); Assert.IsNotNull(listenSock); var client = new SyncIOClient(TransportProtocol.IPv4, packer); client.OnDisconnect += (sCl, err) => { throw new AssertFailedException(err.Message, err); }; client.SetHandler <CustomDataSending>((s, d) => { Assert.AreEqual(cPayload.fl, d.fl); Assert.AreEqual(cPayload.Num, d.Num); Assert.AreEqual(cPayload.str, d.str); done.Set(); }); client.OnHandshake += (s, id, succ) => { Assert.IsTrue(succ); Thread.Sleep(100); //Wait for server callback to finish Assert.AreEqual(cID, id); s.Send(arrPayload); }; Assert.IsTrue(client.Connect("127.0.0.1", 9000)); Assert.IsTrue(done.WaitOne(10 * 1000)); listenSock.Dispose(); }