Esempio n. 1
0
        public void SendMessage(ulong endpoint, IMsg msg)
        {
            var target = MyAPIGateway.Multiplayer == null || endpoint == MyAPIGateway.Multiplayer.MyId
                ? "local"
                : (Core.Players.TryGetPlayerBySteamId(endpoint)?.DisplayName ?? $"Steam64={endpoint}");

            Logger.Debug($"Sending {msg.GetType().Name} to {target}");
            if (MyAPIGateway.Multiplayer == null || endpoint == MyAPIGateway.Multiplayer.MyId)
            {
                NetworkMessageRecieved?.Invoke(endpoint, msg);
                return;
            }

            Utilities.Assert(MyAPIGateway.Multiplayer.IsServer || endpoint == MyAPIGateway.Multiplayer.ServerId,
                             "Endpoint must be server for clients, and a client for server");
            var data = MyAPIGateway.Utilities.SerializeToBinary(new MsgContainer
            {
                Sender  = MyAPIGateway.Multiplayer.MyId,
                Message = msg
            });

            if (MyAPIGateway.Multiplayer.IsServer)
            {
                MyAPIGateway.Multiplayer.SendMessageTo(MOD_COMM_ID, data, endpoint);
            }
            else
            {
                MyAPIGateway.Multiplayer.SendMessageToServer(MOD_COMM_ID, data);
            }
        }
Esempio n. 2
0
        private void NetworkMessageHandler(byte[] bytes)
        {
            var container = MyAPIGateway.Utilities.SerializeFromBinary <MsgContainer>(bytes);
            var msg       = container.Message;

            Utilities.Assert(msg != null, "Message is null");
            if (msg != null)
            {
                var src = MyAPIGateway.Multiplayer == null || container.Sender == MyAPIGateway.Multiplayer.MyId
                    ? "local"
                    : (Core.Players.TryGetPlayerBySteamId(container.Sender)?.DisplayName ??
                       $"Steam64={container.Sender}");
                Logger.Debug($"Recieved {msg.GetType().Name} from {src}");
                NetworkMessageRecieved?.Invoke(container.Sender, msg);
            }
        }