// this is for _host only_ to send messages to themself public void SendMatchStateMessageSelf <T>(MatchMessageType opCode, T message) where T : MatchMessage <T> { Debug.LogError("Sending Match Data to Self"); // TODO: add more cases switch (opCode) { case MatchMessageType.AsteroidSpawned: OnAsteroidSpawned?.Invoke(message as MatchMessageSpawnElement); break; case MatchMessageType.PlayerSpawned: OnPlayerSpawned?.Invoke(message as MatchMessageSpawnShip); break; case MatchMessageType.BallSpawned: OnBallSpawned?.Invoke(message as MatchMessageSpawnElement); break; case MatchMessageType.GoalSpawned: OnGoalSpawned?.Invoke(message as MatchMessageSpawnElement); break; case MatchMessageType.StadiumEntered: OnStadiumEntered?.Invoke(); break; } }
/// <summary> /// This method is used by host to invoke locally event connected with match message which is sent to other players. /// Should be always runned on host client after sending any message, otherwise some of the game logic would not be runned on host game instance. /// Don't use this method when client is not a host! /// </summary> /// <typeparam name="T"></typeparam> /// <param name="opCode"></param> /// <param name="message"></param> public void SendMatchStateMessageSelf <T>(MatchMessageType opCode, T message) where T : MatchMessage <T> { //Choosing which event should be invoked basing on opCode and firing event switch (opCode) { //GAME case MatchMessageType.MatchEnded: OnGameEnded?.Invoke(message as MatchMessageGameEnded); break; //UNITS case MatchMessageType.UnitSpawned: OnUnitSpawned?.Invoke(message as MatchMessageUnitSpawned); break; /* * case MatchMessageType.UnitMoved: * OnUnitMoved?.Invoke(message as MatchMessageUnitMoved); * break; * * case MatchMessageType.UnitAttacked: * OnUnitAttacked?.Invoke(message as MatchMessageUnitAttacked); * break; */ //SPELLS /* * case MatchMessageType.SpellActivated: * OnSpellActivated?.Invoke(message as MatchMessageSpellActivated); * break; */ //CARDS /* * case MatchMessageType.CardPlayRequest: * OnCardRequested?.Invoke(message as MatchMessageCardPlayRequest); * break; * * case MatchMessageType.CardPlayed: * OnCardPlayed?.Invoke(message as MatchMessageCardPlayed); * break; * * case MatchMessageType.CardCanceled: * OnCardCancelled?.Invoke(message as MatchMessageCardCanceled); * break; * * case MatchMessageType.StartingHand: * OnStartingHandReceived?.Invoke(message as MatchMessageStartingHand); * break; */ default: break; } }
public void Send(MatchMessageType msgtype, int arg = 0) { if ((this.webSocket != null) && this.webSocket.IsOpen) { MatchMessage message = new MatchMessage(); this.myname = LocalSave.Instance.GetUserName(); message.userid = LocalSave.Instance.GetServerUserID().ToString(); if (this.myname == string.Empty) { this.myname = message.userid; } message.nickname = this.myname; message.msgtype = (short)msgtype; message.argint = arg; this.Send(JsonConvert.SerializeObject(message)); } }
/// <summary> /// This method sends match state message to other players through Nakama server. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="opCode"></param> /// <param name="message"></param> public void SendMatchStateMessage <T>(MatchMessageType opCode, T message) where T : MatchMessage <T> { try { //Packing MatchMessage object to json string json = MatchMessage <T> .ToJson(message); //Sending match state json along with opCode needed for unpacking message to server. //Then server sends it to other players _socket.SendMatchStateAsync(MatchId, (long)opCode, json); } catch (Exception e) { Debug.LogError("Error while sending match state: " + e.Message); } }