コード例 #1
0
        static void Main(string[] args)
        {
            var wire = new WireSerializer(new[] { typeof(HelloRequest), typeof(HelloResponse) });

            Serialization.RegisterSerializer(wire, true);


            Console.Title = "服务端";
            var actorid        = "this1234";
            var dbfile         = @"C:\MyFile\Source\Repos\Asp.NetCoreExperiment\Asp.NetCoreExperiment\ProtoActor\ServiceA\data.sqlite";
            var sqliteProvider = new SqliteProvider(new SqliteConnectionStringBuilder()
            {
                DataSource = dbfile
            });

            var localActor = new LocalActor(sqliteProvider, actorid);
            var props      = Actor.FromProducer(() => localActor);

            Remote.RegisterKnownKind("hello", props);
            Remote.Start("127.0.0.1", 12000);
            Console.WriteLine("服务端开始……");
            Console.ReadLine();



            Console.ReadLine();
        }
コード例 #2
0
ファイル: LocalClient.cs プロジェクト: Neebzan/SwaggyNetty
    public IEnumerator ListenToServer()
    {
        Debug.Log("ListenToServer Started");
        //StreamReader reader = new StreamReader(stream);

        byte[] readBuffer = new byte[4];
        while (true)
        {
            int packagesRead = 0;
            while (stream.DataAvailable && packagesRead < 2)
            {
                //Debug.Log("Data received!");

                int bytesRead = 0;

                while (bytesRead < 4)
                {
                    bytesRead += stream.Read(readBuffer, bytesRead, 4 - bytesRead);
                }

                //Debug.Log("4 Bytes received");

                bytesRead = 0;
                byte[] buffer = new byte[BitConverter.ToInt32(readBuffer, 0)];

                while (bytesRead < buffer.Length)
                {
                    bytesRead += stream.Read(buffer, bytesRead, buffer.Length - bytesRead);
                }
                string msg = System.Text.Encoding.UTF8.GetString(buffer);

                string[]    tempMsg = msg.Split(Server.MESSAGE_TYPE_INDICATOR);
                MessageType msgType = (MessageType)Int32.Parse(tempMsg[0]);

                switch (msgType)
                {
                case MessageType.Input:
                    break;

                case MessageType.Disconnect:
                {
                    Debug.Log("Disconnect detected");
                    uint       discPlayerID       = UInt32.Parse(tempMsg[1]);
                    GameObject disconnectedPlayer = null;
                    foreach (var item in actors)
                    {
                        if (item.playerID == discPlayerID)
                        {
                            disconnectedPlayer = item.gameObject;
                            break;
                        }
                    }
                    if (disconnectedPlayer != null)
                    {
                        GameObject.Destroy(disconnectedPlayer);
                    }
                }
                break;

                case MessageType.Connect:
                {
                    //SceneManager.LoadScene("Client");
                    //OnMapLoad();
                    DataCollectionPackage data = JsonUtility.FromJson <DataCollectionPackage>(tempMsg[1]);
                    //PositionDataPackage temp = JsonUtility.FromJson<PositionDataPackage>(tempMsg[1]);
                    map = GameObject.Find("GameMap").GetComponent <GridGenerater>();

                    map.Generate(data.GridDataPackages[0].X, data.GridDataPackages[0].Y);

                    LocalActor t = GameObject.FindGameObjectWithTag("Player").GetComponent <LocalActor>();
                    t.gameObject.GetComponentInChildren <Text>().text = data.PositionDataPackages[0].PlayerName;
                    t.playerID = data.PositionDataPackages[0].PlayerID;
                    t.gameObject.transform.position = data.PositionDataPackages[0].Position;
                    actors.Add(t);
                    //gameObject.transform.position = temp.Position;
                    connected = true;
                    break;
                }

                case MessageType.ServerTick:
                {
                    DataCollectionPackage data = JsonUtility.FromJson <DataCollectionPackage>(tempMsg[1]);
                    for (int i = 0; i < data.PositionDataPackages.Count; i++)
                    {
                        bool playerFound = false;
                        for (int j = 0; j < actors.Count; j++)
                        {
                            if (actors[j].playerID == data.PositionDataPackages[i].PlayerID)
                            {
                                actors[j].gameObject.transform.position = data.PositionDataPackages[i].Position;
                                playerFound = true;
                            }
                        }
                        foreach (var item in data.GridDataPackages)
                        {
                            map.grid[item.X, item.Y].GetComponent <Cell>().SetColor(item.Color);
                            //Debug.Log($"Set Color of tile:{item.X},{item.Y} to {item.Color}");
                        }
                        if (!playerFound)
                        {
                            GameObject actorObject = (GameObject)GameObject.Instantiate(playerPrefab, data.PositionDataPackages[i].Position, Quaternion.identity);
                            actorObject.GetComponentInChildren <Text>().text = data.PositionDataPackages[i].PlayerName;
                            LocalActor temp = actorObject.GetComponent <LocalActor>();
                            temp.playerID = data.PositionDataPackages[i].PlayerID;
                            actors.Add(temp);
                        }
                    }
                    break;
                }

                default:
                    break;
                }


                //gameObject.transform.position = data.PositionDataPackages[playerID].Position;
            }

            packagesRead++;
            //Debug.Log("Read: " + packagesRead + " packages");
            yield return(null);
        }
    }