/*
* The MIT License
*
- * Copyright 2015 TJ <hacker@iam.tj>.
+ * Copyright 2015 Eddie Berrisford-Lynch <dev@fun2be.me>.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
import uk.ac.ntu.n0521366.wsyd.libs.WSYD_Member;
import uk.ac.ntu.n0521366.wsyd.libs.WSYD_Member_Comparator_UserID;
import uk.ac.ntu.n0521366.wsyd.libs.message.MessageLogin;
+import uk.ac.ntu.n0521366.wsyd.libs.message.MessageMember;
import uk.ac.ntu.n0521366.wsyd.libs.message.MessageMemberState;
import uk.ac.ntu.n0521366.wsyd.libs.message.MessagePresence;
import uk.ac.ntu.n0521366.wsyd.libs.message.MessageServerControl;
* exitRequested and restartRequested. This can be done by an optional
* Management GUI application.
*
- * @author TJ <hacker@iam.tj>
+ * @author Eddie Berrisford-Lynch <dev@fun2be.me>
*/
public final class ServerSocial implements NetworkMessageEventListener, ConnectionEstablishedEventListener {
/**
return result;
}
+ private void notifyMemberPrescence(long userID, boolean state) {
+ NetworkMessage message = new NetworkMessage("MemberNotification", null, new MessageMemberState(userID, state));
+ for (long ID : _membersOnline) {
+ _tcpStreamManager._tcpStreams.get(ID).write(message);
+ }
+ }
+
+ private void memberOnline (long userID) {
+ if (!_membersOnline.contains(userID)) {
+ notifyMemberPrescence(userID, true);
+ _membersOnline.add(userID);
+ }
+ }
+
+ private void memberOffline (long userID) {
+ if (_membersOnline.contains(userID)) {
+ _membersOnline.remove(userID);
+ notifyMemberPrescence(userID, false);
+ }
+ }
+
+ @Override
+ public void connectionEstablished(ConnectionEstablishedEvent event) {
+ System.err.println("connectionEstablished()");
+ event.getStream().getEventManager().addNetworkMessageEventListener(this);
+ }
+ /**
+ * Process received network messages.
+ *
+ * @param event the network message event
+ */
@Override
public void NetworkMessageReceived(NetworkMessageEvent event)
{
- System.err.println("NetworkMessage received");
- //TODO: NetworkMessageReceived: Handle Messages
NetworkMessage nm = event.getNetworkMessage();
if (nm == null)
return;
- //Exit or Restart?
- System.err.println("Packet Received for intent " + nm.getIntent());
+ System.err.println("NetworkMessage received for intent " + nm.getIntent());
String type = nm.getMessage().getMessageType();
switch (nm.getIntent()) {
- case "Control":
+ case "Control": // Exit or Restart?
if (type.equals(MessageServerControl.getType())) { // ServerControl
if ("ServerManagement".equals(nm.getSender())) {
MessageServerControl mp = (MessageServerControl)nm.getMessage();
break;
case "Login":
if (type.equals(MessageLogin.getType())) {
+ NetworkStream ns = _tcpStreamManager._tcpStreams.get(nm.getKey());
MessageLogin ml = (MessageLogin)nm.getMessage();
Set<Map.Entry<Long, WSYD_Member>> tempSet = _members.entrySet();
ml._loggedIn = true;
_tcpStreamManager.updateKey(nm.getKey(), element.getKey()); // replace temp key in stream manager
_membersOnline.add(element.getKey()); // make the member online
+ break;
+ }
+ }
+ if (ns != null)
+ ns.write(nm);
+ else
+ System.err.println("Login: cannot find stream for ID:" + nm.getKey());
+ }
+ case "Register":
+ if (type.equals(MessageMember.getType())) {
+ NetworkStream ns = _tcpStreamManager._tcpStreams.get(nm.getKey());
+ MessageMember mm = (MessageMember)nm.getMessage();
+ // assume username can be registered unless username found
+ mm.setRegistered(MessageMember.STATE.REGISTERED);
+
+ Set<Map.Entry<Long, WSYD_Member>> tempSet = _members.entrySet();
+ Iterator<Map.Entry<Long, WSYD_Member>> tempIter = tempSet.iterator();
+ while (tempIter.hasNext()) {
+ Map.Entry<Long, WSYD_Member> element = tempIter.next();
+ if (element.getValue()._userName.equals(mm.getMember()._userName)) {
+ mm.setRegistered(MessageMember.STATE.UNREGISTERED);
+ mm.setStatus("Member already registered: " + mm.getMember()._userName);
+ break;
}
}
- _tcpStreamManager._tcpStreams.get(nm.getKey()).write(nm);
+ // register the new member
+ if (mm.getRegistered() == MessageMember.STATE.REGISTERED) {
+ // get the next unallocated user ID
+ long newUserID = _members.lastKey().longValue() + 1;
+ _members.put(newUserID, mm.getMember());
+ // update the object so the ID can be returned to the client
+ mm.getMember()._userID = newUserID;
+ // update the on-disk membership data
+ writeMembers(_membersFile);
+ }
+ if (ns != null)
+ ns.write(nm);
+ else
+ System.err.println("Login: cannot find stream for ID:" + nm.getKey());
+
}
+ break;
+ default:
+ System.err.println("Unhandled NetworkMessage received for intent " + nm.getIntent());
}
}
- private void notifyMemberPrescence(long userID, boolean state) {
- NetworkMessage message = new NetworkMessage("MemberNotification", null, new MessageMemberState(userID, state));
- for (long ID : _membersOnline) {
- _tcpStreamManager._tcpStreams.get(ID).write(message);
- }
- }
-
- private void memberOnline (long userID) {
- if (!_membersOnline.contains(userID)) {
- notifyMemberPrescence(userID, true);
- _membersOnline.add(userID);
- }
- }
-
- private void memberOffline (long userID) {
- if (_membersOnline.contains(userID)) {
- _membersOnline.remove(userID);
- notifyMemberPrescence(userID, false);
- }
- }
/**
* Entry point which starts, restarts, and exits the application.
}
}
}
-
- @Override
- public void connectionEstablished(ConnectionEstablishedEvent event) {
- System.err.println("connectionEstablished()");
- event.getStream().getEventManager().addNetworkMessageEventListener(this);
- }
}
-
-