/// <summary> /// Runs a callback over a NetIncomingMessage if the event matches. /// </summary> /// <param name="message"></param> /// <param name="ev"></param> /// <param name="receiverPeerType"></param> /// <param name="callback"></param> public static void RunEvent(this NetIncomingMessage message, Event ev, NetworkSingleton.PeerType receiverPeerType, NetworkSingleton.IncomingMessageDelegate callback) { if ((Event)message.ReadUInt32() == ev) { callback.Invoke(receiverPeerType, message); } }
private void OnNetworkInitialized(NetworkSingleton.PeerType networkPeerType) { networkChat = new Chat(); var chatUI = uiContainer.Component.GetSubUI <IChatUI>(); networkChat.ClientOnMessageReceived += message => { chatUI.SetChatText(networkChat.ToString()); }; chatUI.OnChatSubmitted += (sender, message) => { networkChat.SendMessage(new ChatMessage(players.ClientPlayer, message, Chat.Channel.Public)); }; }
/// <summary> /// Called when a chat message is received both on the client and server. /// </summary> /// <param name="receiverPeerType"></param> /// <param name="message"></param> private void ReceiveMessage(NetworkSingleton.PeerType receiverPeerType, NetIncomingMessage message) { var msg = message.ReadDataBytes().DeserializeEventData <ChatMessage>(); messageQueue.Enqueue(msg); //Client receive message. if (receiverPeerType == NetworkSingleton.PeerType.Client) { DebugConsole.Instance.Log(msg); ClientOnMessageReceived?.Invoke(msg); } //Server received message if (receiverPeerType != NetworkSingleton.PeerType.Server) { return; } DebugConsole.Instance.Log(msg); if (msg.Channel.Value >= (ushort)Channel.Private) //Private channel { msg.Channel.Decompress(); //TODO: get players of these two id's and send. return; } switch (msg.Channel.Value) { case (ushort)Channel.Public: //Send to all Network.SendEventToAllClients(NetworkEvents.Event.ChatMessage, message); break; case (ushort)Channel.Vicinity: //TODO: Get clients in vicinity then send. break; case (ushort)Channel.Whisper: //TODO:Get clients in whisper distance and send. break; default: DebugConsole.Instance.Log("Chat channel not supported: " + msg.Channel); break; } }
private void OnClientConnected(NetworkSingleton.PeerType sender, NetConnection netconenction) { var player = players.CreatePlayer(sender, netconenction); if (player == null) { return; } //Set player position if local if (!player.IsRemote) { var spawnObject = map.ObjectGroups["Objects"].GetTiledObject("spawn"); var pos = new Vector2 { X = spawnObject.WorldPosition.X, Y = spawnObject.WorldPosition.Y }; player.Entity.SetPosition(pos); } }
public Player CreatePlayer(NetworkSingleton.PeerType netPeerType, NetConnection connection) { return(playerMap[netPeerType].Invoke(connection)); }