예제 #1
0
 public RequestWaterHub(WaterDbContext dbContext, ILogger <RequestWaterHub> logger, UserManager <ApplicationUser> userManager)
 {
     _dbContext           = dbContext;
     _logger              = logger;
     _userManager         = userManager;
     requestorConnections = RequestorConnectionSingleton.Instance;
 }
예제 #2
0
    // Use this for initialization
    void Start()
    {
        choosenCorridorId = 0;
        isCorridorChoosen = false;
        idOfPopup         = 0;
        popupWidth        = (float)(Screen.width * 0.8);
        popupHeight       = (float)(Screen.height * 0.6);
        popupOptionWidth  = (float)(popupWidth * 0.45);
        popupOptionHeight = (float)(popupHeight * 0.4);

        popupBorderSpaceWidth    = (float)(popupWidth * 0.03);
        popupBorderSpaceHeight   = (float)(popupHeight * 0.03);
        popupSpaceBetweenWidth   = (float)(popupWidth * 0.04);
        popupSpaceBetweenHeight  = (float)(popupHeight * 0.04);
        popupHeightSpaceForTitle = (float)(popupHeight * 0.1);

        //Width has 10% of spaces between - 2x3% for border and 4% between
        //Height has 10% of spaces between and 10% for title - 2x3% for border and 4% between
        connectionMap = GameObject.Find("Dungeon").GetComponent <ConnectionMap>();

        //Now we are going to gain some information about near corridors
        listOfAllLevels = GameObject.Find("Dungeon").GetComponent <DungeonManager>().getLevelsArray();

        randomNumber = new System.Random(DateTime.Now.Millisecond);
        int howManyCorridorsToChoose = randomNumber.Next(1, 5);

        corridorsIdArray = new List <int>();

        //Random numbers for dev purposes

        for (int i = 0; i < howManyCorridorsToChoose; i++)
        {
            corridorsIdArray.Add(randomNumber.Next(0, 10));
        }
    }
예제 #3
0
        static void ReadConnections()
        {
            Dictionary <string, ClientConnectionModel> connectionMap = new Dictionary <string, ClientConnectionModel>();

            while (true)
            {
                Thread.Sleep(5000);

                var newConnectionMap = ConnectionMap.GetConnectionMap();

                if (connectionMap.Count == newConnectionMap.Count)
                {
                    continue;
                }

                Console.WriteLine("Connection Created: " + ConnectionMap.Count);

                foreach (KeyValuePair <string, ClientConnectionModel> e in newConnectionMap)
                {
                    Console.WriteLine(string.Format("{0} => {1} => [{2}]", e.Key, e.Value.IsRequesting, string.Join(", ", e.Value.ConnectionIds)));
                }

                connectionMap = newConnectionMap;
            }
        }
예제 #4
0
        public void ConnectionTest()
        {
            var map        = new ConnectionMap();
            var component0 = new Component(0);
            var component1 = new Component(1);
            var component2 = new Component(2);
            var component3 = new Component(3);
            var component4 = new Component(4);
            var component5 = new Component(5);
            var component6 = new Component(6);
            var component7 = new Component(7);
            var component8 = new Component(8);
            var component9 = new Component(9);

            map.Union(component0, component1);
            map.Union(component2, component3);
            map.Union(component4, component5);
            map.Union(component6, component2);
            map.Union(component7, component8);
            map.Union(component8, component0);

            Assert.IsTrue(map.Connected(component7, component0));
            Assert.IsFalse(map.Connected(component0, component2));

            map.Union(component0, component2);

            Assert.IsTrue(map.Connected(component6, component7));
            Assert.IsFalse(map.Connected(component9, component0));
            Assert.IsFalse(map.Connected(component9, component3));
        }
        public async Task <IActionResult> SendMessageAsync([FromBody] MessageViewModel message)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            var msg = Mapper.Map <Message>(message);

            msg.Date = DateTime.Now;
            var sentMsg = await ChatContext.MessageManager.SendMessageAsync(msg);

            if (sentMsg == null)
            {
                ModelState.AddModelError("Invalid Message", "ChatId is not valid !");
                return(BadRequest(ModelState));
            }
            var sentMsgDto = Mapper.Map <MessageViewModel>(sentMsg);

            if (ConnectionMap.GetConnections(ChatContext.CurrentUser.Id).Count() > 1)
            {
                _ = HubContext.Clients.Group(sentMsgDto.ChatId).SendAsync(SignalRClientMethod.ReceiveMessage, sentMsgDto);
                return(Ok());
            }

            else
            {
                _ = HubContext.Clients.GroupExcept(sentMsgDto.ChatId, ConnectionMap.GetConnections(ChatContext.CurrentUser.Id).First()).SendAsync(SignalRClientMethod.ReceiveMessage, sentMsgDto);
                return(Ok(sentMsgDto));
            }
        }
예제 #6
0
        public void ClientCommand(string message)
        {
            var json       = Newtonsoft.Json.JsonConvert.DeserializeObject <RequestMessage>(message);
            var connection = ConnectionMap.GetConnectionMap(json.clientId);

            if (connection.Value.IsRequesting)
            {
                return;
            }

            var paramMessage = Newtonsoft.Json.JsonConvert.DeserializeObject <RequestParameter>(json.message);

            if (paramMessage.TipeRepository.Contains("DATABASE"))
            {
                connection.Value.IsRequesting = true;
            }

            System.Collections.Generic.List <string> connValue = connection.Value.ConnectionIds.ToList();
            var context = GlobalHost.ConnectionManager.GetHubContext <MonitorHub>();

            for (int iClient = 0; iClient < connValue.Count; iClient++)
            {
                string connID = connValue[iClient];
                context.Clients.Client(connID).addMessage(json.message);
            }
        }
예제 #7
0
        static ConnectionMap GetInputMap(ConnectionMap result, int noOfInitialNodes)
        {
            ConnectionMap input = ConnectionMap.CreateEmpty(Connection.Removed, noOfInitialNodes);

            input.AddReverse(result);
            return(input);
        }
예제 #8
0
        public async Task <IActionResult> Accept([FromRoute] string requestId)
        {
            var contact = await ChatContext.ContactManager.AcceptAddFriendRequestAsync(requestId);

            if (contact != null)
            {
                var contactDto  = Mapper.Map <ContactViewModel>(contact);
                var currUserDto = Mapper.Map <ContactViewModel>(ChatContext.CurrentUser);

                var contactConnections = new List <string>(ConnectionMap.GetConnections(contact.Id));
                _ = HubContext.Clients.Clients(contactConnections).SendAsync(SignalRClientMethod.ReceiveFriendRequestResponse, requestId, currUserDto);

                var currConnections = new List <string>(ConnectionMap.GetConnections(ChatContext.CurrentUser.Id));
                _ = HubContext.Clients.Clients(currConnections).SendAsync(SignalRClientMethod.ReceiveFriendRequestResponse, requestId, contactDto);

                var chat = await ChatContext.ChatManager.GetChatWithAsync(contact.Id);

                foreach (var connection in contactConnections.Concat(currConnections))
                {
                    _ = HubContext.Groups.AddToGroupAsync(connection, chat.Id);
                }

                return(Ok(new { requestId, contact = contactDto }));
            }
            return(BadRequest());
        }
예제 #9
0
    public static List <IElectricityIO> FindPossibleConnections(Vector2 searchVec, Matrix matrix, HashSet <PowerTypeCategory> CanConnectTo, ConnPoint ConnPoints)
    {
        List <IElectricityIO> possibleConns = new List <IElectricityIO>();
        List <IElectricityIO> connections   = new List <IElectricityIO>();
        int progress = 0;

        searchVec.x -= 1;
        searchVec.y -= 1;
        for (int x = 0; x < 3; x++)
        {
            for (int y = 0; y < 3; y++)
            {
                Vector3Int pos = new Vector3Int((int)searchVec.x + x,
                                                (int)searchVec.y + y, 0);
                var conns = matrix.GetElectricalConnections(pos);
                foreach (IElectricityIO io in conns)
                {
                    possibleConns.Add(io);
                    if (CanConnectTo.Contains
                            (io.InData.Categorytype))
                    {
                        //Check if InputPosition and OutputPosition connect with this wire
                        if (ConnectionMap.IsConnectedToTile(ConnPoints, (AdjDir)progress, io.GetConnPoints()))
                        {
                            connections.Add(io);
                        }
                    }
                }
                progress++;
            }
        }
        return(connections);
    }
예제 #10
0
    void FindPossibleConnections()
    {
        possibleConns.Clear();
        connections.Clear();
        int     progress  = 0;
        Vector2 searchVec = transform.localPosition;

        searchVec.x -= 1;
        searchVec.y -= 1;
        for (int x = 0; x < 3; x++)
        {
            for (int y = 0; y < 3; y++)
            {
                Vector3Int pos = new Vector3Int((int)searchVec.x + x,
                                                (int)searchVec.y + y, 0);
                var conns = matrix.GetElectricalConnections(pos);

                foreach (IElectricityIO io in conns)
                {
                    possibleConns.Add(io);

                    //Check if InputPosition and OutputPosition connect with this wire
                    if (ConnectionMap.IsConnectedToTile(GetConnPoints(), (AdjDir)progress, io.GetConnPoints()))
                    {
                        connections.Add(io);
                    }
                }
                progress++;
            }
        }
    }
 public RegisteredUsersController(ILogger <RegisteredUsersController> logger,
                                  IHubContext <RequestWaterHub> requestorsHubContext, WaterDbContext dbContext)
 {
     _logger = logger;
     _requestorsHubContext = requestorsHubContext;
     _requestorConnections = RequestorConnectionSingleton.Instance;
     _dbContext            = dbContext;
 }
 public DonateWaterHub(ILogger <DonateWaterHub> logger, IHubContext <RequestWaterHub> requestHubContext, UserManager <ApplicationUser> userManager)
 {
     _logger               = logger;
     _requestHubContext    = requestHubContext;
     _userManager          = userManager;
     _donatorConnections   = DonatorConnectionSingleton.Instance;
     _requestorConnections = RequestorConnectionSingleton.Instance;
 }
예제 #13
0
        private void HandleOnEndpointConnected(object sender, EndpointEventArgs e)
        {
            var map = new ConnectionMap(e.Endpoint)
            {
                NextConnectionTime         = m_Now() + m_MaximumTimeBetweenConnectionConfirmations,
                NumberOfConnectionFailures = 0,
            };

            m_RegisteredConnections.TryAdd(e.Endpoint, map);
        }
예제 #14
0
        public async Task <IActionResult> Remove([FromRoute] string requestId)
        {
            var request = await ChatContext.ContactManager.RemoveFriendRequestByIdAsync(requestId);

            if (request != null)
            {
                var userId      = request.ToUserId == ChatContext.CurrentUser.Id ? request.FromUserId : request.ToUserId;
                var connections = new List <string>(ConnectionMap.GetConnections(userId));
                _ = HubContext.Clients.Clients(connections).SendAsync(SignalRClientMethod.ReceiveFriendRequestResponse, requestId, null);
                return(Ok(true));
            }
            return(BadRequest());
        }
예제 #15
0
        public void SendMessage(string username, string message)
        {
            var           connection = ConnectionMap.GetConnectionMap(username);
            List <string> connValue  = connection.Value.ConnectionIds.ToList();

            var context = GlobalHost.ConnectionManager.GetHubContext <MonitorHub>();

            for (int iClient = 0; iClient < connValue.Count; iClient++)
            {
                string connID = connValue[iClient];
                context.Clients.User(connID).addMessage(message);
            }
        }
예제 #16
0
        static ConnectionMap ExtractMap(IList <TrackableNode> processed)
        {
            Connection[] connections = new Connection[processed.Count];
            int[]        map         = new int[processed.Count];

            for (int i = 0; i < processed.Count; ++i)
            {
                connections[i] = processed[i].Type.Type;
                map[i]         = processed[i].Type.J;
            }

            ConnectionMap backwardsMap = new ConnectionMap(connections, map);

            return(backwardsMap);
        }
예제 #17
0
        public async Task <IActionResult> Send([FromRoute] string toUserId)
        {
            var request = await ChatContext.ContactManager.SendAddFriendRequestAsync(toUserId);

            if (request != null)
            {
                var requestDto = Mapper.Map <FriendRequestViewModel>(request);

                var connections = new List <string>(ConnectionMap.GetConnections(request.ToUserId));

                _ = HubContext.Clients.Clients(connections).SendAsync(SignalRClientMethod.ReceiveFriendRequest, requestDto);
                return(Ok(requestDto));
            }
            return(BadRequest());
        }
예제 #18
0
        public MappedVoronoiGrid CreateGrid(VoronoiNodes nodes, int firstCornerNodeIndice)
        {
            List <TrackableNode> mesherNodes = WrapInMesherNodes(nodes.Nodes);
            VoronoiGrid          grid        = CreateGrid(mesherNodes, firstCornerNodeIndice);

            ConnectionMap     resultMap  = ExtractMap(base.mesh.Nodes);
            ConnectionMap     inputMap   = GetInputMap(resultMap, nodes.Count);
            MappedVoronoiGrid movingGrid = new MappedVoronoiGrid
            {
                Result = grid,
                InputNodesToResultNodes = inputMap,
                ResultNodesToInputNodes = resultMap
            };

            return(movingGrid);
        }
예제 #19
0
        public override Task OnDisconnected(bool stopCalled)
        {
            string key          = Context.QueryString["Key"];
            string connectionId = Context.ConnectionId;

            if (string.IsNullOrEmpty(key))
            {
                return(base.OnDisconnected(stopCalled));
            }

            ConnectionMap.Remove(key, connectionId);

            BroadcastConnectionMap();

            return(base.OnDisconnected(stopCalled));
        }
예제 #20
0
        public override Task OnConnected()
        {
            string key          = Context.QueryString["Key"];
            string connectionId = Context.ConnectionId;

            if (string.IsNullOrEmpty(key))
            {
                return(base.OnConnected());
            }

            ConnectionMap.Add(key, connectionId);

            BroadcastConnectionMap();

            return(base.OnConnected());
        }
예제 #21
0
    void FindPossibleConnections()
    {
        var conns = matrix.GetElectricalConnections(Vector3Int.RoundToInt(transform.localPosition));

        foreach (IElectricityIO io in conns)
        {
            //Check if InputPosition and OutputPosition connect with this wire
            if (ConnectionMap.IsConnectedToTile(GetConnPoints(), AdjDir.Overlap, io.GetConnPoints()) &&
                io.GameObject() != gameObject)
            {
                connectedWire = io;
                connected     = true;
                break;
            }
        }
    }
예제 #22
0
    public int randomizeChoiseOfCorridor()
    {
        int           howManyAreThere;
        int           randomizedOne;
        ConnectionMap conMap = dungeonCanvas.GetComponent <ConnectionMap>();

        System.Random randomNumber = new System.Random();
        howManyAreThere = conMap.getCorridorDependenciesList()[currentCorridorId].getNeighbourCorridor().Count;
        randomizedOne   = randomNumber.Next(0, howManyAreThere);
        string devLog = "Out of following neighbours: ";

        for (int i = 0; i < howManyAreThere; i++)
        {
            devLog += " " + conMap.getCorridorDependenciesList()[currentCorridorId].getSpecificNeighbourCorridor(i).ToString();
        }
        Debug.Log(devLog + " of corridor: " + currentCorridorId);
        return(conMap.getCorridorDependenciesList()[currentCorridorId].getSpecificNeighbourCorridor(randomizedOne));
    }
예제 #23
0
    // Use this for initialization
    void Start()
    {
        //Array of levels
        levelsArray = new List <DungeonLevel>();

        tempChunkObject = new DungeonLevelChunk();
        tempChunkObject.setWasCreated(false);
        conMap = GameObject.Find("Dungeon").GetComponent <ConnectionMap>();
        numberOfDungeonLevels = conMap.getNumberOfCorridors();

        levelChunks = new List <DungeonLevelChunk>();

        for (int i = 0; i < numberOfDungeonLevels; i++)
        {
            tempChunkObject.setIdOfChunk(i);
            levelChunks.Add(tempChunkObject);
        }
    }
    public static HashSet <IntrinsicElectronicData> SwitchCaseConnections(Vector2 searchVec,
                                                                          Matrix matrix,
                                                                          HashSet <PowerTypeCategory> CanConnectTo,
                                                                          Connection connectionPoint,
                                                                          IntrinsicElectronicData OIinheritance,
                                                                          HashSet <IntrinsicElectronicData> connections,
                                                                          // used in SurroundingTiles connection
                                                                          Connection otherConnectionPoint = Connection.NA)
    {
        var searchVecInt = new Vector3Int((int)searchVec.x, (int)searchVec.y, 0);

        {           // LogError Duplicate wires
            var eConnsAtSearchVec = matrix.GetElectricalConnections(searchVecInt);
            foreach (var con in eConnsAtSearchVec)
            {
                if (OIinheritance != con)
                {
                    if ((OIinheritance.WireEndA == con.WireEndA && OIinheritance.WireEndB == con.WireEndB) ||
                        (OIinheritance.WireEndA == con.WireEndB && OIinheritance.WireEndB == con.WireEndA))
                    {
                        Logger.LogErrorFormat("{0} < duplicate Please remove {1}",
                                              Category.Electrical,
                                              searchVecInt,
                                              OIinheritance);
                    }
                }
            }

            eConnsAtSearchVec.Clear();
            ElectricalPool.PooledFPCList.Add(eConnsAtSearchVec);
        }

        if (connectionPoint == Connection.SurroundingTiles)
        {
            foreach (var dir in NeighbourDirections)
            {
                // check all nearby connections except connection that is specified in other wire end
                if (dir.Key == otherConnectionPoint)
                {
                    continue;
                }

                var pos   = searchVecInt + dir.Value;
                var conns = matrix.GetElectricalConnections(pos);

                // get connections pointing towards our tile [ex. if neighbour is at north, get all south connections(SW, S, SE)]
                HashSet <Connection> possibleConnections = ConnectionMap.GetConnectionsTargeting(dir.Key);
                if (possibleConnections != null)
                {
                    foreach (var con in conns)
                    {
                        if (OIinheritance != con &&
                            CanConnectTo.Contains(con.Categorytype)
                            // check if possibleConnections contains our WireEnd A or B
                            && (possibleConnections.Contains(con.WireEndA) || possibleConnections.Contains(con.WireEndB))
                            // check if contains to avoid errors
                            && !connections.Contains(con))
                        {
                            connections.Add(con);
                        }
                    }
                }

                conns.Clear();
                ElectricalPool.PooledFPCList.Add(conns);
            }

            return(connections);
        }

        // Connect to machine connnectors
        if (connectionPoint == Connection.MachineConnect)
        {
            foreach (var dir in MachineConnectorDirections)
            {
                var pos   = searchVecInt + dir;
                var conns = matrix.GetElectricalConnections(pos);
                foreach (var con in conns)
                {
                    if (OIinheritance != con && CanConnectTo.Contains(con.Categorytype) &&
                        ConnectionMap.IsConnectedToTile(Connection.MachineConnect, con.GetConnPoints()) && !connections.Contains(con))
                    {
                        connections.Add(con);
                    }
                }

                conns.Clear();
                ElectricalPool.PooledFPCList.Add(conns);
            }
            return(connections);
        }

        // Make a vector representing the connection direction
        Vector3Int connVectorInt = ConnectionMap.GetDirectionFromConnection(connectionPoint);
        Vector3Int position      = searchVecInt + connVectorInt;

        // Connect wires
        {
            var  eConnsAtPosition = matrix.GetElectricalConnections(position);
            bool connectionsAdded = false;
            foreach (var con in eConnsAtPosition)
            {
                if (CanConnectTo.Contains(con.Categorytype) &&
                    ConnectionMap.IsConnectedToTile(connectionPoint, con.GetConnPoints()))
                {
                    connections.Add(con);
                    connectionsAdded = true;
                }
            }
            eConnsAtPosition.Clear();
            ElectricalPool.PooledFPCList.Add(eConnsAtPosition);

            if (connectionsAdded)
            {
                return(connections);
            }
        }

        // Connect to overlap
        {
            var eConnsAtSearchVec = matrix.GetElectricalConnections(searchVecInt);
            foreach (var con in eConnsAtSearchVec)
            {
                if (OIinheritance != con && CanConnectTo.Contains(con.Categorytype) &&
                    ConnectionMap.IsConnectedToTileOverlap(connectionPoint, con.GetConnPoints()))
                {
                    connections.Add(con);
                }
            }
            eConnsAtSearchVec.Clear();
            ElectricalPool.PooledFPCList.Add(eConnsAtSearchVec);
        }
        return(connections);
    }
    public static HashSet <ElectricalOIinheritance> SwitchCaseConnections(Vector2 searchVec, Matrix matrix, HashSet <PowerTypeCategory> CanConnectTo, Connection ConnPoints, ElectricalOIinheritance OIinheritance)
    {
        HashSet <ElectricalOIinheritance> connections = new HashSet <ElectricalOIinheritance>();
        Connection Direction      = Connection.Overlap;
        Vector3Int Position       = new Vector3Int();
        bool       MachineConnect = false;

        switch (ConnPoints)
        {
        case Connection.North:
        {
            Direction = Connection.North;
            Position  = new Vector3Int((int)searchVec.x + 0, (int)searchVec.y + 1, 0);
        }
        break;

        case Connection.NorthEast:
        {
            Direction = Connection.NorthEast;
            Position  = new Vector3Int((int)searchVec.x + 1, (int)searchVec.y + 1, 0);
        }
        break;

        case Connection.East:
        {
            Direction = Connection.East;
            Position  = new Vector3Int((int)searchVec.x + 1, (int)searchVec.y + 0, 0);
        }
        break;

        case Connection.SouthEast:
        {
            Direction = Connection.SouthEast;
            Position  = new Vector3Int((int)searchVec.x + 1, (int)searchVec.y - 1, 0);
        }
        break;

        case Connection.South:
        {
            Direction = Connection.South;
            Position  = new Vector3Int((int)searchVec.x + 0, (int)searchVec.y - 1, 0);
        }
        break;

        case Connection.SouthWest:
        {
            Direction = Connection.SouthWest;
            Position  = new Vector3Int((int)searchVec.x + -1, (int)searchVec.y - 1, 0);
        }
        break;

        case Connection.West:
        {
            Direction = Connection.West;
            Position  = new Vector3Int((int)searchVec.x + -1, (int)searchVec.y + 0, 0);
        }
        break;

        case Connection.NorthWest:
        {
            Direction = Connection.NorthWest;
            Position  = new Vector3Int((int)searchVec.x + -1, (int)searchVec.y + 1, 0);
        }
        break;

        case Connection.Overlap:
        {
            Direction = Connection.Overlap;
            Position  = new Vector3Int((int)searchVec.x + 0, (int)searchVec.y + 0, 0);
        }
        break;

        case Connection.MachineConnect:
        {
            Direction      = Connection.MachineConnect;
            MachineConnect = true;
        }
        break;
        }
        Vector3Int PositionE = new Vector3Int((int)searchVec.x, (int)searchVec.y, 0);
        var        Econns    = matrix.GetElectricalConnections(PositionE);

        foreach (var con in Econns)
        {
            if (OIinheritance != con)
            {
                if ((OIinheritance.WireEndA == con.WireEndA && OIinheritance.WireEndB == con.WireEndB) ||
                    (OIinheritance.WireEndA == con.WireEndB && OIinheritance.WireEndB == con.WireEndA))
                {
                    Logger.LogErrorFormat("{0} < duplicate Please remove {1}", Category.Electrical, PositionE, OIinheritance.InData.Categorytype);
                }
            }
        }
        if (!MachineConnect)
        {
            var conns = matrix.GetElectricalConnections(Position);
            foreach (var con in conns)
            {
                if (CanConnectTo.Contains(con.InData.Categorytype))
                {
                    if (ConnectionMap.IsConnectedToTile(Direction, con.GetConnPoints()))
                    {
                        connections.Add(con);
                    }
                }
            }
            if (connections.Count == 0)
            {
                Position = new Vector3Int((int)searchVec.x, (int)searchVec.y, 0);
                conns    = matrix.GetElectricalConnections(Position);
                foreach (var con in conns)
                {
                    if (OIinheritance != con)
                    {
                        if (CanConnectTo.Contains(con.InData.Categorytype))
                        {
                            if (ConnectionMap.IsConnectedToTileOverlap(Direction, con.GetConnPoints()))
                            {
                                connections.Add(con);
                            }
                        }
                    }
                }
            }
        }
        else
        {
            for (int x = 0; x < 3; x++)
            {
                for (int y = 0; y < 3; y++)
                {
                    Vector3Int pos   = new Vector3Int((int)searchVec.x + (x - 1), (int)searchVec.y + (y - 1), 0);
                    var        conns = matrix.GetElectricalConnections(pos);
                    foreach (var con in conns)
                    {
                        if (OIinheritance != con)
                        {
                            if (CanConnectTo.Contains(con.InData.Categorytype))
                            {
                                if (ConnectionMap.IsConnectedToTile(Direction, con.GetConnPoints()))
                                {
                                    connections.Add(con);
                                }
                            }
                        }
                    }
                }
            }
        }
        return(connections);
    }
예제 #26
0
        public void BroadcastConnectionMap()
        {
            var context = GlobalHost.ConnectionManager.GetHubContext <ServerMonitorHub>();

            context.Clients.All.addMessage(ConnectionMap.GetConnectionMap());
        }
예제 #27
0
 public ChatCoreHub(ConnectionMap connectionMap, ChatCoreContext chatContext)
 {
     ConnectionMap = connectionMap;
     ChatContext   = chatContext;
 }
    public static HashSet <IntrinsicElectronicData> SwitchCaseConnections(Vector2 searchVec,
                                                                          Matrix matrix,
                                                                          HashSet <PowerTypeCategory> CanConnectTo,
                                                                          Connection ConnPoints,
                                                                          IntrinsicElectronicData OIinheritance,
                                                                          HashSet <IntrinsicElectronicData> connections)
    {
        var searchVecInt = new Vector3Int((int)searchVec.x, (int)searchVec.y, 0);

        {           // LogError Duplicate wires
            var eConnsAtSearchVec = matrix.GetElectricalConnections(searchVecInt);
            foreach (var con in eConnsAtSearchVec)
            {
                if (OIinheritance != con)
                {
                    if ((OIinheritance.WireEndA == con.WireEndA && OIinheritance.WireEndB == con.WireEndB) ||
                        (OIinheritance.WireEndA == con.WireEndB && OIinheritance.WireEndB == con.WireEndA))
                    {
                        Logger.LogErrorFormat("{0} < duplicate Please remove {1}",
                                              Category.Electrical,
                                              searchVecInt,
                                              OIinheritance);
                    }
                }
            }

            eConnsAtSearchVec.Clear();
            ElectricalPool.PooledFPCList.Add(eConnsAtSearchVec);
        }

        // Connect to machine connnectors
        if (ConnPoints == Connection.MachineConnect)
        {
            foreach (var dir in MachineConnectorDirections)
            {
                var pos   = searchVecInt + dir;
                var conns = matrix.GetElectricalConnections(pos);
                foreach (var con in conns)
                {
                    if (OIinheritance != con && CanConnectTo.Contains(con.Categorytype) &&
                        ConnectionMap.IsConnectedToTile(Connection.MachineConnect, con.GetConnPoints()))
                    {
                        connections.Add(con);
                    }
                }

                conns.Clear();
                ElectricalPool.PooledFPCList.Add(conns);
            }
            return(connections);
        }

        // Make a vector representing the connection direction
        Vector3Int connVectorInt;

        switch (ConnPoints)
        {
        case Connection.North:
        {
            connVectorInt = new Vector3Int(0, 1, 0);
            break;
        }

        case Connection.NorthEast:
        {
            connVectorInt = new Vector3Int(1, 1, 0);
            break;
        }

        case Connection.East:
        {
            connVectorInt = new Vector3Int(1, 0, 0);
            break;
        }

        case Connection.SouthEast:
        {
            connVectorInt = new Vector3Int(1, -1, 0);
            break;
        }

        case Connection.South:
        {
            connVectorInt = new Vector3Int(0, -1, 0);
            break;
        }

        case Connection.SouthWest:
        {
            connVectorInt = new Vector3Int(-1, -1, 0);
            break;
        }

        case Connection.West:
        {
            connVectorInt = new Vector3Int(-1, 0, 0);
            break;
        }

        case Connection.NorthWest:
        {
            connVectorInt = new Vector3Int(-1, 1, 0);
            break;
        }

        case Connection.Overlap:
        {
            connVectorInt = new Vector3Int(0, 0, 0);
            break;
        }

        default:
        {
            // No defined behaviour for any other types
            return(connections);
        }
        }

        Vector3Int position = searchVecInt + connVectorInt;

        // Connect wires
        {
            var  eConnsAtPosition = matrix.GetElectricalConnections(position);
            bool connectionsAdded = false;
            foreach (var con in eConnsAtPosition)
            {
                if (CanConnectTo.Contains(con.Categorytype) &&
                    ConnectionMap.IsConnectedToTile(ConnPoints, con.GetConnPoints()))
                {
                    connections.Add(con);
                    connectionsAdded = true;
                }
            }
            eConnsAtPosition.Clear();
            ElectricalPool.PooledFPCList.Add(eConnsAtPosition);

            if (connectionsAdded)
            {
                return(connections);
            }
        }

        // Connect to overlap
        {
            var eConnsAtSearchVec = matrix.GetElectricalConnections(searchVecInt);
            foreach (var con in eConnsAtSearchVec)
            {
                if (OIinheritance != con && CanConnectTo.Contains(con.Categorytype) &&
                    ConnectionMap.IsConnectedToTileOverlap(ConnPoints, con.GetConnPoints()))
                {
                    connections.Add(con);
                }
            }
            eConnsAtSearchVec.Clear();
            ElectricalPool.PooledFPCList.Add(eConnsAtSearchVec);
        }
        return(connections);
    }
예제 #29
0
    public static HashSet <IntrinsicElectronicData> SwitchCaseConnections(Vector2 searchVec,
                                                                          Matrix matrix,
                                                                          HashSet <PowerTypeCategory> CanConnectTo,
                                                                          Connection ConnPoints,
                                                                          IntrinsicElectronicData OIinheritance,
                                                                          HashSet <IntrinsicElectronicData> connections)
    {
        var Direction      = Connection.Overlap;
        var Position       = new Vector3Int();
        var MachineConnect = false;

        switch (ConnPoints)
        {
        case Connection.North:
        {
            Direction = Connection.North;
            Position  = new Vector3Int((int)searchVec.x + 0, (int)searchVec.y + 1, 0);
        }
        break;

        case Connection.NorthEast:
        {
            Direction = Connection.NorthEast;
            Position  = new Vector3Int((int)searchVec.x + 1, (int)searchVec.y + 1, 0);
        }
        break;

        case Connection.East:
        {
            Direction = Connection.East;
            Position  = new Vector3Int((int)searchVec.x + 1, (int)searchVec.y + 0, 0);
        }
        break;

        case Connection.SouthEast:
        {
            Direction = Connection.SouthEast;
            Position  = new Vector3Int((int)searchVec.x + 1, (int)searchVec.y - 1, 0);
        }
        break;

        case Connection.South:
        {
            Direction = Connection.South;
            Position  = new Vector3Int((int)searchVec.x + 0, (int)searchVec.y - 1, 0);
        }
        break;

        case Connection.SouthWest:
        {
            Direction = Connection.SouthWest;
            Position  = new Vector3Int((int)searchVec.x + -1, (int)searchVec.y - 1, 0);
        }
        break;

        case Connection.West:
        {
            Direction = Connection.West;
            Position  = new Vector3Int((int)searchVec.x + -1, (int)searchVec.y + 0, 0);
        }
        break;

        case Connection.NorthWest:
        {
            Direction = Connection.NorthWest;
            Position  = new Vector3Int((int)searchVec.x + -1, (int)searchVec.y + 1, 0);
        }
        break;

        case Connection.Overlap:
        {
            Direction = Connection.Overlap;
            Position  = new Vector3Int((int)searchVec.x + 0, (int)searchVec.y + 0, 0);
        }
        break;

        case Connection.MachineConnect:
        {
            Direction      = Connection.MachineConnect;
            MachineConnect = true;
        }
        break;
        }

        var PositionE = new Vector3Int((int)searchVec.x, (int)searchVec.y, 0);
        var Econns    = matrix.GetElectricalConnections(PositionE);

        foreach (var con in Econns)
        {
            if (OIinheritance != con)
            {
                if (OIinheritance.WireEndA == con.WireEndA && OIinheritance.WireEndB == con.WireEndB ||
                    OIinheritance.WireEndA == con.WireEndB && OIinheritance.WireEndB == con.WireEndA)
                {
                    Logger.LogErrorFormat("{0} < duplicate Please remove {1}",
                                          Category.Electrical,
                                          PositionE,
                                          OIinheritance);
                }
            }
        }
        Econns.Clear();
        ElectricalPool.PooledFPCList.Add(Econns);
        if (!MachineConnect)
        {
            var conns = matrix.GetElectricalConnections(Position);
            foreach (var con in conns)
            {
                if (CanConnectTo.Contains(con.Categorytype))
                {
                    if (ConnectionMap.IsConnectedToTile(Direction, con.GetConnPoints()))
                    {
                        connections.Add(con);
                    }
                }
            }

            conns.Clear();
            ElectricalPool.PooledFPCList.Add(conns);
            if (connections.Count == 0)
            {
                Position = new Vector3Int((int)searchVec.x, (int)searchVec.y, 0);
                conns    = matrix.GetElectricalConnections(Position);
                foreach (var con in conns)
                {
                    if (OIinheritance != con)
                    {
                        if (CanConnectTo.Contains(con.Categorytype))
                        {
                            if (ConnectionMap.IsConnectedToTileOverlap(Direction, con.GetConnPoints()))
                            {
                                connections.Add(con);
                            }
                        }
                    }
                }
                conns.Clear();
                ElectricalPool.PooledFPCList.Add(conns);
            }
        }
        else
        {
            foreach (var Direction_ in MachineConnectorDirections)
            {
                var pos = new Vector3Int((int)searchVec.x + (int)Direction_.x,
                                         (int)searchVec.y + (int)Direction_.y, 0);
                var conns = matrix.GetElectricalConnections(pos);
                foreach (var con in conns)
                {
                    if (OIinheritance != con)
                    {
                        if (CanConnectTo.Contains(con.Categorytype))
                        {
                            if (ConnectionMap.IsConnectedToTile(Direction, con.GetConnPoints()))
                            {
                                connections.Add(con);
                            }
                        }
                    }
                }
                conns.Clear();
                ElectricalPool.PooledFPCList.Add(conns);
            }
        }
        return(connections);
    }