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); } } } }
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); } } } }
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); } } }
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); } } }
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); } } }
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); } } } }