Esempio n. 1
0
        private void Listener()
        {
            while (!close)
            {
                IPEndPoint endpoint = new IPEndPoint(IPAddress.Loopback, 0);
                byte[]     data     = udp.Receive(ref endpoint);
                if (endpoint.Port != loopbackPort)
                {
                    springTalkPort = endpoint.Port;
                }
                if (data.Length > 0)
                {
                    SpringEventArgs sea = new SpringEventArgs();

                    sea.EventType = (SpringEventType)data[0];

                    switch (sea.EventType)
                    {
                    case SpringEventType.PLAYER_JOINED:
                        sea.PlayerNumber = data[1];
                        sea.PlayerName   = Encoding.ASCII.GetString(data, 2, data.Length - 2);
                        break;

                    case SpringEventType.PLAYER_LEFT:
                        sea.PlayerNumber = data[1];
                        sea.Param        = data[2];
                        break;

                    case SpringEventType.PLAYER_READY:
                        sea.PlayerNumber = data[1];
                        sea.Param        = data[2];
                        break;

                    case SpringEventType.PLAYER_CHAT:
                        sea.PlayerNumber = data[1];
                        sea.Text         = Encoding.ASCII.GetString(data, 2, data.Length - 2);
                        break;

                    case SpringEventType.PLAYER_DEFEATED:
                        sea.PlayerNumber = data[1];
                        break;
                    }
                    if (sea.PlayerName == null)
                    {
                        sea.PlayerName = initialPlayers[sea.PlayerNumber].user.name;
                    }

                    if (SpringEvent != null)
                    {
                        SpringEvent(this, sea);
                    }
                }
            }
        }
Esempio n. 2
0
        private void Listener()
        {
            while (!close)
            {
                var endpoint = new IPEndPoint(IPAddress.Loopback, 0);
                var data     = udp.Receive(ref endpoint);
                if (endpoint.Port != loopbackPort)
                {
                    springTalkPort = endpoint.Port;
                }
                if (data.Length > 0)
                {
                    var sea = new SpringEventArgs();

                    sea.EventType = (SpringEventType)data[0];

                    switch (sea.EventType)
                    {
                    case SpringEventType.PLAYER_JOINED:
                        sea.PlayerNumber = data[1];
                        sea.PlayerName   = Encoding.ASCII.GetString(data, 2, data.Length - 2);
                        break;

                    case SpringEventType.PLAYER_LEFT:
                        sea.PlayerNumber = data[1];
                        sea.Param        = data[2];
                        break;

                    case SpringEventType.PLAYER_READY:
                        sea.PlayerNumber = data[1];
                        if (data.Length <= 2)
                        {
                            sea.EventType = SpringEventType.PLAYER_DEFEATED;     // hack for spring bug
                        }
                        else
                        {
                            sea.Param = data[2];
                        }
                        break;

                    case SpringEventType.PLAYER_CHAT:
                        sea.PlayerNumber = data[1];
                        sea.Param        = data[2];
                        sea.Text         = Encoding.ASCII.GetString(data, 3, data.Length - 3);
                        break;

                    case SpringEventType.PLAYER_DEFEATED:
                        sea.PlayerNumber = data[1];
                        break;
                    }
                    if (sea.PlayerName == null)
                    {
                        sea.PlayerName = TranslateIdToPlayerName(sea.PlayerNumber).name;
                    }

                    if (SpringEvent != null)
                    {
                        SpringEvent(this, sea);
                    }
                }
            }
        }
Esempio n. 3
0
    void Listener()
    {
      while (!close)
      {
        var endpoint = new IPEndPoint(IPAddress.Loopback, 0);
        var data = udp.Receive(ref endpoint);
        springTalkPort = endpoint.Port;
        if (data.Length > 0)
        {
          var sea = new SpringEventArgs();

          sea.EventType = (SpringEventType)data[0];

          switch (sea.EventType)
          {
            case SpringEventType.PLAYER_JOINED:
              sea.PlayerNumber = data[1];
              sea.PlayerName = Encoding.ASCII.GetString(data, 2, data.Length - 2);
              break;
            case SpringEventType.PLAYER_LEFT:
              sea.PlayerNumber = data[1];
              sea.Param = data[2];
              break;
            case SpringEventType.PLAYER_READY:
              sea.PlayerNumber = data[1];
              if (data.Length <= 2) sea.EventType = SpringEventType.PLAYER_DEFEATED; // hack for spring 
              else sea.Param = data[2];
              break;

            case SpringEventType.PLAYER_CHAT:
              sea.PlayerNumber = data[1];
              sea.Param = data[2];
              sea.Text = Encoding.ASCII.GetString(data, 3, data.Length - 3);
              break;

            case SpringEventType.PLAYER_DEFEATED:
              sea.PlayerNumber = data[1];
              break;

            case SpringEventType.GAME_LUAMSG:
              sea.PlayerNumber = data[1];
              sea.Param = data[4];
              sea.Text = Encoding.ASCII.GetString(data, 5, data.Length - 5);
              break;
          }
          if (sea.PlayerName == null)
          {
            var translated = TranslateIdToPlayerName(sea.PlayerNumber);
            if (translated != null) sea.PlayerName = translated.Name;
          }

          if (SpringEvent != null) SpringEvent(this, sea);
        }
      }
    }
Esempio n. 4
0
		private void Listener()
		{
			while (!close) {
				var endpoint = new IPEndPoint(IPAddress.Loopback, 0);
				var data = udp.Receive(ref endpoint);
				if (endpoint.Port != loopbackPort) springTalkPort = endpoint.Port;
				if (data.Length > 0) {
					var sea = new SpringEventArgs();

					sea.EventType = (SpringEventType) data[0];

					switch (sea.EventType) {
						case SpringEventType.PLAYER_JOINED:
							sea.PlayerNumber = data[1];
							sea.PlayerName = Encoding.ASCII.GetString(data, 2, data.Length - 2);
							break;
						case SpringEventType.PLAYER_LEFT:
							sea.PlayerNumber = data[1];
							sea.Param = data[2];
							break;
						case SpringEventType.PLAYER_READY:
							sea.PlayerNumber = data[1];
							sea.Param = data[2];
							break;

						case SpringEventType.PLAYER_CHAT:
							sea.PlayerNumber = data[1];
							sea.Text = Encoding.ASCII.GetString(data, 2, data.Length - 2);
							break;

						case SpringEventType.PLAYER_DEFEATED:
							sea.PlayerNumber = data[1];
							break;
					}
					if (sea.PlayerName == null) sea.PlayerName = initialPlayers[sea.PlayerNumber].user.name;

					if (SpringEvent != null) SpringEvent(this, sea);
				}
			}
		}
Esempio n. 5
0
        void Listener()
        {
            while (!close) {
                var endpoint = new IPEndPoint(IPAddress.Loopback, 0);
                var data = udp.Receive(ref endpoint);
                springTalkPort = endpoint.Port;
                if (data.Length > 0) {
                    var sea = new SpringEventArgs();

                    sea.EventType = (SpringEventType)data[0];

                    switch (sea.EventType) {
                        case SpringEventType.PLAYER_JOINED:
                            sea.PlayerNumber = data[1];
                            sea.PlayerName = Encoding.ASCII.GetString(data, 2, data.Length - 2);
                            playerIdToName[sea.PlayerNumber] = sea.PlayerName;
                            break;
                        case SpringEventType.PLAYER_LEFT:
                            sea.PlayerNumber = data[1];
                            sea.Param = data[2];
                            break;

                        case SpringEventType.PLAYER_READY:
                            sea.PlayerNumber = data[1];
                            if (data.Length <= 2) sea.EventType = SpringEventType.PLAYER_DEFEATED; // hack for spring 
                            else sea.Param = data[2];
                            break;

                        case SpringEventType.PLAYER_CHAT:
                            sea.PlayerNumber = data[1];
                            sea.Param = data[2];
                            sea.Text = Encoding.UTF8.GetString(data, 3, data.Length - 3);
                            break;

                        case SpringEventType.PLAYER_DEFEATED:
                            sea.PlayerNumber = data[1];
                            break;

                        case SpringEventType.SERVER_STARTPLAYING:
                            int msgSize = data[1] + (data[2]<<8) + (data[3]<<16) + (data[4]<<24);
                            if (msgSize != data.Length) Trace.TraceWarning("Warning spring message size mismatch, expected {0} got {1} on STARTPLAYING", msgSize, data.Length);
                            sea.GameID = data.Skip(5).Take(16).ToArray().ToHex();
                            sea.ReplayFileName = Encoding.UTF8.GetString(data, 21, data.Length - 21);
                            break;

                        case SpringEventType.SERVER_MESSAGE:

                            break;

                        case SpringEventType.GAME_LUAMSG:
                            sea.PlayerNumber = data[1];
                            sea.Param = data[4];
                            sea.Text = Encoding.ASCII.GetString(data, 5, data.Length - 5);
                            break;
                    }
                    if (sea.PlayerName == null) {
                        var translated = TranslateIdToPlayerName(sea.PlayerNumber);
                        if (translated != null) sea.PlayerName = translated;
                    }

                    if (SpringEvent != null) SpringEvent(this, sea);
                }
            }
        }
Esempio n. 6
0
        void Listener()
        {
            while (!close)
            {
                var endpoint = new IPEndPoint(IPAddress.Loopback, 0);
                var data     = udp.Receive(ref endpoint);
                springTalkPort = endpoint.Port;
                int msgSize;
                if (data.Length > 0)
                {
                    var sea = new SpringEventArgs();

                    sea.EventType = (SpringEventType)data[0];

                    switch (sea.EventType)
                    {
                    case SpringEventType.PLAYER_JOINED:
                        sea.PlayerNumber = data[1];
                        sea.PlayerName   = Encoding.ASCII.GetString(data, 2, data.Length - 2);
                        playerIdToName[sea.PlayerNumber] = sea.PlayerName;
                        break;

                    case SpringEventType.PLAYER_LEFT:
                        sea.PlayerNumber = data[1];
                        sea.Param        = data[2];
                        break;

                    case SpringEventType.PLAYER_READY:
                        sea.PlayerNumber = data[1];
                        if (data.Length <= 2)
                        {
                            sea.EventType = SpringEventType.PLAYER_DEFEATED;                       // hack for spring
                        }
                        else
                        {
                            sea.Param = data[2];
                        }
                        break;

                    case SpringEventType.PLAYER_CHAT:
                        sea.PlayerNumber = data[1];
                        sea.Param        = data[2];
                        sea.Text         = Encoding.UTF8.GetString(data, 3, data.Length - 3);
                        break;

                    case SpringEventType.PLAYER_DEFEATED:
                        sea.PlayerNumber = data[1];
                        break;

                    case SpringEventType.SERVER_STARTPLAYING:
                        msgSize = data[1] + (data[2] << 8) + (data[3] << 16) + (data[4] << 24);
                        if (msgSize != data.Length)
                        {
                            Trace.TraceWarning("Warning spring message size mismatch, expected {0} got {1} on STARTPLAYING", msgSize, data.Length);
                        }
                        sea.GameID         = data.Skip(5).Take(16).ToArray().ToHex();
                        sea.ReplayFileName = Encoding.UTF8.GetString(data, 21, data.Length - 21);
                        break;

                    case SpringEventType.SERVER_GAMEOVER:
                        msgSize          = data[1];
                        sea.PlayerNumber = data[2];
                        if (msgSize != data.Length)
                        {
                            Trace.TraceWarning("Warning spring message size mismatch, expected {0} got {1} on GAMEOVER", msgSize, data.Length);
                        }
                        sea.winningAllyTeams = data.Skip(3).Take(msgSize - 3).ToArray();
                        break;

                    case SpringEventType.SERVER_MESSAGE:

                        break;

                    case SpringEventType.GAME_LUAMSG:
                        sea.PlayerNumber = data[1];
                        sea.Param        = data[4];
                        sea.Text         = Encoding.ASCII.GetString(data, 5, data.Length - 5);
                        break;
                    }
                    if (sea.PlayerName == null)
                    {
                        var translated = TranslateIdToPlayerName(sea.PlayerNumber);
                        if (translated != null)
                        {
                            sea.PlayerName = translated;
                        }
                    }

                    if (SpringEvent != null)
                    {
                        SpringEvent(this, sea);
                    }
                }
            }
        }