コード例 #1
0
        public static void BroadcastDataMessage(DataMessageType messageType, byte[] data)
        {
            /*
             * long msgId = (long)messageType;
             *
             * string msgIdString = msgId.ToString( );
             * byte[ ] newData = new byte[data.Length + msgIdString.Length + 1];
             * newData[0] = (byte)msgIdString.Length;
             * for ( int r = 0; r < msgIdString.Length; r++ )
             *  newData[r + 1] = (byte)msgIdString[r];
             *
             * Buffer.BlockCopy( data, 0, newData, msgIdString.Length + 1, data.Length );
             */

            byte[] guidBytes = Guid.NewGuid().ToByteArray();

            //this is a much more elegant and lightweight method
            byte[] newData = new byte[sizeof(long) + guidBytes.Length + data.Length];
            guidBytes.CopyTo(newData, 0);
            BitConverter.GetBytes((long)messageType).CopyTo(newData, guidBytes.Length);
            data.CopyTo(newData, sizeof(long) + guidBytes.Length);

            //if (newData.Length > 4096)
            //{
            //    BroadcastMessageParts(newData);
            //    return;
            //}

            //Wrapper.GameAction( ( ) =>
            MySandboxGame.Static.Invoke(() =>
            {
                MyAPIGateway.Multiplayer.SendMessageToOthers(9000, newData);
                //ServerNetworkManager.Instance.BroadcastModMessage( 9000, newData );
            });
        }
コード例 #2
0
        protected NetOutgoingMessage CreateMessage(DataMessageType type)
        {
            var msg = Peer.CreateMessage();

            msg.Write(type);
            return(msg);
        }
コード例 #3
0
        public static void SendDataMessage(ulong steamId, DataMessageType messageType, byte[] data)
        {
            /*
             * long msgId = (long)messageType;
             *
             * string msgIdString = msgId.ToString( );
             * byte[ ] newData = new byte[data.Length + msgIdString.Length + 1];
             * newData[0] = (byte)msgIdString.Length;
             * for ( int r = 0; r < msgIdString.Length; r++ )
             *  newData[r + 1] = (byte)msgIdString[r];
             *
             * Buffer.BlockCopy( data, 0, newData, msgIdString.Length + 1, data.Length );
             */

            //hash a random long with the current time to make a decent quality guid for each message
            var randLong = new byte[sizeof(long)];

            _random.NextBytes(randLong);
            long uniqueId = 23;

            uniqueId = uniqueId * 37 + BitConverter.ToInt64(randLong, 0);
            uniqueId = uniqueId * 37 + DateTime.Now.GetHashCode();

            //this is a much more elegant and lightweight method
            var newData = new byte[sizeof(long) * 2 + data.Length];

            BitConverter.GetBytes(uniqueId).CopyTo(newData, 0);
            BitConverter.GetBytes((long)messageType).CopyTo(newData, sizeof(long));
            data.CopyTo(newData, sizeof(long) * 2);

            //Wrapper.GameAction( ( ) =>
            MySandboxGame.Static.Invoke(() => { MyAPIGateway.Multiplayer.SendMessageTo(9000, newData, steamId); });
        }
コード例 #4
0
        public static void BroadcastDataMessage(DataMessageType messageType, byte[] data)
        {
            /*
             * long msgId = (long)messageType;
             *
             * string msgIdString = msgId.ToString( );
             * byte[ ] newData = new byte[data.Length + msgIdString.Length + 1];
             * newData[0] = (byte)msgIdString.Length;
             * for ( int r = 0; r < msgIdString.Length; r++ )
             *  newData[r + 1] = (byte)msgIdString[r];
             *
             * Buffer.BlockCopy( data, 0, newData, msgIdString.Length + 1, data.Length );
             */
            var randLong = new byte[sizeof(long)];

            _random.NextBytes(randLong);
            long uniqueId = 23;

            uniqueId = uniqueId * 37 + BitConverter.ToInt64(randLong, 0);
            uniqueId = uniqueId * 37 + DateTime.Now.GetHashCode();

            var newData = new byte[sizeof(long) * 2 + data.Length];

            BitConverter.GetBytes(uniqueId).CopyTo(newData, 0);
            BitConverter.GetBytes((long)messageType).CopyTo(newData, sizeof(long));
            data.CopyTo(newData, sizeof(long) * 2);

            //Wrapper.GameAction( ( ) =>
            MySandboxGame.Static.Invoke(() => { MyAPIGateway.Multiplayer.SendMessageToOthers(9000, newData); });
        }
コード例 #5
0
ファイル: NetworkManager.cs プロジェクト: harald921/Ascent
    void ProcessDataMessage(NetIncomingMessage inMsg)
    {
        DataMessageType messageType = (DataMessageType)inMsg.ReadVariableUInt32();

        if (messageType == DataMessageType.Command)
        {
            CommandHandler.ProcessCommand(inMsg);
        }
    }
コード例 #6
0
 protected override void OnDataMessage(NetIncomingMessage message, DataMessageType type)
 {
     switch (type)
     {
     case DataMessageType.ChunkRequest:
     {
         var position = message.ReadPoint32();
         var request  = new ChunkRequest(position, message.SenderConnection);
         ChunkRequests.Enqueue(request);
         break;
     }
     }
 }
コード例 #7
0
        protected override void OnDataMessage(NetIncomingMessage message, DataMessageType type)
        {
            switch (type)
            {
            case DataMessageType.ChunkData:
            {
                ChunkPosition position = message.ReadPoint32();
                int           length   = message.ReadUInt16();

                Span <byte> compressedChunkBytes = stackalloc byte[length];
                message.Read(compressedChunkBytes);

                Span <Tile> tiles = stackalloc Tile[Chunk.Size * Chunk.Size];
                LZ4Codec.Decode(compressedChunkBytes, tiles.AsBytes());

                OnChunkData(new ChunkData(position, tiles));
                break;
            }

            case DataMessageType.BuildOrders:
            {
                int updateCount = message.ReadByte() + 1;
                for (int i = 0; i < updateCount; i++)
                {
                    TilePosition position = message.ReadPoint32();
                    ushort       tileID   = message.ReadUInt16();

                    var tile = new Tile(tileID);
                    BuildOrders.Enqueue(new BuildOrder(position, tile));

                    //var chunkPos = ChunkPosition.FromTile(order.Position);
                    //var chunk = ClientGame._chunks[chunkPos.X, chunkPos.Y];
                    //if (chunk == null)
                    //{
                    //    // TODO: build order may arrive before chunk data so
                    //    // add orders to a set and discard them if they're not used in time
                    //
                    //    Log.Warning($"Tried to update unloaded chunk {chunkPos}.");
                    //    return;
                    //}
                    //
                    //if (!chunk.TrySetTile(order.Position, order.Tile))
                    //    Log.Warning($"Invalid chunk update at position {order.Position} to chunk {chunkPos}.");
                }
                break;
            }
            }
        }
コード例 #8
0
        public static void BroadcastDataMessage(DataMessageType messageType, byte[] data)
        {
            //this may be unsafe, but whatever, my sanity requires the enum
            long msgId = (long)messageType;

            string msgIdString = msgId.ToString( );

            byte[] newData = new byte[data.Length + msgIdString.Length + 1];
            newData[0] = (byte)msgIdString.Length;
            for (int r = 0; r < msgIdString.Length; r++)
            {
                newData[r + 1] = (byte)msgIdString[r];
            }

            Buffer.BlockCopy(data, 0, newData, msgIdString.Length + 1, data.Length);

            MyAPIGateway.Multiplayer.SendMessageToOthers(9000, newData);
        }
コード例 #9
0
        public static void SendDataMessage(ulong steamId, DataMessageType messageType, byte[] data)
        {
            //this may be unsafe, but whatever, my sanity requires the enum
            long msgId = (long)messageType;

            string msgIdString = msgId.ToString( );

            byte[] newData = new byte[data.Length + msgIdString.Length + 1];
            newData[0] = (byte)msgIdString.Length;
            for (int r = 0; r < msgIdString.Length; r++)
            {
                newData[r + 1] = (byte)msgIdString[r];
            }

            Buffer.BlockCopy(data, 0, newData, msgIdString.Length + 1, data.Length);

            ServerNetworkManager.SendDataMessage(9000, newData, steamId);
        }
コード例 #10
0
        public static void SendDataMessage(ulong steamId, DataMessageType messageType, byte[] data)
        {
            //this may be unsafe, but whatever, my sanity requires the enum
            var msgId = (long)messageType;

            //TODO: Check for max message size of 4kB
            var msgIdString = msgId.ToString();
            var newData     = new byte[data.Length + msgIdString.Length + 1];

            newData[0] = (byte)msgIdString.Length;
            for (var r = 0; r < msgIdString.Length; r++)
            {
                newData[r + 1] = (byte)msgIdString[r];
            }

            Buffer.BlockCopy(data, 0, newData, msgIdString.Length + 1, data.Length);

            Wrapper.GameAction(() => MyAPIGateway.Multiplayer.SendMessageTo(9000, newData, steamId));
            //ServerNetworkManager.SendDataMessage( 9000, newData, steamId );
        }
コード例 #11
0
        private bool checkSrc <T, U>(List <T> mainSrc, List <U> subSrc, List <U> chkSrc, string tableName)
        {
            if (mainSrc == null || mainSrc.Count == 0)
            {
                DataMessageManager.GetInstance().AddMessage(DataMessageType.Warning, LibConsts.C_Msg_MissingMainSource, tableName, this.Para_LoopingDate.ToString("yyyyMMdd"));
                return(false);
            }

            int mainCount = mainSrc.Count;
            int subCount  = (subSrc == null) ? 0 : subSrc.Count;
            int chkCount  = (chkSrc == null) ? 0 : chkSrc.Count;

            string msg = "数据计数";

            if (mainCount != subCount)
            {
                msg += "不一致(" + (mainCount - subCount) + ")";
            }

            DataMessageType msgType = DataMessageType.Infomation;

            if (mainCount != subCount)
            {
                msgType = DataMessageType.Warning;
            }

            DataMessageManager.GetInstance().AddMessage(msgType,
                                                        (subCount == 0) ? LibConsts.C_Msg_MissingSubSource : msg,
                                                        "计数",
                                                        null,
                                                        mainCount, subCount, chkCount,
                                                        tableName,
                                                        this.Para_LoopingDate.ToString("yyyyMMdd")
                                                        );

            return(true);
        }
コード例 #12
0
        public static void BroadcastDataMessage( DataMessageType messageType, byte[ ] data )
        {
            /*
            long msgId = (long)messageType;

            string msgIdString = msgId.ToString( );
            byte[ ] newData = new byte[data.Length + msgIdString.Length + 1];
            newData[0] = (byte)msgIdString.Length;
            for ( int r = 0; r < msgIdString.Length; r++ )
                newData[r + 1] = (byte)msgIdString[r];

            Buffer.BlockCopy( data, 0, newData, msgIdString.Length + 1, data.Length );
            */
            byte[] randLong = new byte[sizeof(long)];
            _random.NextBytes(randLong);
            long uniqueId = 23;
            uniqueId = uniqueId * 37 + BitConverter.ToInt64( randLong, 0 );
            uniqueId = uniqueId * 37 + DateTime.Now.GetHashCode();

            byte[] newData = new byte[sizeof(long) * 2 + data.Length];
            BitConverter.GetBytes(uniqueId).CopyTo(newData, 0);
            BitConverter.GetBytes((long)messageType).CopyTo(newData, sizeof(long));
            data.CopyTo(newData, sizeof(long) * 2);

            if (newData.Length > 4096)
            {
                BroadcastMessageParts(newData);
                return;
            }

            //Wrapper.GameAction( ( ) =>
            MySandboxGame.Static.Invoke(() =>
                               {
                                    MyAPIGateway.Multiplayer.SendMessageToOthers( 9000, newData );
                                } );
        }
コード例 #13
0
        public void AddMessage(DataMessageType type, string message, string code, string field, object mainValue, object subValue, object checkValue, string tableName, string tradeDate)
        {
            DataMessage msg = new DataMessage();

            msg.Code  = (code == null ? "" : code);
            msg.Field = (field == null ? "" : field);

            msg.MainValue  = mainValue;
            msg.SubValue   = subValue;
            msg.CheckValue = checkValue;
            msg.Message    = message;
            msg.Type       = type;

            msg.TradeDate = tradeDate;
            msg.TableName = tableName;
            msg.Order     = this._MessageList.Count + 1;

            this._MessageList.Add(msg);

            if (this.PrintAtOnce)
            {
                this.printMessage(msg);
            }
        }
コード例 #14
0
		public static void BroadcastDataMessage( DataMessageType messageType, byte[ ] data )
        {
            //this may be unsafe, but whatever, my sanity requires the enum
            long msgId = (long)messageType;

            string msgIdString = msgId.ToString( );
			byte[ ] newData = new byte[ data.Length + msgIdString.Length + 1 ];
			newData[ 0 ] = (byte)msgIdString.Length;
			for ( int r = 0; r < msgIdString.Length; r++ )
				newData[ r + 1 ] = (byte)msgIdString[ r ];

			Buffer.BlockCopy( data, 0, newData, msgIdString.Length + 1, data.Length );

			MyAPIGateway.Multiplayer.SendMessageToOthers( 9000, newData );
		}
コード例 #15
0
        public static void SendDataMessage( ulong steamId, DataMessageType messageType, byte[ ] data )
		{
            //this may be unsafe, but whatever, my sanity requires the enum
            long msgId = (long)messageType;

			string msgIdString = msgId.ToString( );
			byte[ ] newData = new byte[ data.Length + msgIdString.Length + 1 ];
			newData[ 0 ] = (byte)msgIdString.Length;
			for ( int r = 0; r < msgIdString.Length; r++ )
				newData[ r + 1 ] = (byte)msgIdString[ r ];

			Buffer.BlockCopy( data, 0, newData, msgIdString.Length + 1, data.Length );

			ServerNetworkManager.SendDataMessage( 9000, newData, steamId );
		}
コード例 #16
0
        public static void SendDataMessage( ulong steamId, DataMessageType messageType, byte[ ] data )
        {
            /*
            long msgId = (long)messageType;

            string msgIdString = msgId.ToString( );
            byte[ ] newData = new byte[data.Length + msgIdString.Length + 1];
            newData[0] = (byte)msgIdString.Length;
            for ( int r = 0; r < msgIdString.Length; r++ )
                newData[r + 1] = (byte)msgIdString[r];

            Buffer.BlockCopy( data, 0, newData, msgIdString.Length + 1, data.Length );
            */

            //hash a random long with the current time to make a decent quality guid for each message
            byte[] randLong = new byte[sizeof(long)];
            _random.NextBytes(randLong);
            long uniqueId = 23;
            uniqueId = uniqueId * 37 + BitConverter.ToInt64(randLong, 0);
            uniqueId = uniqueId * 37 + DateTime.Now.GetHashCode();

            //this is a much more elegant and lightweight method
            byte[] newData = new byte[sizeof(long)*2 + data.Length];
            BitConverter.GetBytes( uniqueId ).CopyTo( newData, 0 );
            BitConverter.GetBytes((long)messageType).CopyTo(newData, sizeof(long));
            data.CopyTo( newData, sizeof(long)*2);

            if ( newData.Length > 4096 )
            {
                SendMessagePartsTo( steamId, newData );
                return;
            }

            //Wrapper.GameAction( ( ) =>
            MySandboxGame.Static.Invoke( () =>
                                         {
                                             MyAPIGateway.Multiplayer.SendMessageTo( 9000, newData, steamId );
                                         } );
        }
コード例 #17
0
 public List <DataMessage> GetMessages(DataMessageType type)
 {
     return(this._MessageList.FindAll(delegate(DataMessage m) { return m.Type == type; }));
 }
コード例 #18
0
 public void AddMessage(DataMessageType type, string message, string tableName, string tradeDate)
 {
     AddMessage(type, message, "", "", null, null, null, tableName, tradeDate);
 }
コード例 #19
0
 protected virtual void OnDataMessage(NetIncomingMessage message, DataMessageType type)
 {
 }
コード例 #20
0
 public void AddMessage(DataMessageType type, string message, string code, string field, string tableName, string tradeDate)
 {
     AddMessage(type, message, code, field, null, null, null, tableName, tradeDate);
 }