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 ); }); }
protected NetOutgoingMessage CreateMessage(DataMessageType type) { var msg = Peer.CreateMessage(); msg.Write(type); return(msg); }
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); }); }
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); }); }
void ProcessDataMessage(NetIncomingMessage inMsg) { DataMessageType messageType = (DataMessageType)inMsg.ReadVariableUInt32(); if (messageType == DataMessageType.Command) { CommandHandler.ProcessCommand(inMsg); } }
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; } } }
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; } } }
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); }
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); }
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 ); }
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); }
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 ); } ); }
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); } }
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 ); }
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 ); }
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 ); } ); }
public List <DataMessage> GetMessages(DataMessageType type) { return(this._MessageList.FindAll(delegate(DataMessage m) { return m.Type == type; })); }
public void AddMessage(DataMessageType type, string message, string tableName, string tradeDate) { AddMessage(type, message, "", "", null, null, null, tableName, tradeDate); }
protected virtual void OnDataMessage(NetIncomingMessage message, DataMessageType type) { }
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); }