示例#1
0
        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)
            });
        }
示例#2
0
        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));
                }
            };
        }
示例#3
0
文件: Program.cs 项目: sensi17/SyncIO
        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");
        }
示例#4
0
        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();
        }