forked from connamara/quickfixn
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmessage_factory_gen.rb
96 lines (78 loc) · 2.44 KB
/
message_factory_gen.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
class MessageFactoryGen
def self.generate(messages, dir, fixver)
destdir = File.join(dir,fixver)
Dir.mkdir(destdir) unless File.exists?(destdir)
file_path = File.join(destdir,"MessageFactory.cs")
puts 'generate ' + file_path
content = gen_factory(messages,fixver)
File.open(file_path, 'w') {|f| f.puts(content)}
end
def self.gen_factory(messages,fixver)
return <<HERE
// This is a generated file. Don't edit it directly!
namespace QuickFix
{
namespace #{fixver}
{
public class MessageFactory : IMessageFactory
{
#{gen_method_create(messages,fixver)}
#{gen_method_group(messages,fixver)}
}
}
}
HERE
end
def self.gen_method_create(messages,fixver)
return <<HERE
public QuickFix.Message Create(string beginString, string msgType)
{
switch (msgType)
{
#{gen_method_create_cases(messages,fixver)}
}
return new QuickFix.Message();
}
HERE
end
def self.gen_method_group(messages,fixver)
return <<HERE
public Group Create(string beginString, string msgType, int correspondingFieldID)
{
#{gen_method_group_ifs(messages,fixver)}
return null;
}
HERE
end
def self.gen_method_create_cases(messages,fixver)
indent = " "*4*5
messages.map {|m|
indent + "case QuickFix.#{fixver}.#{m[:name]}.MsgType: return new QuickFix.#{fixver}.#{m[:name]}();"
}.join("\n")
end
def self.gen_method_group_ifs(messages,fixver)
indent = " "*4*4
lines = Array.new
messages.each {|m|
if(m[:groups].length > 0)
lines << indent + "if (QuickFix.#{fixver}.#{m[:name]}.MsgType.Equals(msgType))"
lines << indent + "{"
lines << indent + " switch (correspondingFieldID)"
lines << indent + " {"
m[:groups].each {|g|
gen_method_group_groups(m,fixver,g,"",lines,indent)
}
lines << indent + " }"
lines << indent + "}"
lines << ""
end
}
lines.join("\n")
end
def self.gen_method_group_groups(message,fixver,thisgroup,path,lines,indent)
lines << indent + " case QuickFix.Fields.Tags.#{thisgroup[:name]}: return new QuickFix.#{fixver}.#{message[:name]}#{path}.#{thisgroup[:name]}Group();"
thisgroup[:groups].each {|g|
gen_method_group_groups(message,fixver,g,"#{path}.#{thisgroup[:name]}Group",lines,indent);
}
end
end