package org.ninjadev.multivim.server.net; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import org.ninjadev.multivim.Buffer; import org.ninjadev.multivim.Cursor; import org.ninjadev.multivim.Message; import org.ninjadev.multivim.Mode; import org.ninjadev.multivim.Position; import org.ninjadev.multivim.User; import org.ninjadev.multivim.UserData; import org.ninjadev.multivim.ViewPort; import com.googlecode.lanterna.input.Key; public class SendMessage { public static void identity(User user, UserData data) throws IOException{ user.os.writeObject(new Message("identity", new Object[]{user.data})); user.os.flush(); } public static void allUsers(User user, HashMap<Integer, User> users) throws IOException { ArrayList<UserData> userDatas = new ArrayList<UserData>(); for(User u : users.values()){ userDatas.add(u.data); } user.os.writeObject(new Message("allUsers", userDatas)); user.os.flush(); } public static void allBuffers(User user, LinkedList<Buffer> buffers) throws IOException { user.os.writeObject(new Message("allBuffers", buffers)); user.os.flush(); } public static void addUser(HashMap<Integer, User> users, User user) throws IOException { for(User u : users.values()){ u.os.writeObject(new Message("addUser", new Object[]{user.data})); u.os.flush(); } } public static void addViewPort(HashMap<Integer, User> users, User user, ViewPort viewPort) throws IOException{ for(User u : users.values()){ u.os.writeObject(new Message("addViewPort", new Object[]{user.getUserId(), viewPort.buffer.bufferId})); u.os.flush(); } } public static void setCursor(User user, HashMap<Integer, User> users) throws IOException { for(User u : users.values()){ for(Cursor c : u.cursors.values()){ setCursor(user, c); } } } public static void setCursor(User user, Cursor cursor) throws IOException{ user.os.writeObject(new Message("setCursor",new Object[]{ cursor.user.getUserId(), cursor.buffer.bufferId, new Position(cursor.data.position), cursor.desiredColumn })); user.os.flush(); } public static void setCursor(HashMap<Integer, User> users, Cursor cursor) throws IOException{ for(User user : users.values()){ setCursor(user, cursor); } } public static void newBuffer(HashMap<Integer, User> users, Buffer buffer) throws IOException { for(User user : users.values()){ user.os.writeObject(new Message("newBuffer", buffer)); user.os.flush(); } } public static void removeUser(HashMap<Integer, User> users, User user) throws IOException { for(User u: users.values()){ if(u != user){ u.os.writeObject(new Message("removeUser", user.data)); u.os.flush(); } } } public static void replaceLine(HashMap<Integer,User> users, int i, String line) throws IOException { for(User u: users.values()){ u.os.writeObject(new Message("replaceLine", new Object[]{i,line})); u.os.flush(); } } public static void setMode(User user, Mode mode) throws IOException { user.os.writeObject(new Message("setMode", mode)); user.os.flush(); } public static void sendCommand(HashMap<Integer, User> users, int userId, Key command) throws IOException { for(User u: users.values()){ u.os.writeObject(new Message("sendCommand", new Object[]{userId,command})); u.os.flush(); } } public static void render(User user) throws IOException { user.os.writeObject(new Message("render", null)); user.os.flush(); } }