void OnMessage(WSSBehaviour behaviour, MessageEventArgs args) { if (args.Data == "ACKNOWLEDGE BYTES") { return; } var client = Clients.Find(x => x.Socket == behaviour.Context.WebSocket); NetworkMessage message; try { message = NetworkMessage.Deserialize(args.Data); } catch (Exception) { throw; } if (message is PingMessage ping) { if (behaviour.Context.WebSocket.ReadyState != WebSocketState.Open) { return; } var json = NetworkMessage.Serialize(message); behaviour.Context.WebSocket.Send(json); return; } if (client == null) { if (message is RegisterClientMessage payload) { Register(payload.Name, behaviour); } else { Debug.LogWarning($"Non Registered Client {behaviour.ID} Send Non Register Client Message: {message.GetType().Name}"); } } else { if (MessageDispatcher.Invoke(client, message) == false) { if (message is ReadyClientMessage ready) { SetReadiness(client, ready.Value); } } } }
void Register(string name, WSSBehaviour behaviour) { var id = GetVacantID(); var client = new Client(name, id, behaviour); Clients.Add(client); if (JoinEvent != null) { JoinEvent(client); } }
internal void OnDisconnection(WSSBehaviour behaviour, CloseEventArgs args) { DisconnectionEvent?.Invoke(behaviour, args); }
internal void OnMessage(WSSBehaviour behaviour, MessageEventArgs args) { MessageEvent?.Invoke(behaviour, args); }
internal void OnConnection(WSSBehaviour behaviour) { ConnectionEvent?.Invoke(behaviour); }
public Client(string name, int ID, WSSBehaviour behaviour) { this.Name = name; this.ID = ID; this.Behaviour = behaviour; }