README.md
1Thrift Haxe Software Library
2
3License
4=======
5
6Licensed to the Apache Software Foundation (ASF) under one
7or more contributor license agreements. See the NOTICE file
8distributed with this work for additional information
9regarding copyright ownership. The ASF licenses this file
10to you under the Apache License, Version 2.0 (the
11"License"); you may not use this file except in compliance
12with the License. You may obtain a copy of the License at
13
14 http://www.apache.org/licenses/LICENSE-2.0
15
16Unless required by applicable law or agreed to in writing,
17software distributed under the License is distributed on an
18"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
19KIND, either express or implied. See the License for the
20specific language governing permissions and limitations
21under the License.
22
23Using Thrift with Haxe
24========================
25
26Haxe setup
27---------------
28
29Thrift requires Haxe 4.2.1. Installers for Windows and OSX
30platforms are available at `http://haxe.org/download`.
31
32Depending on the desired targets, you may have to install the appropriate HaxeLibs
33after installing Haxe itself. For example, if you plan to target C++, enter the
34following command after installing Haxe:
35
36 haxelib install hxcpp
37
38For other targets, please consult the Haxe documentation whether or not any additional
39target libraries need to be installed and how to achieve this.
40
41
42Haxe on Linux
43---------------
44
45For Linux platforms it is recommended to use the distro-specific package
46manager, where possible. More detailed information can be found at the
47Haxe Linux download section: http://haxe.org/download/linux
48
49If you run into the error message
50
51 Uncaught exception - load.c(237) : Failed to load library : /usr/lib/neko/regexp.ndll
52 (libpcre.so.3: cannot open shared object file: No such file or directory)
53
54this can be solved depending on your OSes bitness by either
55
56 sudo ln -sf /usr/lib/libpcre.so.1 /usr/lib/libpcre.so.3
57 sudo ldconfig
58
59or
60
61 sudo ln -sf /usr/lib64/libpcre.so.1 /usr/lib64/libpcre.so.3
62 sudo ldconfig
63
64Thrift Haxe bindings
65-------------------
66
67Thrift Haxe bindings can be set up via the `haxelib` tool as usual.
68Alternatively, the "github" method can be used.
69
70- To set up any **stable version**, choose the appropriate branch (e.g. `0.14.1`):
71
72 - `haxelib git thrift https://github.com/apache/thrift.git 0.14.1 lib/haxe`
73
74- To set up the current **development version**, use the `master` branch:
75
76 - `haxelib git thrift https://github.com/apache/thrift.git master lib/haxe`
77
78As usual, the installed library can be updated using `haxelib upgrade`
79or `haxelib update thrift`.
80
81In order to work with Thrift, you will need to install the Thrift compiler
82or build from source, depending on your operating system. Appropriate
83downloads and more information can be found at http://thrift.apache.org
84
85To get started, visit the /tutorial/haxe and /test/haxe dirs for examples.
86If you are using the HaxeDevelop IDE, you'll find appropriate project files
87in these folders.
88
89
90Breaking changes
91========================
92This version requires Haxe 4 and cannot be used with earlier versions.
93
94It is recommended to clear out all gen-haxe contents once before switching
95to the new version. Otherwise you may run into troubles with leftovers from
96previous versions.
97
98The compiler option ```callbacks``` is now obsolete. The compiler will always
99generate a dual interface (i.e. with optional callback style) for use on the
100client side, plus a new ```_service``` interface to be used for server
101implementations. Consequentially, your client and server implementations will
102need some manual intervention.
103
104
105PHP HTTP Server notes
106========================
107
108- you have to import PHP files generated by haxe into PHP
109```php
110require_once dirname(__FILE__) . '/bin/php-web-server/Main-debug.php';
111```
112
113- trace() by default outputs into stdout (http response), so you have to redirect it to stderr or you own logs, something like
114```haxe
115//remap trace to error log
116haxe.Log.trace = function(v:Dynamic, ?infos:haxe.PosInfos)
117{
118 //simulate normal trace https://github.com/HaxeFoundation/haxe/blob/development/std/haxe/Log.hx
119 var newValue : Dynamic;
120 if (infos != null && infos.customParams!=null) {
121 var extra:String = "";
122 for( v in infos.customParams )
123 extra += "," + v;
124 newValue = v + extra;
125 }
126 else {
127 newValue = v;
128 }
129 var msg = infos != null ? infos.fileName + ':' + infos.lineNumber + ': ' : '';
130 Sys.stderr().writeString('${msg}${newValue}\n');
131}
132```
133
134- to allow thrift server to read/write HTTP request/response, it should be pointed out to php streams
135```haxe
136transport = new TWrappingServerTransport(
137 new TStreamTransport(
138 new TFileStream("php://input", Read),
139 new TFileStream("php://output", Append)
140 )
141 );
142```
143
144- TSimpleServer doesn't stop after first call, so processor.process() should be called instead, or use runOnce property
145```haxe
146var server = new TSimpleServer( processor, transport, transfactory, protfactory);
147server.runOnce = true;
148```
149
150