예제 #1
0
    public void RunService(int serverPort)
    {
        if (m_actorManager != null)
        {
            return;
        }

        m_actorManager = new ActorManager();

        m_watchDogActor = new WatchDogActor(this);
        //Id为1的Actor, 不与Agent绑定,也没有U3DId标识
        m_actorManager.AddActor(m_watchDogActor, true);

        m_worldActor = new WorldActor(this);
        m_watchDogActor.WorldActor = m_worldActor;
        //Id为2的Actor, 不与Agent绑定,也没有U3DId标识
        m_actorManager.AddActor(m_worldActor, true);

        m_serverActor = new ServerActor(this);
        m_watchDogActor.ServerActor = m_serverActor;
        m_serverActor.WatchDogActor = m_watchDogActor;
        //Id为3的Actor, 不与Agent绑定,也没有U3DId标识
        m_actorManager.AddActor(m_serverActor, true);

        //启动服务器
        m_serverActor.Run(serverPort);
    }
예제 #2
0
 internal ResponseCompletes(ServerActor serverActor, Request request, RequestResponseContext requestResponseContext, Header?correlationId) : base(serverActor.Stage.Scheduler)
 {
     _serverActor            = serverActor;
     _request                = request;
     _requestResponseContext = requestResponseContext;
     _correlationId          = correlationId;
 }
예제 #3
0
    public PlayerActor(uint agentId, MonoBehaviour mono) : base(mono)
    {
        AgentId = agentId;
        ServerActor server = ActorManager.Instance.GetActor <ServerActor>();

        m_agent       = server.GetAgent(m_agentId);
        m_agent.Actor = this;
        m_worldActor  = ActorManager.Instance.GetActor <WorldActor>();
    }
예제 #4
0
 public void StopServerActor()
 {
     if (m_serverActor != null)
     {
         m_serverActor.End();
         m_actorManager.RemoveActor(m_serverActor.Id);
         m_serverActor = null;
     }
 }
예제 #5
0
    public static void Disconnect(ServerClient disconnectedClient)
    {
        //Session manager - UNTESTED
        try
        {
            UserSession ses = new UserSession()
            {
                UserID = disconnectedClient.clientName, InGame = false, Request = SessionRequest.SetStatus
            };
            byte[] data = TCPHelper.MessageBytes(ses);
            Server.SessionClient.GetStream().Write(data, 0, data.Length);
        }
        catch
        {
        }

        ServerActor disconnectedActor = null;

        foreach (ServerActor actor in Players)
        {
            if (actor.Client == disconnectedClient)
            {
                disconnectedActor = actor;
                SendDisconnectNotification(disconnectedActor.PlayerID);
            }
        }
        if (disconnectedActor != null)
        {
            //Gem spillerens state
            List <PlayerDataModel> saveStates = new List <PlayerDataModel>();
            saveStates.Add(new PlayerDataModel()
            {
                PlayerDataRequest = PlayerDataRequest.Update,
                Online            = false,
                PositionX         = disconnectedActor.startingX,
                PositionY         = disconnectedActor.startingY,
                UserID            = disconnectedActor.Client.clientName,
                ResponseExpected  = false
            });
            byte[] data = TCPHelper.MessageBytesNewton(saveStates);
            databaseClient.GetStream().Write(data, 0, data.Length);

            //Fjern fra spillet
            MapGrid.grid[disconnectedActor.startingX, disconnectedActor.startingY].GetComponent <Cell>().UnoccupyCell();
            ChangedCells.Add(Server.MapGrid.grid[disconnectedActor.startingX, disconnectedActor.startingY].GetComponent <Cell>(), 0);
            Players.Remove(disconnectedActor);
            GameObject.Destroy(disconnectedActor.gameObject);
            Clients.Remove(disconnectedClient);
        }
    }
예제 #6
0
    /// <summary>
    /// Instantiates a player actor in the scene
    /// </summary>
    public ServerActor SpawnActor(Vector2 index, string name)
    {
        UnityEngine.Object playerPrefab = Resources.Load("Prefabs/ServerActor");

        GameObject  actorObject    = (GameObject)GameObject.Instantiate(playerPrefab, Vector3.zero, Quaternion.identity);
        ServerActor actorComponent = actorObject.GetComponent <ServerActor>();

        actorComponent.newX = (int)index.x;
        actorComponent.newY = (int)index.y;
        actorObject.GetComponentInChildren <Text>().text = name;

        actorComponent.Endpoint   = tcpClient.Client.RemoteEndPoint;
        this.OnNewInputsRecieved += actorComponent.NewInputsRecieved;
        actorComponent.Client     = this;
        Server.PlayersConnected++;
        actorComponent.PlayerID = Server.PlayersConnected;

        ClientConnected(actorComponent.PlayerID, actorComponent.CurrentPos);
        Server.Clients.Add(this);
        Server.Players.Add(actorComponent);
        return(actorComponent);
    }
예제 #7
0
 private void CreateTopLevelActors()
 {
     _system.ActorOf(ServerActor.Props(), ActorPaths.ServerActor.Name);
 }
예제 #8
0
 internal ResponseCompletes(ServerActor serverActor, RequestResponseContext requestResponseContext) : this(serverActor, null !, requestResponseContext, null)
예제 #9
0
 internal ServerRequestChannelConsumer(ServerActor serverActor, IDispatcher dispatcher)
 {
     _serverActor = serverActor;
     _dispatcher  = dispatcher;
 }