226 lines
7.1 KiB
226 lines
7.1 KiB
package sig.modules.RabiRace;
|
|
|
|
import java.awt.Color;
|
|
import java.awt.Dimension;
|
|
import java.awt.event.ActionEvent;
|
|
import java.awt.event.ActionListener;
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import java.net.MalformedURLException;
|
|
import java.net.URL;
|
|
|
|
import javax.swing.Box;
|
|
import javax.swing.BoxLayout;
|
|
import javax.swing.JButton;
|
|
import javax.swing.JFrame;
|
|
import javax.swing.JLabel;
|
|
import javax.swing.JOptionPane;
|
|
import javax.swing.JPanel;
|
|
import javax.swing.JPasswordField;
|
|
import javax.swing.JTextField;
|
|
import javax.swing.event.DocumentEvent;
|
|
import javax.swing.event.DocumentListener;
|
|
|
|
import sig.sigIRC;
|
|
import sig.modules.RabiRaceModule;
|
|
import sig.utils.FileUtils;
|
|
import sig.utils.TextUtils;
|
|
|
|
public class SessionCreateWindow extends JFrame{
|
|
JPanel container = new JPanel();
|
|
LengthValidationField session_name = new LengthValidationField(16);
|
|
NumberValidationField maxplayers = new NumberValidationField();
|
|
JPasswordField pass = new JPasswordField();
|
|
JButton create = new JButton("Create");
|
|
|
|
public SessionCreateWindow() {
|
|
this.setTitle("Create Rabi-Race Session");
|
|
this.setIconImage(sigIRC.programIcon);
|
|
this.setVisible(false);
|
|
JPanel namepanel = new JPanel();
|
|
JPanel playerpanel = new JPanel();
|
|
JPanel passwordpanel = new JPanel();
|
|
|
|
JPanel[] panel_list = new JPanel[]{
|
|
namepanel,playerpanel,passwordpanel
|
|
};
|
|
|
|
for (JPanel panel : panel_list) {
|
|
panel.setLayout(new BoxLayout(panel,BoxLayout.LINE_AXIS));
|
|
panel.setSize(400, 24);
|
|
panel.setMinimumSize(new Dimension(400, 24));
|
|
panel.add(Box.createRigidArea(new Dimension(24,24)));
|
|
}
|
|
|
|
JLabel nameLabel = new JLabel("Session Name: ");
|
|
String label = RabiRaceModule.module.myProfile.displayName+"'s Race";
|
|
if (label.length()>16) {
|
|
label = "My Rabi-Race!";
|
|
}
|
|
session_name.setText(label);
|
|
|
|
namepanel.add(nameLabel);
|
|
namepanel.add(session_name);
|
|
|
|
JLabel playerLabel = new JLabel("Max Players: ");
|
|
maxplayers.setText("4");
|
|
|
|
playerpanel.add(playerLabel);
|
|
playerpanel.add(maxplayers);
|
|
|
|
JLabel passwordLabel = new JLabel("🔑 Password (Optional): ");
|
|
|
|
playerpanel.add(passwordLabel);
|
|
playerpanel.add(pass);
|
|
|
|
for (JPanel panel : panel_list) {
|
|
panel.add(Box.createRigidArea(new Dimension(24,24)));
|
|
}
|
|
|
|
create.setSize(164,24);
|
|
create.setMinimumSize(new Dimension(164,24));
|
|
create.addActionListener(new ActionListener(){
|
|
@Override
|
|
public void actionPerformed(ActionEvent ev) {
|
|
if (session_name.getText().length()>session_name.length) {
|
|
JOptionPane.showMessageDialog(RabiRaceModule.createwindow, "Your session name is too long!", "Error!", JOptionPane.WARNING_MESSAGE);
|
|
return;
|
|
}
|
|
if (session_name.getText().length()<=2) {
|
|
JOptionPane.showMessageDialog(RabiRaceModule.createwindow, "Your session name is too short!", "Error!", JOptionPane.WARNING_MESSAGE);
|
|
return;
|
|
}
|
|
if (!TextUtils.isAlphanumeric(session_name.getText())) {
|
|
JOptionPane.showMessageDialog(RabiRaceModule.createwindow, "Your session name has invalid characters! Only A-Z,0-9,!,-,.,? and spaces allowed!", "Error!", JOptionPane.WARNING_MESSAGE);
|
|
return;
|
|
}
|
|
if (!TextUtils.isInteger(maxplayers.getText(), 10)) {
|
|
JOptionPane.showMessageDialog(RabiRaceModule.createwindow, "Your max player count is invalid!", "Error!", JOptionPane.WARNING_MESSAGE);
|
|
return;
|
|
}
|
|
if (Integer.parseInt(maxplayers.getText())>48 || Integer.parseInt(maxplayers.getText())<2) {
|
|
JOptionPane.showMessageDialog(RabiRaceModule.createwindow, "Your max player count needs to be between 2-48!", "Error!", JOptionPane.WARNING_MESSAGE);
|
|
return;
|
|
}
|
|
String hashpass = "";
|
|
if (String.copyValueOf(pass.getPassword()).length()>0) {
|
|
hashpass = SessionListWindow.GetHashedPassword(String.copyValueOf(pass.getPassword()));
|
|
}
|
|
session_name.setText(session_name.getText().replaceAll(" ", "%20"));
|
|
File file = new File(sigIRC.BASEDIR+"sigIRC/tmp.data");
|
|
try {
|
|
org.apache.commons.io.FileUtils.copyURLToFile(new URL("http://45.33.13.215/rabirace/send.php?key=sessioncreate&name="+session_name.getText()+"&players="+maxplayers.getText()+"&password="+((hashpass.length()>0)?hashpass:"none")),file);
|
|
String[] contents = FileUtils.readFromFile(sigIRC.BASEDIR+"sigIRC/tmp.data");
|
|
int sessionID=-1;
|
|
if (contents.length>=2) {
|
|
sessionID=Integer.parseInt(contents[0]);
|
|
}
|
|
if (sessionID!=-1) {
|
|
RabiRaceModule.module.getSessionList();
|
|
//RabiRaceModule.module.session_listing.data.put(sessionID, new Session());
|
|
Session session = RabiRaceModule.module.session_listing.data.get(sessionID);
|
|
SessionListWindow.ConnectToSession(session, hashpass);
|
|
setVisible(false);
|
|
}
|
|
//SessionListWindow.ConnectToSession(session, hashedPass);
|
|
} catch (MalformedURLException e) {
|
|
e.printStackTrace();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
});
|
|
|
|
//create.add(Box.createRigidArea(new Dimension(24,24)));
|
|
|
|
container.setLayout(new BoxLayout(container,BoxLayout.PAGE_AXIS));
|
|
|
|
container.add(Box.createRigidArea(new Dimension(24,24)));
|
|
container.add(namepanel);
|
|
container.add(playerpanel);
|
|
container.add(passwordpanel);
|
|
container.add(create);
|
|
container.add(Box.createRigidArea(new Dimension(24,24)));
|
|
|
|
this.add(container);
|
|
this.setSize(400, 192);
|
|
this.setMinimumSize(new Dimension(400, 192));
|
|
this.setMaximumSize(new Dimension(400, 192));
|
|
this.setResizable(false);
|
|
}
|
|
|
|
class LengthValidationField extends JTextField implements DocumentListener{
|
|
int length = 10;
|
|
|
|
public LengthValidationField(int maxLength) {
|
|
this.length = maxLength;
|
|
getDocument().addDocumentListener(this);
|
|
}
|
|
|
|
@Override
|
|
public void changedUpdate(DocumentEvent arg0) {
|
|
}
|
|
|
|
@Override
|
|
public void insertUpdate(DocumentEvent arg0) {
|
|
ValidateForm();
|
|
}
|
|
|
|
protected void ValidateForm() {
|
|
if (fieldIsInvalid()) {
|
|
setBackground(Color.RED);
|
|
} else {
|
|
setBackground(Color.WHITE);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void removeUpdate(DocumentEvent arg0) {
|
|
ValidateForm();
|
|
}
|
|
|
|
protected boolean fieldIsInvalid() {
|
|
return getText().length()>length || getText().length()<=2 || !TextUtils.isAlphanumeric(getText());
|
|
}
|
|
}
|
|
|
|
class NumberValidationField extends JTextField implements DocumentListener{
|
|
|
|
public NumberValidationField() {
|
|
getDocument().addDocumentListener(this);
|
|
}
|
|
|
|
@Override
|
|
public void changedUpdate(DocumentEvent arg0) {
|
|
}
|
|
|
|
@Override
|
|
public void insertUpdate(DocumentEvent arg0) {
|
|
ValidateForm();
|
|
}
|
|
|
|
protected void ValidateForm() {
|
|
if (fieldIsInvalid()) {
|
|
setBackground(Color.RED);
|
|
} else {
|
|
setBackground(Color.WHITE);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void removeUpdate(DocumentEvent arg0) {
|
|
ValidateForm();
|
|
}
|
|
|
|
protected boolean fieldIsInvalid() {
|
|
if (!TextUtils.isInteger(getText(), 10)) {
|
|
return true;
|
|
}
|
|
int val = Integer.parseInt(getText());
|
|
if (val>48 || val<2) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|