コード例 #1
0
ファイル: MoonGenDelete.cs プロジェクト: romeov007/imagine-uo
		private static int DeleteMoonGate(Map map, Point3D p)
		{
			Queue<Item> m_Queue = new Queue<Item>();

			IPooledEnumerable eable = map.GetItemsInRange(p, 0);

			foreach (Item item in eable)
			{
				if (item is PublicMoongate)
				{
					int delta = item.Z - p.Z;

					if (delta >= -12 && delta <= 12)
						m_Queue.Enqueue(item);
				}
			}

			eable.Free();

			int m_Count = m_Queue.Count;

			while (m_Queue.Count > 0)
				(m_Queue.Dequeue()).Delete();

			return m_Count;
		}
コード例 #2
0
ファイル: spqueue.cs プロジェクト: hnkien/zguide2
        static void Main(string[] args)
        {
            using (var context = new Context(1))
            {
                using (Socket frontend = context.Socket(SocketType.ROUTER), backend = context.Socket(SocketType.ROUTER))
                {
                    frontend.Bind("tcp://*:5555"); // For Clients
                    backend.Bind("tcp://*:5556"); // For Workers

                    //  Logic of LRU loop
                    //  - Poll backend always, frontend only if 1+ worker ready
                    //  - If worker replies, queue worker as ready and forward reply
                    //    to client if necessary
                    //  - If client requests, pop next worker and send request to it

                    //  Queue of available workers
                    var workerQueue = new Queue<byte[]>();

                    //  Handle worker activity on backend
                    backend.PollInHandler += (socket, revents) =>
                                                 {
                                                     var zmsg = new ZMessage(socket);
                                                     //  Use worker address for LRU routing
                                                     workerQueue.Enqueue(zmsg.Unwrap());

                                                     //  Forward message to client if it's not a READY
                                                     if (!Encoding.Unicode.GetString(zmsg.Address).Equals(LRU_READY))
                                                     {
                                                         zmsg.Send(frontend);
                                                     }
                                                 };

                    frontend.PollInHandler += (socket, revents) =>
                                                  {
                                                      //  Now get next client request, route to next worker
                                                      //  Dequeue and drop the next worker address
                                                      var zmsg = new ZMessage(socket);
                                                      zmsg.Wrap(workerQueue.Dequeue(), new byte[0]);
                                                      zmsg.Send(backend);
                                                  };

                    while (true)
                    {
                        int rc = Context.Poller(workerQueue.Count > 0
                                                    ? new List<Socket>(new Socket[] {frontend, backend})
                                                    : new List<Socket>(new Socket[] {backend}));

                        if (rc == -1)
                        {
                            break;
                        }
                    }
                }
            }
        }
コード例 #3
0
        static void WebServerOnData(int id, ArraySegment<byte> data) {
            _bitBuffer.Clear();
            _bitBuffer.FromArray(data.Array, data.Count);

            byte messageId = _bitBuffer.ReadByte();
            switch (messageId) {
                case 1:
                {
                    uint qX = _bitBuffer.ReadUInt();
                    uint qY = _bitBuffer.ReadUInt();

                    PlayerData playerData = _playerDatas[id];
                    playerData.qX = qX;
                    playerData.qY = qY;

                    // Send this position to everyone next state packet
                    _dataToSend.Enqueue(playerData);
                    
                    break;
                }
                case 8:
                {
                    string name = _bitBuffer.ReadString();
                    _playerDatas[id].name = name;

                    _handshakenClientCount += 1;

                    // Tell all the players this new client's name
                    _bitBuffer.Clear();
                    _bitBuffer.AddByte(9);
                    _bitBuffer.AddUShort(_playerDatas[id].id);
                    _bitBuffer.AddString(_playerDatas[id].name);
                    _bitBuffer.ToArray(_buffer);
                    _webServer.SendAll(_connectedIds, new ArraySegment<byte>(_buffer, 0, 23));

                    break;
                }
                case 10:
                {
                    ushort objectId = _bitBuffer.ReadUShort();
                    ushort newX = _bitBuffer.ReadUShort();
                    ushort newY = _bitBuffer.ReadUShort();
                    _movedObjects[objectId] = new Tuple<ushort, ushort>(newX, newY);

                    break;
                }
                case 11:
                {
                    short pointChange = _bitBuffer.ReadShort();
                    _playerDatas[id].points += pointChange;

                    Console.WriteLine($"Got point change {id} {pointChange}");

                    // If points are 0 or less, give builder a point
                    if (pointChange <= 0) {
                        _playerDatas[_builderId].points += 1;
                    }

                    break;
                }
            }
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: dj46563/Misplaced
        static void WebServerOnData(int id, ArraySegment <byte> data)
        {
            _bitBuffer.Clear();
            _bitBuffer.FromArray(data.Array, data.Count);

            byte messageId = _bitBuffer.ReadByte();

            switch (messageId)
            {
            case 1:
            {
                uint qX = _bitBuffer.ReadUInt();
                uint qY = _bitBuffer.ReadUInt();

                PlayerData playerData = _playerDatas[id];
                playerData.qX = qX;
                playerData.qY = qY;

                // Send this position to everyone next state packet
                _dataToSend.Enqueue(playerData);

                break;
            }

            case 8:
            {
                string name = _bitBuffer.ReadString();
                _playerDatas[id].name       = name;
                _playerDatas[id].handshaked = true;

                _handshakenClientCount += 1;

                // Tell new client their id and the game state and everyone's name and points
                _bitBuffer.Clear();
                _bitBuffer.AddByte(2);
                _bitBuffer.AddUShort((ushort)id);
                _bitBuffer.AddByte((byte)_currentState);

                _bitBuffer.AddUShort((ushort)_playerDatas.Count);
                foreach (var playerData in _playerDatas.Values)
                {
                    _bitBuffer.AddUShort(playerData.id);
                    _bitBuffer.AddString(playerData.name);
                    _bitBuffer.AddShort(playerData.points);
                }

                _bitBuffer.ToArray(_buffer);
                _webServer.SendOne(id, new ArraySegment <byte>(_buffer, 0, 5 + _playerDatas.Count * 20));

                // Tell all the players this new client's name
                _bitBuffer.Clear();
                _bitBuffer.AddByte(9);
                _bitBuffer.AddUShort(_playerDatas[id].id);
                _bitBuffer.AddString(_playerDatas[id].name);
                _bitBuffer.ToArray(_buffer);
                _webServer.SendAll(_connectedIds, new ArraySegment <byte>(_buffer, 0, 23));

                break;
            }

            case 10:
            {
                ushort objectId = _bitBuffer.ReadUShort();
                ushort newX     = _bitBuffer.ReadUShort();
                ushort newY     = _bitBuffer.ReadUShort();
                _movedObjects[objectId] = new Tuple <ushort, ushort>(newX, newY);

                break;
            }

            case 11:
            {
                short pointChange = _bitBuffer.ReadShort();
                _playerDatas[id].points += pointChange;

                // If points are 0 or less, give builder a point
                if (pointChange <= 0)
                {
                    _playerDatas[_builderId].points += 1;
                }

                break;
            }

            case 12:
            {
                _bitBuffer.Clear();
                _bitBuffer.AddByte(13);
                _bitBuffer.AddUShort((ushort)id);
                _bitBuffer.ToArray(_buffer);
                _webServer.SendAll(_connectedIds, new ArraySegment <byte>(_buffer, 0, 3));

                break;
            }
            }
        }