コード例 #1
0
    public void Start()
    {
        //get the gameServer/Client
        GameObject gameClient = GameObject.FindWithTag("GameClient");

        //get the client and setup events
        client = gameClient.GetComponent <MultiClient>();
        client.MessageReceived += MessageReceived;

        if (doSyncedObjectsDictSetup)
        {
            ID = client.syncedObjectsTotal;
            client.syncedObjects.Add(client.syncedObjectsTotal, this);
            //increment the total synced objects count
            client.syncedObjectsTotal += 1;
        }


        //if the parent is locally owned, so are we
        if (parent)
        {
            localOwned = localOwned | parent.GetComponent <MultiSyncedObject>().localOwned;
        }

        //start syncing the object every syncInterval seconds
        SyncObject();
    }
コード例 #2
0
 private void Awake()
 {
     //get the client(if it exists)
     if (FindObjectOfType <MultiClient>())
     {
         client = FindObjectOfType <MultiClient>();
     }
 }
コード例 #3
0
        public async Task ShouldSendAndReceiveBinaryDataCorrectly()
        {
            var seed1 = "b71a349865ed5907821e903389e83424d037d4e1680935fd3c1f33408df2fdf5";
            var seed2 = "f40bc0903ae5064ec225a82d1ca8ca6c63d4ecf2c41689b82fc6bf581ea3b67b";

            var address1 = "3fc6bbdae9be658e7b7e85de65d04f3bd39ad41afc316b82314cca7c62e9fd6e";
            var address2 = "fc6c231915d568f50e4dac2858e833ec7fc6c27e9cd040ced08f941e5c8a32f7";

            MultiClient client1 = default;
            var         client2 = new MultiClient(new MultiClientOptions {
                SeedHex = seed2
            });

            var expectedRequestData  = new byte[] { 5, 5, 5, 5 };
            var expectedResponseData = new byte[] { 1, 2, 3, 4, 5 };

            client2.OnMessage(request =>
            {
                Assert.Equal(address1, request.Source);
                Assert.Equal(expectedRequestData, request.Payload);

                return(Task.FromResult((object)expectedResponseData));
            });

            var finished = false;

            client2.OnConnect(request =>
            {
                Task.Delay(500).GetAwaiter().GetResult();

                client1 = new MultiClient(new MultiClientOptions {
                    SeedHex = seed1
                });

                client1.OnConnect(request =>
                {
                    var response = client1.SendAsync <byte[]>(address2, expectedRequestData);

                    Assert.NotNull(response.Result);
                    Assert.Equal(expectedResponseData, response.Result);

                    finished = true;
                });
            });

            while (finished == false)
            {
                await Task.Delay(100);
            }

            client1.CloseAsync();
            client2.CloseAsync();

            Assert.True(finished);
        }
コード例 #4
0
ファイル: ClientUI.cs プロジェクト: HappyLL/learnSocket
    // Use this for initialization
    void Start()
    {
        m_SendButton.onClick.AddListener(OnClickCallBack);
        m_InputField.onEndEdit.AddListener(OnInputEndedEdit);

        m_cbText = "";
        m_text   = "";

        m_client = new MultiClient();
        m_client.InitClient(GetMsg);

        m_client.StartClient();
    }
コード例 #5
0
    private IEnumerator _Host()
    {
        Debug.Log("Hosting " + inputMethod.ToString() + " at " + IP);
        GameObject server = Instantiate(gameServerPrefab);

        server.GetComponent <MultiServer>().IPString = IP;
        server.GetComponent <MultiServer>().StartServer();
        yield return(new WaitForSeconds(1));

        MultiClient multiClient = _Connect();

        multiClient.actions.Enqueue(() => StartCoroutine(multiClient.ChangeScene(0, forceSceneChange: true)));
        DontDestroyOnLoad(server);
    }
コード例 #6
0
        public async Task ShouldSendAndReceiveTextMessageCorrectly()
        {
            var seed1 = "b71a349865ed5907821e903389e83424d037d4e1680935fd3c1f33408df2fdf5";
            var seed2 = "f40bc0903ae5064ec225a82d1ca8ca6c63d4ecf2c41689b82fc6bf581ea3b67b";

            var address1 = "3fc6bbdae9be658e7b7e85de65d04f3bd39ad41afc316b82314cca7c62e9fd6e";
            var address2 = "fc6c231915d568f50e4dac2858e833ec7fc6c27e9cd040ced08f941e5c8a32f7";

            MultiClient client1 = default;
            var         client2 = new MultiClient(new MultiClientOptions {
                SeedHex = seed2
            });

            var expectedRequestText  = "Hello world!";
            var expectedResponseText = "Hi there!";

            client2.OnMessage(async request =>
            {
                Assert.Equal(address1, request.Source);
                Assert.Equal(expectedRequestText, request.TextMessage);

                return(await Task.FromResult(expectedResponseText));
            });

            var finished = false;

            client2.OnConnect(request =>
            {
                client1 = new MultiClient(new MultiClientOptions {
                    SeedHex = seed1
                });

                client1.OnConnect(request =>
                {
                    var response = client1.SendAsync <string>(address2, expectedRequestText);

                    Assert.NotNull(response.Result);
                    Assert.Equal(expectedResponseText, response.Result);

                    finished = true;
                });
            });

            client1.CloseAsync();
            client2.CloseAsync();

            Assert.True(finished);
        }
コード例 #7
0
    private void Start()
    {
        //find the team system and store ourselves there
        FindObjectOfType <TeamSystem>().playerListUI = this;

        //get all of the players from the client and create playerpannels for them
        MultiClient client = FindObjectOfType <MultiClient>();

        foreach (int key in client.gamePlayers.Keys)
        {
            AddPlayerToTeamList(client.gamePlayers[key].AsPlayerData(), client.gamePlayers[key].team);
        }

        LoadLevelButton.onClick.AddListener(() =>
        {
            FindObjectOfType <LevelSelectUI>().LoadSelectedScene();
        });
    }
コード例 #8
0
    private MultiClient _Connect()
    {
        Debug.Log("Connecting " + inputMethod.ToString() + " at " + IP);
        //make client and connect
        GameObject  client      = Instantiate(gameClientPrefab);
        MultiClient multiClient = client.GetComponent <MultiClient>();

        multiClient.ConnectionIP     = IP;
        multiClient.inputMethod      = inputMethod;
        multiClient.PlayerName       = playerNameInput.text;
        multiClient.spawnableObjects = spawnableObjects;
        multiClient.possibleScenes   = loadableScenes;
        multiClient.ConnectToTcpServer();

        //keep client between scenes
        DontDestroyOnLoad(client);

        return(multiClient);
    }
コード例 #9
0
    public void PlayerSetup(int _clientID, TeamSystem.Team _team, string _name)
    {
        client     = FindObjectOfType <MultiClient>();
        ClientID   = _clientID;
        team       = _team;
        PlayerName = _name;

        nameText.text = PlayerName;

        LocalOwned = ClientID == client._ClientID;

        TeamSystem teamSystem = FindObjectOfType <TeamSystem>();

        if (teamSystem)
        {
            teamSystem.ChangeTeam(_team);
        }

#if UNITY_EDITOR
        Debug.Log(String.Format("Player {0} Spawned in {1}", ClientID, UnityEngine.SceneManagement.SceneManager.GetActiveScene().name));
#endif
    }
コード例 #10
0
        /// <summary>
        /// 分享
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void ApplicationBarIconButton_Click(object sender, EventArgs e)
        {
            UmengLink link = new UmengLink();

            link.Url   = @"http://www.windowsphone.com/zh-cn/search?q=MangoStudio";
            link.Type  = LinkType.Picture;
            link.Title = "丁香医生";
            link.Text  = linkTitle + "    快来下载《丁香医生》查看吧~";
            GetPicBuffer();
            link.ThumbnailImage = images;//只对微信有效

            List <UmengClient> clients = new List <UmengClient>()
            {
                new SinaWeiboClient(umengKey),
                new RenrenClient(umengKey),
                new QzoneClient(umengKey),
                new TencentWeiboClient(umengKey),
                new DoubanClient(umengKey),
                new WeixinClient(umengKey, weixinAppID)
            };
            UmengClient umengClient = new MultiClient(clients);
            var         res         = await umengClient.ShareLinkAsync(link);
        }
コード例 #11
0
 private void Start()
 {
     SelectUI = FindObjectOfType <LevelSelectUI>();
     Client   = FindObjectOfType <MultiClient>();
 }
コード例 #12
0
        public void ShouldSendAndReceiveSessionMessagesCorrectly()
        {
            var seed1 = "d0de404077ede0fdd1dfd15ab2934018fa2f8d1ac1effb4af577dbedc897b0b8";
            var seed2 = "16735a849deaa136ba6030c3695c4cbdc9b275d5d9a9f46b836841ab4a36179e";

            var address1 = "a4a5d152f83fe8802ba1329ed3e31aa2f3492fc1a775ee02f41927103f0cc088";
            var address2 = "7ade8659d490283303beb2f224cff1f3709364ce6765a7132d65ed1a6e10ecf9";

            var data = new List <byte[]>
            {
                new byte[] { 1, 1, 1 },
                new byte[] { 2, 2, 2 },
                new byte[] { 3, 3, 3 },
                new byte[] { 4, 4, 4 },
                new byte[] { 5, 5, 5 },
            };

            var dataCount = data.Count;

            MultiClient client1 = default;
            var         client2 = new MultiClient(new MultiClientOptions {
                SeedHex = seed2
            });

            client2.Listen(new string[] { address1 });

            var finished = false;


            client2.OnConnect(async request =>
            {
                Thread.Sleep(500);

                client1 = new MultiClient(new MultiClientOptions {
                    SeedHex = seed1
                });

                client1.OnConnect(async request =>
                {
                    var session = client1.DialAsync(address2);

                    Assert.Equal(address2, session.RemoteAddress);

                    for (int i = 0; i < dataCount; i++)
                    {
                        session.WriteAsync(data[i]);
                    }
                });
            });

            while (finished == false)
            {
                Thread.Sleep(100);
            }

            Thread.Sleep(1_000);


            client1.CloseAsync();
            client2.CloseAsync();

            Thread.Sleep(PauseBetweenTests);

            Assert.True(finished);
        }
コード例 #13
0
        private async void shareAppBarButton_Click(object sender, RoutedEventArgs e)
        {
            //ProgressGrid.Visibility = Visibility.Visible;
            App.isVisibility = true;

            RenderTargetBitmap mBitmap = new RenderTargetBitmap();
            await mBitmap.RenderAsync(CalendarStackPanel);
            IBuffer buffer = await mBitmap.GetPixelsAsync();

            IStorageFolder mapplicationFolder = ApplicationData.Current.TemporaryFolder;
            IStorageFile saveFile = await mapplicationFolder.CreateFileAsync("Share.png", CreationCollisionOption.OpenIfExists);

            using (var fileStream = await saveFile.OpenAsync(FileAccessMode.ReadWrite))
            {
                var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, fileStream);

                encoder.SetPixelData(
                    BitmapPixelFormat.Bgra8,
                    BitmapAlphaMode.Ignore,
                    (uint)mBitmap.PixelWidth,
                    (uint)mBitmap.PixelHeight,
                    DisplayInformation.GetForCurrentView().LogicalDpi,
                    DisplayInformation.GetForCurrentView().LogicalDpi,
                    buffer.ToArray());
                await encoder.FlushAsync();
            }

            byte[] imageData = null;
            using (var stream = await saveFile.OpenStreamForReadAsync())
            {
                imageData = new byte[stream.Length];
                await stream.ReadAsync(imageData, 0, imageData.Length);
            }

            UmengLink link = new UmengLink();

            //显示平台列表,由用户选择平台进行分享
            List<UmengClient> clients = new List<UmengClient>()
            {
                new SinaWeiboClient(Umeng_App_Key),
                new RenrenClient(Umeng_App_Key),
                //new QzoneClient(Umeng_App_Key),
                new TencentWeiboClient(Umeng_App_Key),
                new DoubanClient(Umeng_App_Key),
            };
            UmengClient umengClient = new MultiClient(clients);

            var res = await umengClient.SharePictureAsync(new UmengPicture(imageData, "快来运动吧") { Title = "图片分享" });
            Debug.WriteLine(res.Status.ToString());
            if (res.Status.ToString() == "Success")
            {
                XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText01);
                XmlNodeList elements = toastXml.GetElementsByTagName("text");
                elements[0].AppendChild(toastXml.CreateTextNode("分享成功"));
                ToastNotification toast = new ToastNotification(toastXml);
                ToastNotificationManager.CreateToastNotifier().Show(toast);

                //从通知中心删除
                await Task.Delay(1000);
                ToastNotificationManager.History.Clear();
            }
            else
            {
                XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText01);
                XmlNodeList elements = toastXml.GetElementsByTagName("text");
                elements[0].AppendChild(toastXml.CreateTextNode("分享失败"));
                ToastNotification toast = new ToastNotification(toastXml);
                ToastNotificationManager.CreateToastNotifier().Show(toast);

                //从通知中心删除
                await Task.Delay(1000);
                ToastNotificationManager.History.Clear();
            }



        }
コード例 #14
0
ファイル: MultiClientTests.cs プロジェクト: hiksa/nkn-sdk-net
        public async Task ShouldSendAndReceiveSessionMessagesCorrectly()
        {
            var seed1 = "d0de404077ede0fdd1dfd15ab2934018fa2f8d1ac1effb4af577dbedc897b0b8";
            var seed2 = "16735a849deaa136ba6030c3695c4cbdc9b275d5d9a9f46b836841ab4a36179e";

            var address1 = "a4a5d152f83fe8802ba1329ed3e31aa2f3492fc1a775ee02f41927103f0cc088";
            var address2 = "7ade8659d490283303beb2f224cff1f3709364ce6765a7132d65ed1a6e10ecf9";

            var data = new List <byte[]>
            {
                new byte[] { 1, 1, 1 },
                new byte[] { 2, 2, 2 },
                new byte[] { 3, 3, 3 },
                new byte[] { 4, 4, 4 },
                new byte[] { 5, 5, 5 },
            };

            var dataCount = data.Count;

            MultiClient client1 = default;
            var         client2 = new MultiClient(new MultiClientOptions {
                SeedHex = seed2
            });

            client2.Listen(new string[] { address1 });

            var finished = false;

            client2.OnSession(session =>
            {
                Task.Delay(500).GetAwaiter().GetResult();

                Assert.Equal(address1, session.RemoteAddress);

                var dataSize = data.Select(x => x.Length).FirstOrDefault();

                for (int i = 0; i < dataCount; i++)
                {
                    var received = session.ReadAsync(dataSize).GetAwaiter().GetResult();

                    Assert.Equal(data[i], received);
                }

                finished = true;

                return(Task.FromResult((object)true));
            });

            client2.OnConnect(async request =>
            {
                await Task.Delay(500);

                client1 = new MultiClient(new MultiClientOptions {
                    SeedHex = seed1
                });

                client1.OnConnect(async request =>
                {
                    var session = await client1.DialAsync(address2);

                    Assert.Equal(address2, session.RemoteAddress);

                    for (int i = 0; i < dataCount; i++)
                    {
                        await session.WriteAsync(data[i]);
                    }
                });

                await Task.Yield();
            });

            while (finished == false)
            {
                await Task.Delay(100);
            }

            await Task.Delay(1_000);

            var closeTasks = new List <Task>
            {
                client1.CloseAsync(),
                client2.CloseAsync()
            };

            await Task.WhenAll(closeTasks);

            await Task.Delay(PauseBetweenTests);

            Assert.True(finished);
        }