You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

76 lines
3.3 KiB

-- This file contains a table of W2W & Communication OpCodes.
-- W2W Protocol v2
-- Goals: Reduce bandwidth & traffic volume of W2W data.
--Command OpCodes
WIM.O = {
["NEGOTIATE"] = 1,
["SERVICES"] = 2,
["TYPING_START"] = 3,
["TYPING_STOP"] = 4,
["LOC_REQUEST"] = 5,
["LOC"] = 6,
};
-- temp backwards compatibility for old protocol.
if(not WIM.useProtocol2) then
for k, _ in pairs(WIM.O) do
WIM.O[k] = k;
end
end
--Service opCodes
WIM.S = {
["Typing"] = 1,
["Coordinates"] = 2,
["Talent Spec"] = 3,
["Profiles"] = 4,
};
--[[
When Convo is opened:
- Say Hello, if response, send services.
*Services are automatically resent whenever changed, ie: w2w privacy options changed.
Services Packet contains a list of "English" strings of available services. Example: Coordinates, Typing
if Coodinates, need an exchange process of current location. One side doesn't need to have a convo
opened. Currently using a Ping/Pong method. Problems: Waste of traffic. Solution, transmit less bits on request.
if Typing, Sender only sends on/off bit when typing. Avoid resending the same bit values. only send on if previous bit was off.
Profiles: Alerted in Service packet. Hashed by modification date.
- Profile hash should be sent with Services. ie: Profile:1234567
-to be parsed as "Profile" with hash "1234567'.
-Receiver checks if there is a record of profile 1234567, if not, request profile.
-profile should be stored within the window object.
-Since hash is stored in services, if profile is changed, services are updated and receiver can request profile again.
GetProfile - called to user to return serialized profile data. (Includes most recent hash)
Avatars: Subclass of Profiles. 2 types.
1. static - sends texture file name.
2. Stewmat - sends avatar hash (again timestamp of modified)
- User can then request this using: GetAvatar:7654321
- UI can use socket data to display progressbar of transmission.
*Depending on Drawing time, one canvas should be shared between all
instances showing the avatar. Canvases are messy.
Depending on solution of location sharing, a second method might be required for minimap tracking.
Ideas for sharing location:
- User 1 sends user 2 a request for coordinates.
- User 2 will send all requestees updated coordinates until asked to stop.
- User 1 ends convo with user 2 and sends a stop message to user 2 to stop serving their location.
- User 1 will keep timestamp of last loc update. If not received in theshhold time (ex: 30 seconds),
send another request. (User might have reloaded their UI or DC'd.)
- User 2 should every threshhold seconds (ie: 1 min) ask user 1 if loc is still wanted. If no response
in additional theshhold (ie: 10 seconds), request has expired, stop serving.
* determined theshholds are important to not cause delayed looping. Meaning, every minute, location is
no longer being served and user 1 has to re-request. Should be a continuous motion.
* Additionally, a safe C/D should be set for loc refresh. Don't want constant stream of loc when flying.
]]