Skip to content

Instantly share code, notes, and snippets.

@rpgmaker
rpgmaker / gist:2142414
Created March 20, 2012 23:24
ESBMessageRequest.Send
public void Send() {
var transport = _transport ?? Helper.GetTCPTransport();
var hasAction = _action != null;
_receivedResponse = false;
_timeOut = _timeOut == null ? TimeSpan.FromSeconds(10) : _timeOut;
CorrelationID = CorrelationID == default(Guid) ? Guid.NewGuid() : CorrelationID;
if (hasAction) {
var responseTopic = Topic.Select<TResponse>();
if (responseTopic.State == ObjectState.InValid) Topic.Register<TResponse>();
var subscriberName = String.Concat("Subscriber", responseTopic.TopicName,
@rpgmaker
rpgmaker / gist:2125842
Created March 19, 2012 19:51
Receiver Logic
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ZMQ;
using System.Threading.Tasks;
using System.Runtime.ExceptionServices;
namespace Phoenix.ZeroMQConnectors {
public sealed class ZeroMQReceiver : ZeroMQBase {
@rpgmaker
rpgmaker / gist:1894839
Created February 23, 2012 20:13
Int64ToBytes
public static byte[] Int64ToBytes(long value) {
if (value <= 255) return new byte[] { (byte)value };
const int msb = 0xff;
byte[] buffer = new byte[8];
var index = 0;
var sValue = 0L;
unchecked {
buffer[index++] = (byte)(value & msb);
if ((sValue = (value >> 8) & msb) > 0) {
buffer[index++] = (byte)sValue;
@rpgmaker
rpgmaker / gist:1873410
Created February 21, 2012 03:25
BytesToTimeSpan
public static TimeSpan BytesToTimeSpan(byte[] buffer) {
if (buffer.Length == 1) {
if (buffer[0] == 0) return TimeSpan.MinValue;
else return TimeSpan.MaxValue;
} else if (buffer.Length == 2) {
return TimeSpan.FromTicks(TimeSpanTicks[buffer[0]] * buffer[1]);
}
var buffer2 = new byte[buffer.Length - 1];
Buffer.BlockCopy(buffer, 1, buffer2, 0, buffer2.Length);
var ticks = BytesToInt64(buffer2);
@rpgmaker
rpgmaker / gist:1873260
Created February 21, 2012 02:57
WriteTimeSpanToBuffer
public static void WriteTimeSpanToBuffer(CustomBuffer customBuffer, TimeSpan value, int tag) {
if (value == TimeSpan.Zero) return;
byte[] buffer = null;
if (value == TimeSpan.MaxValue) buffer = MaxTimeSpanBytes;
else if (value == TimeSpan.MinValue) buffer = MinTimeSpanBytes;
else {
int tickIndex = -1;
long ticksValue;
var ticks = value.Ticks;
for (var i = 0; i < TimeSpanTicksLength; i++) {
@rpgmaker
rpgmaker / gist:1770873
Created February 8, 2012 16:34
Emit List
static void WriteSerializerList(ILGenerator il, Type type,
MethodInfo getSetGetMethod, LocalBuilder msLocal,
List<Action<ILGenerator>> actions) {
var itemType = type.IsArray ? type.GetElementType() :
type.GetGenericArguments()[0];
var itemLocal = il.DeclareLocal(itemType);
var listLocal = il.DeclareLocal(type);
var indexLocal = il.DeclareLocal(typeof(int));
var startLabel = il.DefineLabel();
var endLabel = il.DefineLabel();
@rpgmaker
rpgmaker / gist:1757162
Created February 7, 2012 04:24
IL Emit for Dictionary
static void WriteSerializerDictionary(ILGenerator il, Type type,
MethodInfo getSetGetMethod, LocalBuilder msLocal,
List<Action<ILGenerator>> actions) {
var arguments = type.GetGenericArguments();
var valueType = arguments[0];
var keyType = arguments[1];
var keyValuePairType = genericKeyValuePairType.MakeGenericType(keyType, valueType);
var enumeratorLocal = il.DeclareLocal(
genericEnumeratorType.MakeGenericType(keyValuePairType));
var entryLocal = il.DeclareLocal(keyValuePairType);
@rpgmaker
rpgmaker / gist:1756874
Created February 7, 2012 03:03
IL Emit for Dictionary
static void WriteSerializerDictionary(ILGenerator il, Type type,
MethodInfo getSetGetMethod, LocalBuilder msLocal,
List<Action<ILGenerator>> actions) {
var arguments = type.GetGenericArguments();
var valueType = arguments[0];
var keyType = arguments[1];
var keyValuePairType = genericKeyValuePairType.MakeGenericType(keyType, valueType);
var enumeratorLocal = il.DeclareLocal(
genericEnumeratorType.MakeGenericType(keyValuePairType));
@rpgmaker
rpgmaker / gist:1754709
Created February 6, 2012 20:42
Generate Class and Properties
static void WriteSerializerClass(ILGenerator il,
MethodInfo getSetGetMethod,
Type type, int tag, LocalBuilder msLocal,
List<Action<ILGenerator>> actions) {
var isDefaultLabel = il.DefineLabel();
var isDict = dictType.IsAssignableFrom(type);
var isList = listType.IsAssignableFrom(type);
var isClass = !isDict && !isList;
var ms2Local = il.DeclareLocal(MemoryStreamType);
var bufferLocal = il.DeclareLocal(ByteArrayType);
@rpgmaker
rpgmaker / gist:1754631
Created February 6, 2012 20:30
Emit Dictionary
static void WriteSerializerDictionary(ILGenerator il, Type type,
MethodInfo getSetGetMethod, LocalBuilder msLocal,
List<Action<ILGenerator>> actions) {
var arguments = type.GetGenericArguments();
var valueType = arguments[0];
var keyType = arguments[1];
var keyValuePairType = genericKeyValuePairType.MakeGenericType(keyType, valueType);
var enumeratorLocal = il.DeclareLocal(
genericEnumeratorType.MakeGenericType(keyValuePairType));
var entryLocal = il.DeclareLocal(keyValuePairType);