/
DataProtocol.java
102 lines (91 loc) · 3.39 KB
/
DataProtocol.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package net.ME1312.SubData.Client;
import net.ME1312.Galaxi.Library.Container.ContainedPair;
import net.ME1312.Galaxi.Library.Container.Pair;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.Galaxi.Library.Version.Version;
import net.ME1312.SubData.Client.Protocol.MessageIn;
import net.ME1312.SubData.Client.Protocol.MessageOut;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* SubData Protocol API Class
*/
public abstract class DataProtocol {
final HashMap<Class<? extends MessageOut>, Pair<String, String>> mOut = new HashMap<Class<? extends MessageOut>, Pair<String, String>>();
final HashMap<String, HashMap<String, MessageIn>> mIn = new HashMap<String, HashMap<String, MessageIn>>();
/**
* Get the Network Protocol Name
*
* @return Protocol Name
*/
public abstract String getName();
/**
* Get the Supported Protocol Version List
*
* @return Supported Protocol Versions
*/
public abstract Version[] getVersion();
/**
* Register MessageIn to the Network
*
* @param channel Message Channel
* @param handle Handle to Bind
* @param message MessageIn to register
*/
public void registerMessage(String channel, String handle, MessageIn message) {
Util.nullpo(message, channel, handle);
HashMap<String, MessageIn> map = (mIn.containsKey(channel.toLowerCase()))? mIn.get(channel.toLowerCase()):new HashMap<String, MessageIn>();
map.put(handle, message);
mIn.put(channel.toLowerCase(), map);
}
/**
* Unregister MessageIn from the Network
*
* @param channel Message Channel
* @param message MessageIn to unregister
*/
public void unregisterMessage(String channel, MessageIn message) {
Util.nullpo(channel, message);
if (mIn.containsKey(channel.toLowerCase())) {
List<String> search = new ArrayList<String>(mIn.get(channel.toLowerCase()).keySet());
for (String handle : search) if (mIn.get(channel.toLowerCase()).get(handle).equals(message)) {
mIn.get(channel.toLowerCase()).remove(handle);
if (mIn.get(channel.toLowerCase()).size() <= 0)
mIn.remove(channel.toLowerCase());
}
}
}
/**
* Register MessageOut to the Network
*
* @param channel Message Channel
* @param handle Handle to bind
* @param message MessageOut to register
*/
public void registerMessage(String channel, String handle, Class<? extends MessageOut> message) {
Util.nullpo(message, channel, handle);
mOut.put(message, new ContainedPair<String, String>(channel.toLowerCase(), handle));
}
/**
* Unregister MessageOut to the Network
*
* @param channel Message Channel
* @param message MessageOut to unregister
*/
public void unregisterMessage(String channel, Class<? extends MessageOut> message) {
Util.nullpo(channel, message);
if (mOut.containsKey(message) && mOut.get(message).key().equalsIgnoreCase(channel)) mOut.remove(message);
}
/**
* Grab MessageIn Instance via handle
*
* @param channel Message Channel
* @param handle Handle
* @return MessageIn
*/
public MessageIn getMessage(String channel, String handle) {
Util.nullpo(channel, handle);
return mIn.get(channel.toLowerCase()).get(handle);
}
}